Linux用戶權限規範 /etc/sudoers文件解釋(轉載)

原始鏈接:https://www.cnblogs.com/gne-hwz/p/8287383.html

 

Linux用戶權限規範 /etc/sudoers文件解釋

# User privilege specification
root ALL=(ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

個人總結:

上面 root 表示用戶、%admin 表示 admin 用戶組(%+名錶示給用戶組設置權限)

第一個ALL:多個系統之間部署 sudo 環境時,該ALL代表所有主機。也可以換成相應的主機名,表示改規則只適用主機名對應的系統

第二個ALL(即括號內的):指出規定的 user 用戶能夠以何種身份來執行命令。該ALL表示user用戶能夠以任何用戶的身份執行命令

第三個ALL:表示能執行"命令表",ALL表示用戶能夠執行系統中的所有命令。

 

舉例:

如果要在主機名爲 ops-test 的系統下的用戶 test 添加 sudo 權限

不知道主機名要不要加引號,僅供參考!

  test ops-test=(root)ALL

 

以下來自百度百科:sudo用戶配置

下面對以上配置做簡要說明:

第一項配置的作用,是允許root用戶使用sudo命令變成系統中任何其它類型的用戶。

第二個配置規定,admin組中的所有成員都能以root的身份執行所有命令。因此,在默認安裝的Ubuntu系統中,要想作爲root身份來執行命令的話,只要在sudo後面跟上欲執行的命令即可。

 

 

我們用一個實例來詳細解釋/etc/sudoers文件的配置語法,請看下面的例子:

 

jorge ALL=(root) /usr/bin/find, /bin/rm

上面的第一欄規定它的適用對象:用戶或組,就本例來說,它是用戶jorge。

此外,因爲系統中的組和用戶可以重名,要想指定該規則的適用對象是組而非用戶的話,組對象的名稱一定要用百分號%開頭。

 

第二欄指定該規則的適用主機。當我們在多個系統之間部署 sudo 環境時,這一欄格外有用,這裏的 ALL 代表所有主機。

但是,對於桌面系統或不想將sudo部署到多個系統的情況,這一欄就換成相應的主機名

或者也可以設置爲 localhost 表示規則僅適用本主機。

jorge localhost=(root) /usr/bin/find, /bin/rm

 

第三欄的值放在括號內,指出第一欄規定的用戶能夠以何種身份來執行命令。本例中該值設爲root,這意味着用戶jorge能夠以root用戶的身份來運行後面列出的命令。

該值也可以設成通配符ALL,jorge便能作爲系統中的任何用戶來執行列出的命令了。

 

最後一欄(即/usr/bin/find,/bin/rm)是使用逗號分開的命令表,這些命令能被第一欄規定的用戶以第三欄指出的身份來運行它們。本例中,該配置允許jorge作爲超級用戶運行/usr/bin/find和 /bin/rm這兩個命令。需要指出的是,這裏列出的命令一定要使用絕對路徑。

 

進一步:

我們可以利用這些規則爲系統創建具體的角色。例如,要讓一個組負責帳戶管理,你一方面不想讓這些用戶具備完全的root訪問權限,另一方面還得讓他們具有增加和刪除用戶的權利,那麼我們可以在系統上創建一個名爲accounts的組,然後把那些用戶添加到這個組裏。

 

之後,再使用visudo爲/etc/sudoers添加下列內容: %accounts ALL=(root) /usr/sbin/useradd,/usr/sbin/userdel, /usr/sbin/usermod

 

現在好了,accounts組中的任何成員都能運行useradd、userdel和usermod命令了。如果過一段時間後,您發現該角色還需要其他工具,只要在該表的尾部將其添上就行了。這樣真是方便極了!

 

需要注意的是,當我們爲用戶定義可以運行的命令時,必須使用完整的命令路徑。

這樣做是完全出於安全的考慮,

如果我們給出的命令只是簡單的userad而非/usr/sbin/useradd,那麼用戶有可能創建一個他自己的腳本,也叫做useradd,然後放在它的本地路徑中,如此一來他就能夠通過這個名爲useradd的本地腳本,作爲root來執行任何他想要的命令了。這是相當危險的!

 

sudo命令的另一個便捷的功能,是它能夠指出哪些命令在執行時不需要輸入密碼。

這很有用,尤其是在非交互式腳本中以超級用戶的身份來運行某些命令的時候。

例如,想要讓用戶作爲超級用戶不必輸入密碼就能執行kill命令,以便用戶能立刻殺死一個失控的進程。爲此,在命令行前邊加上NOPASSWD:屬性即可。例如,可以在/etc/sudoers文件中加上下面一行,從而讓jorge獲得這種權力:

jorge ALL=(root)NOPASSWD: /bin/kill, /usr/bin/killall

這樣一來,jorge就能運行以下命令,作爲root用戶來殺死失控的rm進程了。

jorge@ubuntu:~$ sudo killall rm

分類: Linux基礎

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