Sudo 可以給用戶一些超級用戶的權限而不需要 root 密碼。Sudo 對于一個服務器和工作站混合的多用戶環境來說非常有用。使用 sudo 運行命令:
#?sudo?/etc/init.d/dhcpd?restart????????????#?用?root?權限運行?rc?腳本
#?sudo?-u?sysadmin?whoami???????????????????#?使用其他用戶運行命令
## 配置
Sudo 的配置在?`/etc/sudoers`?中,并且只能用?`visudo`?編輯。其基本語法是(列表是以逗號分隔的):
user?hosts?=?(runas)?commands??????????#?在?/etc/sudoers?中
-
`users`?一個或多個用戶或是%用戶組(像 %wheel) 來獲得權限
-
`hosts`?主機列表(或 ALL)
-
`runas`?列出用戶以何種身份(或 ALL)來執行命令,放在 ( ) 內!
-
`commands`?列出可被 users 以 runas 或 root 權限運行的命令(或 ALL)
另外一些關鍵字可以定義別名,他們是 User_Alias, Host_Alias, Runas_Alias 和 Cmnd_Alias。這對于一些較大的設置比較有用。下面是 sudoers 例子:
#?cat?/etc/sudoers
#?主機別名
Host_Alias???DMZ?????=?212.118.81.40/28
Host_Alias???DESKTOP?=?work1,?work2
#?用戶別名?和?runas?別名
User_Alias???ADMINS??=?colin,?luca,?admin
User_Alias???DEVEL???=?joe,?jack,?julia
Runas_Alias??DBA?????=?oracle,pgsql
#?命令別名,其值為全路徑命令
Cmnd_Alias???SYSTEM??=?/sbin/reboot,/usr/bin/kill,/sbin/halt,/sbin/shutdown,/etc/init.d/
Cmnd_Alias???PW??????=?/usr/bin/passwd?[A-z]*,?!/usr/bin/passwd?root?#?Not?root?pwd!
Cmnd_Alias???DEBUG???=?/usr/sbin/tcpdump,/usr/bin/wireshark,/usr/bin/nmap
#?一個真實的規則
root,ADMINS??ALL?????=?(ALL)?NOPASSWD:?ALL????#?ADMINS?別名中的用戶可做任何事情不需要密碼
DEVEL????????DESKTOP?=?(ALL)?NOPASSWD:?ALL????#?開發人員可在?DESKTOP?別名的主機上做任何事情
DEVEL????????DMZ?????=?(ALL)?NOPASSWD:?DEBUG??#?開發人員可以在?DMZ?別名的主機上使用?DEBUG?別名中的命令
#?用戶?sysadmin?可以在?DMZ?服務器上執行一些命令
sysadmin?????DMZ?????=?(ALL)?NOPASSWD:?SYSTEM,PW,DEBUG
sysadmin?????ALL,!DMZ?=?(ALL)?NOPASSWD:?ALL???#?可以在非?DMZ?主機上做任何事情
%dba?????????ALL?????=?(DBA)?ALL??????????????#?用戶組?dba?可以運行?DBA?別名中用戶權限的所有命令
#?所有用戶可以在?DESKTOP?別名的主機上?掛載/卸載?CD-ROM
ALL??????????DESKTOP?=?NOPASSWD:?/sbin/mount?/cdrom,/sbin/umount?/cdrom