sudo:
su:switch user,切換用戶;
登錄式切換:
su - USERNAME
su -l USERNAME
非登錄式切換:
su USERNAME
非交互式切換:
su - USERNAME -c "SHELL_COMMAND"
su操作有缺陷:
如果使用root用戶登錄,切換至其他任何用戶,均無需用戶密碼認證;
如果使用非root用戶登錄,企圖切換至root用戶,需要root用戶的密碼進行認證;
sudo命令:
sudo, sudoedit — execute a command as another user
以另一個用戶的身份執行被授權指定的命令;大多數情況下,此處的另一個用戶身份指的是root用戶;
授權機制;
授權時,參考其配置文件以完成最終授權,配置文件的路徑:
/etc/sudoers
對於此配置文件,共分爲兩類內容:
1.別名的定義(aliases):
用於定義基本變量;
2.用戶規格(user specification):
也可以稱爲"授權項",包括哪些用戶可以從哪些主機以哪些用戶身份執行哪些操作的具體內容;在其中可以調用之前定義過的別名(變量);
配置文件的格式:
每行只能有一個授權項;其格式爲:
who where=(whom) what
注意:通過編輯/etc/sudoers文件完成授權,而且所有通過此文件授權的操作都必須以sudo命令來啓用執行;
爲了能夠及時發現編輯的配置文件中是否存在語法錯誤,通常會使用visudo命令來編輯此配置文件;
visudo:
visudo — edit the sudoers file
who:此次使用sudo授權的目標用戶;
username:單個用戶賬戶的名稱;
#uid:單個用戶賬戶的UID;
%groupname:授權的目標是組,即指定組名所代表的組內所有用戶賬戶;
%#gid:授權的目標是組,即指定gid所代表的組內所有用戶賬戶;
User_Alias:事先定義過的用戶賬戶的別名;
where:定義被授權訪問的客戶端主機;
ipaddress/hostname:單個主機;如果指定主機名,則必須能夠被當前主機正確解析;
Network Address:網絡地址;
ipaddress/netmask
ipaddress/prefix
Host_Alias:事先定義過的主機的別名;
ALL:內建的特定別名,表示所有主機;
whom:授權用戶後續命令的執行者的真實身份,通常是root用戶;
username:單個用戶賬戶的名稱;
#uid:單個用戶賬戶的UID;
Runas_Alias:事先定義過的命令執行者用戶賬戶的別名;
ALL:內建的特定別名,表示所有用戶賬戶;
what:此次被授權能夠以whom身份執行的命令;
command:單個命令;建議使用命令的絕對路徑;
directory:指的是指定目錄下所有的命令;
sudoedit:特殊命令;用於授權其他用戶可以執行sudo命令,並且可以編輯修改/etc/sudoers文件的內容;
Cmnd_Alias:事先定義過的命令的別名;
ALL:內建的特定別名,表示所有命令;
基本的sudo授權示例:
zhangsan ALL=(root) /usr/sbin/useradd,/usr/sbin/usermod,/usr/sbin/userdel,/bin/passwd [a-zA-Z0-9]*,!/bin/passwd root
定義別名的方法:
Alias_Type ALIASNAME = item1, item2, ...
Alias_Type:
User_Alias;
Host_Alias;
Runas_Alias;
Cmnd_Alias;
ALIASNAME:別名的名稱,必須全部使用大寫字母;
示例:
User_Alias USERADMINS = tom, zhangsan, jerry, %lisi
Cmnd_Alias USERADMINCMNDS = /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel, /bin/passwd [a-zA-Z0-9]*, !/bin/passwd root
USERADMINS ALL=(root) USERADMINCMNDS
常用的標籤:
PASSWD:在執行被授權的特定命令之前,要求必須鍵入密碼以事先身份驗證;
NOPASSWD:在執行被授權的特定命令之前,無需鍵入密碼進行身份驗證;
示例:
User_Alias USERADMINS = tom, zhangsan, jerry, suse, %lisi
USERADMINS ALL=(root) NOPASSWD: /usr/sbin/useradd, PASSWD: /usr/sbin/usermod, /usr/sbin/userdel, /bin/passwd [a-zA-Z0-9]*, !/bin/passwd root
注意:PASSWD、NOPASSWD等標籤只能在授權項中使用,不能用於別名定義的語法;