Shell指令碼——su、sudo
· su
su命令臨時切換到root使用者;
su [option] [使用者]
其中,
-後接使用者名稱,表示登入並切換到使用者環境;
-c後接命令,表示執行該命令再退出所切換的使用者環境;
注:
su表示切換到root使用者,但不改變root登入環境;
su -表示切換到root使用者,並切換到root使用者環境;
su命令的安全性低,使用sudo命令執行指定命令,此時輸入的密碼是使用者自己密碼,而非root使用者密碼;但並非所有使用者都能使用sudo命令;
· sudo
sudo命令為非root使用者賦予一些合理的權利,執行一些只有root使用者才能執行的命令,以減少root使用者的登入次數和管理時間,提高系統安全性;
sudo執行命令的過程是當前使用者切換到root使用者,再以root使用者執行命令,完成後直接退回到當前使用者;
使用sudo的前提是通過sudo配置檔案/etc/sudoers進行授權,可使用visudo命令編輯該配置檔案;
一、一般使用者賦權設定
[[email protected] ~]# visudo
... 省略 ...
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
... 省略 ...
其中,第一個欄位表示能使用sudo命令的使用者;第二個欄位中等號左邊表示允許使用sudo的主機,括號裡表示使用sudo後以什麼身份執行命令;第三個欄位表示允許sudo執行的命令;
在"rootALL=(ALL)ALL"下一行新增"twcALL=(root)/usr/sbin/useradd",表示允許twc使用者從任何主機登入,以root身份執行useradd命令;
二、sudo深入配置
對於不同需求的使用者,可按照一方法依次新增多行,每行對應一個使用者;
1 多個使用者的設定(非同一群組使用者)
對於相同需求的使用者,可使用"User_Alias UUU=user1, user2, ..."定義使用者別名的方式;
[[email protected] ~]# visudo ... 省略 ... # User_Alias ADMINS = jsmith, mikem User_Alisa sudouser=user1,user2,user3,user4 ... 省略 ... ## Allow root to run any commands anywhere root ALL=(ALL) ALL sudouser ALL=(root) /usr/sbin/useradd ... 省略 ...
對於多個命令,可使用"Cmnd_Alias CCC=command1, command2, ..."定義命令別名的方式;
[[email protected] ~]# visudo
... 省略 ...
## 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
sudouser ALL=(root) NETWORKING
... 省略 ...
對於多個主機,可使用"Host_Alias HHH=host1, host2, ..."定義主機別名的方式;
對於多個登入使用者,可使用"Runas_Alias RRR=role1, role2, ..."定義使用者別名的方式;
2 多個使用者的設定(同一群組使用者)
使用"%GROUP_NAME"作為允許使用sudo命令的使用者;
[[email protected] ~]# visudo
... 省略 ...
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
... 省略 ...
注:若希望不需密碼驗證,則在允許sudo執行的命令前接"NOPASSWORD:"
[[email protected] ~]# visudo
... 省略 ...
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) NOPASSWORD: ALL
... 省略 ...