分类: LINUX
2008-10-09 16:17:11
Sudo 是一個允許系統管理員授權讓普通用戶執行部分或全部root命令的工具。這樣可以減少root登陸提高系統安全性。
Sudo特點:
1.可以限制特定的用戶在特定的主機上運行指定的命令
2.有非常詳細的日誌紀錄
3.sudo使用時間戳文件來執行類似"檢票"系統。當用戶使用sudo並且輸入密碼後,用戶默認獲得了一張存活期為5分鐘的票(這個數值可以在編譯的時候更改),超過5分鐘不用的話就需要重新輸入密碼才能使用
sudo安裝過程:一般系統都默認有安裝
配置文件/etc/sudoers:
以下簡略介紹該文件的配置項(root使用visudo編輯該文件)
第一部分:# Host alias specification(主機別名定義,用於定義多臺住機)
格式:Host_Alias SERVER = 192.168.0.1/255.255.255.0
Host_Alias SERVER1 = 172.17.1.1
第二部分:# User alias specification(用戶別名定義,用於定義多組用戶)
格式:User_Alias ADMIN = test,jack,tom
User_Alias TEST = user1
第三部分:# Cmnd alias specification (命令別名定義,定義用戶執行命令列表)
格式:Cmnd_Alias CAT = /bin/cat /etc/sudoers
Cmnd_Alias Ls = /bin/ls /root
第四部分:# Override built in defaults(增加日誌紀錄功能)
Defaults@SERVER log_host, logfile=/var/log/sudo.log
#為host alise裏的主機增加一個附加日誌,如果這個日誌需要保存多年,則可使用log_year,這樣在日誌紀錄的時候將紀錄詳細的年份
解釋配置實例:
[test@redflag test]$ sudo cat /etc/sudoers
# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#
# Host alias specification
Host_Alias SERVER = 172.17.196.10 #配置主機172.17.196.10別名SERVER;Host_Alias前不能有空格
# User alias specification
User_Alias ADMIN = test,jack #配置用戶組ADMIN,所屬用戶test,jack
# Cmnd alias specification
Cmnd_Alias CT = /bin/cat /etc/sudoers,/bin/cat /etc/shadow
Cmnd_Alias CA = /bin/ls /root
#配置命令別名CT,可以執行cat etc/sudoers,cat /etc/shadow 命令,CA可執行 la /root命令
# Defaults specification
# User privilege specification
root ALL=(ALL) ALL
test SERVER=CT,CA #配置test用戶可以在SERVER執行cat /etc/sudoers,/cat /etc/shadow,ls
/root 命令
# test ALL=(ALL) NOPASSWD: ALL(配置test可以執行所有的root命令,且使用sudo時不需要輸入密碼)
# Override built in defaults
Defaults@SERVER log_host, logfile=/var/log/sudo.log
#配置日誌紀錄到主機SERVER的/var/log/sudo.log文件
# Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
# Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now
日誌文件:
截取/var/log/sudo.log的一段紀錄如下:
Mar 3 15:13:14 : test : HOST=redflag : command not allowed ; TTY=pts/0 ;
PWD=/home/test ; USER=root ; COMMAND=/bin/ls /root
Mar 3 15:13:18 : test : HOST=redflag : command not allowed ; TTY=pts/0 ;
PWD=/home/test ; USER=root ; COMMAND=/bin/su -
Mar 3 15:13:56 : test : HOST=redflag : TTY=pts/0 ; PWD=/home/test ; USER=root ;
COMMAND=/bin/cat /etc/sudoers
Mar 3 15:14:10 : test : HOST=redflag : TTY=pts/0 ; PWD=/home/test ; USER=root ;
COMMAND=/bin/ls /root
Mar 3 16:27:30 : test : HOST=redflag : TTY=pts/0 ; PWD=/home/test ; USER=root ;
COMMAND=/bin/cat /etc/sudoers
Mar 3 16:29:47 : test : HOST=redflag : command not allowed ; TTY=pts/0 ;
PWD=/home/test ; USER=root ; COMMAND=/bin/cat /var/log/sudo.log
配置中碰到的問題:
1、主機名配置錯誤導致sudo不能執行和日誌紀錄。
錯誤提示:Sorry, user test is not allowed to execute '/bin/cat /etc/sudoers' as root on
localhost.localdomain.
解決:將其中的localhost改為真實主機名字或IP即可
test localhost=/sbin/cat /etc/sudoers
Defaults@localhost log_host /var/log/sudo.log
2、命令別名列表中命令錯誤導致sudo不能執行
錯誤提示:[jackyu@localhost jackyu]$ sudo cat /etc/sudoers
Sorry, user jackyu is not allowed to execute '/bin/cat /etc/sudoers' as root on
localhost.localdomain.
解決:由於在Cmnd alias裏定義的時候命令書寫有誤(Cmnd_Alias CAT = /bin/cat -n /etc/sudoers).
執行:sudo cat -n /etc/sudoers
[注]: 不管在Cmnd alias裏還是在# User privilege specification中指定命令,使用sudo運行時必須一摸一樣,否則將出錯。比如在Cmnd alias裏指定某用戶職能運行 /bin/cat /etc/sudoers,如果該用戶登錄後運行 sudo /cat -n /etc/sudoers將會出錯!