Linux系統中切換用戶身份su與sudo的用法與實例

日常操作中爲了避免一些誤操作,更加安全的管理系統,通常使用的用戶身份都爲普通用戶,而非root。當需要執行一些管理員命令操作時,再切換成root用戶身份去執行。

普通用戶切換到root用戶的方式有:susudo

1su -

suswitch user,即切換用戶的簡寫)

格式:su -l USERNAME-llogin,即登陸的簡寫)

-l可以將l省略掉,所以此命令常寫爲su - USERNAME

如果不指定USERNAME(用戶名),默認即爲root,所以切換到root的身份的命令即爲:su -root或是直接 su -

實例1:普通用戶user1知道root賬戶登錄密碼,要求用戶user1在不註銷登錄的前提下查看/etc/shadow文件。

如下圖,試圖查看文件/etc/shadow時,提示拒絕訪問,此時使用su - 命令切換成root身份後,即可正常查看。

wKioL1MYJeaAhcKsAAD9QQoiUrE786.jpg

之後,通過命令exitlogout,或者是快捷鍵Cry+D即可返回原用戶身份。

2su - su

通過su切換用戶還可以直接使用命令su USERNAME,與su - USERNAME的不同之處如下:

su - USERNAME切換用戶後,同時切換到新用戶的工作環境中

su USERNAME切換用戶後,不改變原用戶的工作目錄,及其他環境變量目錄

如下圖,顯示兩個命令的執行結果:

wKiom1MYJlWxFr_lAAMqGjIx9ck020.jpg

3sudo

使用su切換用戶時需知曉對應用戶的登陸密碼,即若切換成root用戶身份,需知道root用戶的登陸密碼。作爲root用戶管理員,如何授權其他普通用戶,在不需要知曉root密碼的情況下,執行root權限的命令操作?此時即可使用sudo

sudo是一種權限管理機制,依賴於/etc/sudoers,其定義了授權給哪個用戶可以以管理員的身份能夠執行什麼樣的管理命令;

格式:sudo -u USERNAME COMMAND

當普通用戶通過sudoroot用戶執行命令時,sudo後面的 -uUSERNAME可省略,即sudo COMMAND 即意爲sudoroot用戶執行

默認情況下,系統只有root用戶可以執行sudo命令。需要root用戶通過使用visudo命令編輯sudo的配置文件/etc/sudoers,纔可以授權其他普通用戶執行sudo命令。

如下圖,假如使用普通用戶帳號user4通過sudoroot用戶身份執行命令tail /etc/shadow時,即被提示:user4未被定義在sudoers文件中,無法執行此命令。

wKioL1MYJq_gEwGLAACaypu3XLY540.jpg

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   從標準輸入流替代終端來獲取密碼

4sudoers

sudo的配置文件爲:/etc/sudoers

sudoers文件中允許指定用戶在不需要知道root用戶的登陸密碼的情況下,可以以root用戶身份運行各種命令。此文件必須使用visudo命令編輯配置。(visudo命令可以提供basic sanitycheckscheck for parse errors,即提供快速的正確性有效性檢查,以及語法檢查功能)

查看sudores文件,其中有一行如下圖,定義了允許root用戶從任何主機登陸,使用sudo可以切換成任何用戶的身份,執行所有命令。

wKioL1MYJ0CRJZGSAAD9-EL6Zs4959.jpg

查看sudoers文件,其中有兩行如下圖,定義了組可以使用sudo命令的配置。

wKioL1MYKSXhpQ2gAAEpRR0S2BI482.jpg

實例2:設置普通用戶user4,使其可以使用sudo命令以root用戶身份修改其他所有用戶登錄密碼,但不能修改root用戶登陸密碼

未被授權前,user4使用sudoroot用戶修改user1的密碼時,提示user4未被定義在sudoers文件中,無法執行,並且此事件將被報告給。如下圖:

wKioL1MYKFqgSw4LAADSYt-W86g812.jpg

執行visudo命令,編輯sudoers文件,添加一行:用戶帳號爲user4;可以從任何主機登陸,執行三條命令(以root身份執行passwd命令後面不加用戶名時,即代表修改root用戶本身的密碼,此即爲第一條命令的作用),如下圖,即可實現user4可以修改除root用戶之外的其他所有用戶的登錄密碼。

wKioL1MYKcuzFrpjAAFrMkDPLk8371.jpg

之後,user4通過sudoroot用戶身份即可成功修改user1的密碼(而不需要知道root的密碼,只需要輸入自己的密碼即可),同時無法修改root的密碼,如下圖:

wKioL1MYKpSik_yhAAHf8r3lz9I443.jpg

實例3:設置組Administrators內所有成員都可以通過sudoroot用戶身份執行所有命令,且不需要驗證本身的賬戶密碼。

通過visudo命令編輯sudoers文件,添加如下一行,即完成配置。

wKioL1MYKu-R3Q8bAADr7M4i6k8642.jpg

之後,成員一user1,即可通過sudoroot用戶執行所有命令,且不需要驗證本身賬戶密碼。如下圖:

wKiom1MYK1PSLHqMAAHGaD1SSqI883.jpg

附:man文檔中susudo的解釋:

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身份臨時執行命令,如下圖:

wKioL1MYK6jhhTU9AAC4bcln_Q0792.jpg

/bin/su -

同時,也可以通過配置sudoers文件,授權其他普通用戶,可以切換成其他用戶身份去執行命令,而不必每次都加上sudo。如下圖,只需在sudoers文件中定義普通用戶user4

wKiom1MYLBTgm8QIAAB0yKoZYJY963.jpg

之後,用戶user4只需執行一次sudo su - 即可切換成root身份了

wKioL1MYLCXQwUEUAADFU-xnFAg740.jpg

注:實例環境爲Vmware Workstation 9、CentOS 6.4


參考書籍:《鳥哥的私房菜》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章