常規來說,root的權限是不可隨意分割的,所以很難既給某個用戶完成一件任務的權力,比如說備份,而又不給這個人自由運行系統的權力。如果把root給多個人去使用,顯然是個不安全的做法。
針對這個問題,現在廣泛的采用SUDO的方式來解決。
所謂的SUDO就是以普通用戶的身份登錄到系統,當需要完成某項任務時(假設此任務普通用戶無權使用),在管理員root的授權下來完成。呵呵,對了,有點像WINDOWS中的委派。一旦用戶得到授權後就可以去做原本自己不能做的事情,從而幫助管理員管理,減輕管理員的負擔。
執行sudo時,它會讀取文件/etc/soduers,這個文件列出了授權使用sudo的人以及他們在每台主機上可以運行的命令。如果提供給sudo的命令允許運行,那麼sudo就提示輸入這個用戶自己的口令並執行命令。在隨後的5分鐘內,再次使用sudo則不需輸入口令。sudo沒有定義好的日志文件,所以如果你要使用sudo的日志,你還得自己去配置一下。至於怎麼去配咱們以後討論。
如果你要配置sudo,建議你使用visudo來配置/etc/sudoers文件,它會檢查是否有人在同時編輯修改此文件。以下是一個例子:
## Host Aliases
Host_Alias FILESERVERS = fs1, fs2
Host_Alias MAILSERVERS = smtp, smtp2
## 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
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
tom,z3 FILESERVERS=ALL
jerry MAILSERVERS=/usr/sbin/tcpdump:FILESERVERS=(L4)DUMP
w5 ALL=(ALL)ALL,!SHELLS
上面第一部分是用來定義主機的,如果不定義那麼你就得在第三部分手動寫入。第二部分是用來定義服務的,如果不定義那麼你就得在第三部分手動寫入。建議你使用這種別名的方式來定義你的“操作”,這樣sudoers的可讀性更強。
第三部分是關於權限的定義,也就是說誰可以用sudo干什麼事情。其中格式如下:
適用的用戶 要注意的主機=(轉換成誰的身份)可以使用什麼命令
如果沒有定義括號中的內容,則表示只以root身份執行相應操作。!表示“除什麼以外”。
當普通用戶,例如tom,登錄到系統要執行本來沒有權限執行的操作時,他可以鍵入如下命令:
sudo su –
然後鍵入自己的密碼就可以了。
Alias主要分成4種
Host_Alias
Cmnd_Alias
User_Alias
Runas_Alias
1) 配置Host_Alias:就是主機的列表
Host_Alias HOST_FLAG = hostname1, hostname2, hostname3
2) 配置Cmnd_Alias:就是允許執行的命令的列表
Cmnd_Alias COMMAND_FLAG = command1, command2, command3
3) 配置User_Alias:就是具有sudo權限的用戶的列表
User_Alias USER_FLAG = user1, user2, user3
4) 配置Runas_Alias:就是用戶以什麼身份執行(例如root,或者oracle)的列表
Runas_Alias RUNAS_FLAG = operator1, operator2, operator3
5) 配置權限
配置權限的格式如下:
USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG
如果不需要密碼驗證的話,則按照這樣的格式來配置
USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG
使用sudo的好處
1, 由於有日志可以提高安全審計的能力
2, 操作員不需要不受限制的root特權就能完成許多任務
3, 保證root密碼的安全
4, 比使用su快
5, 不需要改變root密碼就能收回某些權限
6, 只需維護sudoers就可維護所以用戶的特權列表
7, 降低遺留root shell的概率
8, 可以使用單個文件來控制對整個網絡的訪問權限
當然也有不足,比如說如果突破了能執行sudo命令的個人賬戶,就等同突破了root賬戶本身