(轉)Linux: su sudo sudoer


http://zebralinux.blog.51cto.com/8627088/1369301

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

普通用戶切換到root用戶的方式有:su和sudo。

1su -

(su為switch user,即切換用戶的簡寫)

格式:su -l USERNAME(-l為login,即登陸的簡寫)

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

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

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

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

wKioL1MYJeaAhcKsAAD9QQoiUrE786.jpg

之后,通過命令exit或logout,或者是快捷鍵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

當普通用戶通過sudo以root用戶執行命令時,sudo后面的 -uUSERNAME可省略,即sudo COMMAND 即意為sudo以root用戶執行

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

如下圖,假如使用普通用戶帳號user4通過sudo以root用戶身份執行命令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 sanitychecks和check for parse errors,即提供快速的正確性有效性檢查,以及語法檢查功能)

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

wKioL1MYJ0CRJZGSAAD9-EL6Zs4959.jpg

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

wKioL1MYKSXhpQ2gAAEpRR0S2BI482.jpg

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

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

wKioL1MYKFqgSw4LAADSYt-W86g812.jpg

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

wKioL1MYKcuzFrpjAAFrMkDPLk8371.jpg

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

wKioL1MYKpSik_yhAAHf8r3lz9I443.jpg

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

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

wKioL1MYKu-R3Q8bAADr7M4i6k8642.jpg

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM