什么是sudo?
在Linux中,經(jīng)常會(huì)看到一些帶
sudo的命令,有好事者就要問了,sudo是什么,有什么用?
sudo是Linux下常用的允許普通用戶使用超級(jí)用戶權(quán)限的工具,允許系統(tǒng)管理員讓普通用戶執(zhí)行一些或者全部的root命令,這種感覺就像是你的老師授給你當(dāng)了小組長(zhǎng)一樣。這樣以來,就不僅減少了root用戶的登陸次數(shù)和管理時(shí)間,也提高了系統(tǒng)安全性。
?
配置文件
sudo的配置文件是sudoers文件,它允許系統(tǒng)管理員集中的管理用戶的使用權(quán)限和使用的主機(jī)。它所存放的位置默認(rèn)是在/etc/sudoers,sudo提供了一個(gè)編輯該文件的命令:visudo來對(duì)該文件進(jìn)行修改,visudo使用vi打開/etc/sudoers文件,但是在保存退出時(shí),visudo會(huì)檢查內(nèi)部語法,避免用戶輸入錯(cuò)誤信息,操作和vim是一樣的
[root@Jobs /]# visudo
...
91 ## Allow root to run any commands anywhere
92 root ALL=(ALL) ALL
93
94 ## Allows members of the 'sys' group to run networking, software,
95 ## service management apps and more.
96 # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
97
98 ## Allows people in group wheel to run all commands
99 %wheel ALL=(ALL) ALL
100
101 ## Same thing without a password
102 # %wheel ALL=(ALL) NOPASSWD: ALL
...
"/etc/sudoers.tmp" 112L, 3938C
通過visudo打開配置文件之后,會(huì)發(fā)現(xiàn)里面都是一些對(duì)配置文件的描述注釋,一直往下翻,看到第92行左右,會(huì)看到有一個(gè)范例root ALL=(ALL) ALL,從左往右依次解釋一下
root:表示用戶名
ALL:表示允許登陸的主機(jī),大部分情況下為ALL
(ALL):表示以誰的身份去執(zhí)行,如果在()內(nèi)寫ALL,表示root身份
ALL:表示當(dāng)前用戶可執(zhí)行的命令,多個(gè)命令可以用“,”分割
理所當(dāng)然的, 如果在第92行的root ALL=(ALL) ALL下加一行,test1 ALL=(ALL) ALL,則表示“test1”用戶在所有主機(jī)上可以“root”的身份執(zhí)行所有命令,千萬不要這么做,非常危險(xiǎn)!千萬不要這么做,非常危險(xiǎn)!千萬不要這么做,非常危險(xiǎn)!(重要的事情說三遍)
?
關(guān)于如何以正確姿勢(shì)來修改sudoers配置文件,下面會(huì)用示例的方式給大家展示
舉個(gè)栗子
[test1@Jobs root]$ ls /root/
ls: cannot open directory /root/: Permission denied
//“test1”沒有權(quán)限所有無法訪問“root”家目錄
[test1@Jobs root]$ sudo ls /root
//如果直接用`sudo`命令則需要讓“root”用戶輸入密碼,如果每次都要輸入,太煩了,而且也不安全
PassWord:
[root@Jobs ~]#visudo
···
92 root ALL=(ALL) ALL
93 test1 ALL=(ALL) /bin/ls
//在92行下面加一行,協(xié)商所需要執(zhí)行的命令路徑,命令路徑可用“which”命令來查看
···
[test1@Jobs root]$ sudo ls /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.
//會(huì)有一些提示,大概意思能力越大,責(zé)任越大
[sudo] password for test1:
//此時(shí)提示輸入“test1”用戶的密碼
bbr.sh bbr.sh.1 install_bbr.log shadowsocks.log shadowsocks.sh test ystemctl status firewalld
#常見配置文件寫法
[root@Jobs ~]#visudo
···
92 root ALL=(ALL) ALL
93 test1 ALL=(ALL) ALL #“test1”用戶在所有主機(jī)上可以“root”的身份執(zhí)行所有命令
94 %test1 ALL=(ALL) ALL #“test1”組內(nèi)用戶在所有主機(jī)上可以“root”的身份執(zhí)行所有命令
95 test1 ALL=(root) /bin,!/bin/who #“test1”用戶在所有主機(jī)上可以“root”的身份執(zhí)行/bin下的所有命令除了who命令
96 %test1 ALL=(ALL) NOPASSWD: ALL #“test1”組內(nèi)用戶在所有主機(jī)上可以“root”的身份執(zhí)行所有命令不用密碼
···
別名
sudoers有個(gè)騷操作,支持別名的定義
| User_Alias | Host_Alias | Runas_Alias | Cmnd_Alias |
|---|---|---|---|
| 用戶名 | 主機(jī)名 | 用戶名 | 命令路徑 |
| 組名(%) | IP 地址 | 組名(%) | 目錄 |
| 其他User_Alias | 網(wǎng)絡(luò)地址 | 其他Runas_Alias | 其他Cmnd_Alias |
示例:
User_Alias son = son1,son2,%test1 #定義個(gè)別名叫“son”,里面有用戶“son1”“son2”“test1用戶組”
Cmnd_Alias ml = /bin #定義命令路徑別叫“ml”
son ALL=(ALL) ml #以別名形式寫配置文件
依次類推,對(duì)User_Alias、Host_Alias、 Runas_Alias、Cmnd_Alias均可進(jìn)行別名定義,別名定義能很好的增加工作效率
寫在最后
??如果還需要查詢更多的
sudo命令的用法,請(qǐng)到《Linux命令手冊(cè)》,這應(yīng)該是我第三次安利這個(gè)網(wǎng)站了,是不是要考慮贊助點(diǎn)哈~
?
