啥是sudo
?一種約束用戶執(zhí)行系統(tǒng)管理命令方面的安全機(jī)制肃拜,允許指定的用戶以root身份執(zhí)行指定的命令而不需要提供root密碼马靠。用過Ubuntu(Debian系)的小伙伴很有發(fā)言權(quán)。
當(dāng)用戶要執(zhí)行比如systemctl stop httpd時脑又,如果該用戶不被允許使用systemctl stop命令择浊,則命令無法運(yùn)行,從而實(shí)現(xiàn)只允許指定用戶(信任的小伙伴)才可運(yùn)行相關(guān)系統(tǒng)刹碾、服務(wù)管理方面的命令;如果用戶被允許使用該命令座柱,sudo機(jī)制也會提醒用戶輸入其賬號密碼迷帜,從而存在一個緩沖的時間,可以讓命令執(zhí)行者腦袋清醒一下色洞,確認(rèn)無誤后敲下回車戏锹。
Sudo應(yīng)該是Switch User Do的簡寫(尚未考證),簡單粗暴的翻譯就是“切換用戶干”火诸,當(dāng)指定sudo systemctl stop httpd命令時锦针,事實(shí)上是以root用戶的身份運(yùn)行的。下面以Redha系CentOS7.6來介紹一下sudo的使用置蜀,通過visudo直接回車可看到:
圖中可以看出默認(rèn)有8個命令別名奈搜,每一個別名分別對應(yīng)一些命令,比如PROCESS盯荤,是nice馋吗、kill、killall三個命令的別名秋秤。之所以要有別名宏粤,是因?yàn)閷⒚罘珠T別類后便于后面的引用。
看懂語法灼卢,基本就可以搞定了绍哎。每個框框中注釋部分說的很清楚。比如“%wheel?? ALL=(LL) NOPASSWD:ALL”表示wheel這個群組中的用戶可以在任何主機(jī)上執(zhí)行任何命令且不需要輸入密碼鞋真。
試驗(yàn)
用戶名:ds?
群組:?? testgroup
要求:只允許testgroup群組用戶執(zhí)行跟networking相關(guān)的命令
步驟:
1崇堰、 [endif]命令行中輸入visudo回車—編輯/etc/sudoers文件
2涩咖、 [endif]去掉“Cmnd_Alias NETWORKING…“一行的的注釋
3赶袄、 加入下面一行
4、 測試
可以看到ds用戶執(zhí)行ping是可以的抠藕,但是執(zhí)行kill命令就不行了,即使使用sudo嘗試使用root身份執(zhí)行也不行:
通過/var/log/secure日志文件可以看的更詳細(xì):
常用實(shí)例講解
1 .oracle用戶可以在任何地點(diǎn)以任何的身份執(zhí)行所有命令蒋困,等同于root盾似。
oracle ALL=(ALL) ALL
2. oracle2用戶可以在任何地點(diǎn)以root的身份執(zhí)行命令useradd(無需密碼)和usermod(需要密碼).
這樣oracle2就可以免密碼useradd,有密碼(密碼為oracle2的自身密碼)使用userdel。
oracle2 ALL=(root) NOPASSWD:/usr/sbin/useradd, PASSWD:/usr/sbin/userdel
使用方式如下
[oracle2@centos74 ~]$ useradd test001 # 直接使用命令是不可以的零院。
-bash: /usr/sbin/useradd: Permission denied
[oracle2@centos74 ~]$ sudo useradd test001? ? ? ? ? ? ? ? ? ? ? ? ? # 必須加sudo
[oracle2@centos74 ~]$ id test001? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 查看添加的用戶信息
uid=1031(test001) gid=1032(test001) groups=1032(test001)
3. oracle3用戶只能在192.168.1.120主機(jī)遠(yuǎn)程登錄并以root身份執(zhí)行ifconfig eth0命令溉跃。
Cmnd_Alias NETCMND = /sbin/ifconfig eth0
oracle3 192.168.1.120 = (root) NOPASSWD:NETCMND
4. oracle4用戶可以執(zhí)行/usr/sbin下的所有命令除了/usr/sbin/userdel
oracle4 ALL=(ALL) /usr/sbin/,!/usr/sbin/userdel
5. oracle5用戶可以cat?/var/log/secure*的文件
oracle5 ALL=(ALL) /bin/cat /var/log/secure*,!/bin/cat /var/log/secure* *