系統中不少命令及軟件都要求通過root賬號權限來執行,root賬號權限過大,因此頻繁通過root進行系統操作會大大增大誤操作的機率。建議爲系統管理人員及使用人員建立各自的用戶賬號,有需要時再通過su命令切換到root賬號來進行操作。但是這樣做也有一些問題,在實際的管理中,並不是每個用戶都需要操作所有與root權限相關的操作。通過su命令切換成root賬戶意味着要給予用戶root賬戶的密碼信息,因此用戶完全可以直接使用root賬戶登錄系統,因而也就無法對用戶進行獨立的管理。
1. sudo特性
sudo通過更嚴謹的管理,爲用戶分配可通過root權限運行的某些特定的命令或軟件,同時又避免直接將root用戶賬號的密碼公開給普通用戶。
主要特點如下:
sudo限制指定用戶在指定主機上運行某些命令。
sudo提供日誌,記錄每個用戶通過sudo進行了哪些操作,並且在服務器中保存記錄以便管理審覈。
sudo允許系統管理員集中地管理用戶的權限及使用這些權限時的服務器位置。
sudo對root權限的使用時間有嚴格控制,通過sudo得到root權限後,用戶可以在5分鐘內使用此權限,時間超出後必須重新進行密碼驗證。
2. sudo基本配置
修改文件/etc/sudoers:
……
## Networking
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig,
/bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/
iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /
sbin/iwconfig, /sbin/mii-tool
設定一個名爲NETWORKING的命令集以便於權限定義的分類
## Installation and management of software
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
……
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
此處指定root用戶可以通過sudo得到所有命令的使用權限
ken localhost=(ALL) ALL
指定用戶ken可以在主機localhost上通過任何用戶權限運行所有命令
%sale ALL=(ALL) NETWORKING
指定組sale中的用戶可以在任何主機上通過任何用戶權限
運行NETWORKING命令集中所有的命令
3. sudo基本操作
[ken@server1 ~]$ /usr/bin/passwd root
passwd: Only root can specify a user name.
由於用戶ken的權限不夠,因此無法通過passwd修改root用戶賬號的密碼
[ken@server1 ~]$ sudo /usr/bin/passwd root
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
Password:在此處輸入用戶ken的登錄密碼
Changing password for user root.
New UNIX password:
通過sudo得到root執行權限後,可以對root的密碼進行修改
從以上實例可以看出,一旦passwd命令的sudo運行權限授予了某個用戶,此用戶就有權通過passwd來對root管理員賬號的密碼進行修改,從而得到root賬號的所有操作權限。在實際生產環境中請注意避免此類情況的發生,嚴格控制sudo可運行的命令。