1. 程式人生 > >Shell指令碼——su、sudo

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
... 省略 ...