sudo 命令其實是Linux中的一種權限管理機制,管理員可以授權於一些普通用戶去執行一些 root 執行的操作,而不需要知道 root 的密碼。
嚴謹些說,sudo 允許一個已授權用戶以超級用戶或者其它用戶的角色運行一個命令。當然,能做什么不能做什么都是通過安全策略來指定的。sudo 支持插件架構的安全策略,並能把輸入輸出寫入日志。第三方可以開發並發布自己的安全策略和輸入輸出日志插件,並讓它們無縫的和 sudo 一起工作。默認的安全策略記錄在 /etc/sudoers 文件中。而安全策略可能需要用戶通過密碼來驗證他們自己。也就是在用戶執行 sudo 命令時要求用戶輸入自己賬號的密碼。如果驗證失敗,sudo 命令將會退出。
我們可以通過visudo來修改/etc/sudoers配置文件,visudo等價於vi /etc/sudoers。
文件的語法相當於 who where whom command 表示哪個用戶可以在哪個主機以誰的身份來執行哪些命令。
如:
[root@zxl ~]# visudo
root:表示root用戶。
ALL:表示在任何主機上都可以,也可以表示192.168.232.0/24。
(ALL):表示以任何的身份。
ALL:表示可以執行任何命令。
整條語句的意思就是:root用戶可以在任何機器上以任何身份執行任何命令。
上面這條表示在wheel這個組中的成員所擁有的權限,這里表示這個組中的成員能在任何機器上以任何身份來執行任何命令。
和前面的意思是一樣的,不過在執行命令的時候不會提示輸入密碼。默認的情況下是需要輸入角色的密碼。
eg:
給zxl用戶賦予任何角色來執行任何命令
zxl ALL=(ALL) ALL
切換到zxl用戶:
[root@zxl ~]# su - zxl
執行useradd命令:
需要在命令前加上sudo
[zxl@zxl ~]$ sudo useradd lisi
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.
[sudo] password for zxl:
[zxl@zxl ~]$
注意:在這過程中需要輸入zxl用戶的密碼
[zxl@zxl ~]$ tail -1 /etc/passwd
lisi:x:501:501::/home/lisi:/bin/bash
[zxl@zxl ~]$
給zxl用戶以任何身份來執行指定命令:
99 zxl ALL=(ALL) /bin/touch, /usr/sbin/useradd
表示:zxl用戶可以執行touch和useradd命令,多條命令用逗號和空格隔開,命令用全路徑,查看命令所在路徑用which命令。
[root@zxl ~]# su - zxl
[zxl@zxl ~]$ sudo touch /etc/test.txt
[sudo] password for zxl:
[zxl@zxl ~]$ ll /etc/test.txt
-rw-r--r-- 1 root root 0 Jul 11 17:32 /etc/test.txt
[zxl@zxl ~]$
屏蔽輸入密碼提示:在命令處添加 NOPASSWD: ALL
表示zxl用戶可以不用輸入密碼執行任何命令。
[root@zxl ~]# su - zxl
[zxl@zxl ~]$ sudo touch /etc/test1.txt
[zxl@zxl ~]$ LANG=en
[zxl@zxl ~]$ ll /etc/test.txt
-rw-r--r-- 1 root root 0 Jul 11 17:32 /etc/test.txt
[zxl@zxl ~]$ ll /etc/test1.txt
-rw-r--r-- 1 root root 0 Jul 11 17:43 /etc/test1.txt
[zxl@zxl ~]$
[zxl@zxl ~]$ rm -rf /etc/test1.txt
rm: cannot remove `/etc/test1.txt': Permission denied
[zxl@zxl ~]$ sudo rm /etc/test1.txt
[zxl@zxl ~]$ sudo rm /etc/test.txt
[zxl@zxl ~]$