當咱們須要使用系統管理員權限操做系統時,能夠使用su命令來實現,這裏有一個問題就是須要root的密碼。若管理人員有多數,則root密碼被泄露的概率變大。shell
從而有了sudo命令,執行流程:bash
用戶執行sudo時,會判斷配置文件/etc/sudoers,查看用戶是否有執行sudo的權限;ide
若用戶有執行sudo的權限,查看/var/db/sudo/zhangsan(密碼的時間戳在這裏),是否密碼過時,過時則輸入密碼,若沒有權限則報錯
測試
輸入正確密碼後則開始sudo後續的命令ui
執行sudo讀取的配置文件是/etc/sudoers。spa
前九行在介紹文件:操作系統
sudo是讓給予權限的用戶能夠執行個別的命令,也不須要root密碼orm
這個文件最後使用visudo命令來編輯,保存時會檢查語法是否正確。
ip
再後三段是設置:it
主機別名Host Aliases、用戶別名User Aliases、命令別名Command Aliases
在後面就是默認的規範了
最後是最重要的配置語法介紹了:
示例
root ALL=(ALL) ALL root的配置默認是在全部機器上或ip均可以鏈接本機執行任何命令
root:用戶名稱,能夠是用戶,也能夠是一個別名組包含多個用戶
ALL:表明全部機器或ip,能夠使用主機別名或ip別名設置
(ALL):可切換的用戶,all表示可切換任何用戶
ALL:可執行的命令,多個命令使用,分隔或者使用命令別名功能
另外一種方法就是:
%wheel ALL=(ALL) ALL
wheel就是一個確實存在的組名,只要添加到此組的用戶都有sudo權限。
zhangsan 和 lisi都是這個wheel組。就能夠執行sudo命令。
注:
在作測試的時候,切換到zhangsan後,執行sudo -l 報錯sudo:有效用戶 ID 不是 0,sudo 屬於 root 並設置了 setuid 位嗎?
[root@www ~]# ls -l /usr/bin/sudo ---x--x--x. 1 root root 123832 11月 22 2013 /usr/bin/sudo [root@www ~]# chmod u+s /usr/bin/sudo [root@www ~]# ls -l /usr/bin/sudo ---s--x--x. 1 root root 123832 11月 22 2013 /usr/bin/sudo
而後就能夠正常使用sudo了
[zhangsan@www ~]$ sudo -l 匹配此主機上 zhangsan 的默認條目: requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin, logfile=/var/log/sudo.log 用戶 zhangsan 能夠在該主機上運行如下命令: (ALL) /bin/rm, (ALL) /bin/mv [zhangsan@www ~]$
sudo命令:
選項
-l 查看當前用戶可執行和沒法執行的命令
-u 切換到指定的用戶執行命令,不指定默認使用root
-s 指定shell,不輸入shell取環境變量中設定的shell