平常操做中爲了不一些誤操做,更加安全的管理系統,一般使用的用戶身份都爲普通用戶,而非root。當須要執行一些管理員命令操做時,再切換成root用戶身份去執行。shell
普通用戶切換到root用戶的方式有:su和sudo。安全
1,su -post
(su爲switch user,即切換用戶的簡寫)spa
格式:su -l USERNAME(-l爲login,即登錄的簡寫)3d
-l能夠將l省略掉,因此此命令常寫爲su - USERNAMEcode
若是不指定USERNAME(用戶名),默認即爲root,因此切換到root的身份的命令即爲:su -root或是直接 su -xml
實例1:普通用戶user1知道root帳戶登陸密碼,要求用戶user1在不註銷登陸的前提下查看/etc/shadow文件。blog
以下圖,試圖查看文件/etc/shadow時,提示拒絕訪問,此時使用su - 命令切換成root身份後,便可正常查看。事件
以後,經過命令exit或logout,或者是快捷鍵Cry+D便可返回原用戶身份。ip
2:su - 與su
經過su切換用戶還能夠直接使用命令su USERNAME,與su - USERNAME的不一樣之處以下:
su - USERNAME切換用戶後,同時切換到新用戶的工做環境中
su USERNAME切換用戶後,不改變原用戶的工做目錄,及其餘環境變量目錄
以下圖,顯示兩個命令的執行結果:
3,sudo
使用su切換用戶時需知曉對應用戶的登錄密碼,即若切換成root用戶身份,需知道root用戶的登錄密碼。做爲root用戶管理員,如何受權其餘普通用戶,在不須要知曉root密碼的狀況下,執行root權限的命令操做?此時便可使用sudo。
sudo是一種權限管理機制,依賴於/etc/sudoers,其定義了受權給哪一個用戶能夠以管理員的身份可以執行什麼樣的管理命令;
格式:sudo -u USERNAME COMMAND
當普通用戶經過sudo以root用戶執行命令時,sudo後面的 -uUSERNAME可省略,即sudo COMMAND 即意爲sudo以root用戶執行
默認狀況下,系統只有root用戶能夠執行sudo命令。須要root用戶經過使用visudo命令編輯sudo的配置文件/etc/sudoers,才能夠受權其餘普通用戶執行sudo命令。
以下圖,假如使用普通用戶賬號user4經過sudo以root用戶身份執行命令tail /etc/shadow時,即被提示:user4未被定義在sudoers文件中,沒法執行此命令。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
sudo命令
語法:sudo [-bhHpV][-s ][-u <用戶>][指令]
或 sudo [-klv]
參數:
-b 在後臺執行指令。
-h 顯示幫助。
-H 將HOME環境變量設爲新身份的HOME環境變量。
-k 結束密碼的有效期限,也就是下次再執行sudo時便須要輸入密碼。
-l 列出目前用戶可執行與沒法執行的指令。
-p 改變詢問密碼的提示符號。
-s 執行指定的shell。
-u <用戶> 以指定的用戶做爲新的身份。若不加上此參數,則預設以root做爲新的身份。
-v 延長密碼有效期限5分鐘。
-V 顯示版本信息。
-S 從標準輸入流替代終端來獲取密碼
|
4,sudoers
sudo的配置文件爲:/etc/sudoers。
sudoers文件中容許指定用戶在不須要知道root用戶的登錄密碼的狀況下,能夠以root用戶身份運行各類命令。此文件必須使用visudo命令編輯配置。(visudo命令能夠提供basic sanitychecks和check for parse errors,即提供快速的正確性有效性檢查,以及語法檢查功能)
查看sudores文件,其中有一行以下圖,定義了容許root用戶從任何主機登錄,使用sudo能夠切換成任何用戶的身份,執行全部命令。
查看sudoers文件,其中有兩行以下圖,定義了組可使用sudo命令的配置。
實例2:設置普通用戶user4,使其可使用sudo命令以root用戶身份修改其餘全部用戶登陸密碼,但不能修改root用戶登錄密碼
未被受權前,user4使用sudo以root用戶修改user1的密碼時,提示user4未被定義在sudoers文件中,沒法執行,而且此事件將被報告給。以下圖:
執行visudo命令,編輯sudoers文件,添加一行:用戶賬號爲user4;能夠從任何主機登錄,執行三條命令(以root身份執行passwd命令後面不加用戶名時,即表明修改root用戶自己的密碼,此即爲第一條命令的做用),以下圖,便可實現user4能夠修改除root用戶以外的其餘全部用戶的登陸密碼。
以後,user4經過sudo以root用戶身份便可成功修改user1的密碼(而不須要知道root的密碼,只須要輸入本身的密碼便可),同時沒法修改root的密碼,以下圖:
實例3:設置組Administrators內全部成員均可以經過sudo以root用戶身份執行全部命令,且不須要驗證自己的帳戶密碼。
經過visudo命令編輯sudoers文件,添加以下一行,即完成配置。
以後,成員一user1,便可經過sudo以root用戶執行全部命令,且不須要驗證自己帳戶密碼。以下圖:
附:man文檔中su和sudo的解釋:
su - run a shell with substitute user andgroup IDs
以替代的用戶運行shell。(即su以後,在當前shell上的用戶身份已轉變)
sudo - excute a command as another user.
sudo allows a permitted user to execute acommand as the superuser or another user, as specified by security policy.
以其餘用戶身份執行命令。sudo依照安全策略中指定,容許受權用戶以超級用戶或是其餘用戶身份執行命令。(即sudo,只是臨時以其餘用戶身份執行命令,並不會切換身份)
su -c
固然,su也能夠在不切換用戶身份的狀況下,臨時以其餘用戶執行命令。
經過選項-c,便可使用root身份臨時執行命令,以下圖:
/bin/su -
同時,也能夠經過配置sudoers文件,受權其餘普通用戶,能夠切換成其餘用戶身份去執行命令,而沒必要每次都加上sudo。以下圖,只需在sudoers文件中定義普通用戶user4
以後,用戶user4只需執行一次sudo su - 便可切換成root身份了
注:實例環境爲Vmware Workstation 九、CentOS 6.4