為什麼需要切換使用者身份。
在日常工作中,盡量使用普通使用者帳號操作,當需要root許可權的時候再通過身份切換的方式切換至root管理員,這樣能保證系統的安全性。使用普通帳號的安全性主要體現在兩個方面: 防止因誤操作而刪除了系統重要檔案; 建立一些系統賬戶專門用來啟動某些服務,這樣即使該服務被攻陷,系統仍然是安全的。
下面介紹兩種Linux中切換使用者身份的方式。 身份切換方式一:su
該命令可以將身份切換至指定賬戶,但需要輸入該賬戶的密碼。
su [-lm] [-c 命令] username
若不加username則表示切換至root 使用su和su -均能切換至root賬戶,但不加-會使很多變數仍然保持切換前使用者的變數,而加了-之後則參數將會完全變成root的參數,尤其是環境變數PATH,從而能夠直接使用某些命令,而無需指定絕對路徑。 若只想執行一個root許可權才能執行的命令的時候,可以將命令直接寫在-c的後面,這樣無需切換身份,如:
su -c vim /etc/shadow
身份切換方式二:sudo
使用su切換身份需要直到root帳號的密碼,這樣並不安全。為了提高安全性,我們可以使用sudo來執行需要root許可權的功能。
sudo由root指定,指定後使用者只需輸入自己帳號的密碼就能申請到root許可權,而無需告訴任何人root密碼,因此安全了不少。
sudo [-b] [-u username] 需要執行的命令-b:使後續的命令自行執行,而不與目前的shell產生影響。
使用visudo指定擁有sudo許可權的賬戶
擁有sudo許可權的賬戶由/etc/sudoers檔案維護,我們只需修改該檔案的內容即可指定使用者擁有sudo許可權。但sudoers檔案具有一定的文法規則,因此不建議使用vim直接修改,而是使用visudo命令進行操作,因為visudo命令能進行語法檢查,當我們出現語法錯誤時能夠及時糾正。
下面我們就來看看sudoers檔案的內容:
root ALL=(ALL) ALL
第一個參數表示允許進行sudo操作的使用者名稱 第二個參數表示允許的源主機IP 第三個參數表示可以切換的使用者名稱 第四個參數表示允許執行的命令
使用visudo指定擁有sudo許可權的使用者組
$users ALL=(ALL) ALL
$表示該使用者為一個使用者組。在visudo中設定了使用者組後,只要是該使用者組的使用者均有sudo許可權。如果想讓一個使用者獲得sudo許可權,只需加入該使用者組即可,無需再修改sudoers檔案。 開啟sudo免密功能
先前的使用者在執行sudo命令後都需要輸入自己的密碼,然而對於一些十分信任的使用者可以免去他們在sudo時輸入密碼:
$users ALL=(ALL) NOPASSWD:ALL
只需在最後一個參數前加上NOPASSWD即可。 限制sudo操作
1.限制可切換的使用者範圍,如:只允許chai能sudo至root
chai ALL=(root) ALL
2.限制使用者能執行的操作,如只允許使用者執行命令/usr/bin/passwd
chai ALL=(root) /usr/bin/passwd
通過別名設定visudo 通過User_Alias為使用者們起一個別名 通過Cmnd_Alias為可執行檔操作起一個別名
如,允許jsmith, mikem這兩個使用者將身份切換至root,並可以執行/sbin/route和 /sbin/ifconfig這兩個命令。
User_Alias ADMINS = jsmith, mikemCmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfigADMINS ALL=(root) NETWORKING
sudo與su的搭配使用
su和sudo各有千秋,su能切換使用者身份,但需要知道對方的密碼,這並不安全;而sudo無需知道對方的密碼,但每次執行root命令都需要加上sudo,這很不方面,下面的配置能夠讓這兩種方式的優點結合起來:
User_Alias ADMINS = chai1,chai2,chai3ADMINS ALL=(root) /bin/su -
此時只要輸入sudo su -並輸入自己的密碼後即可變成root賬戶。