歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux sudo命令與其配置文件/etc/sudoers

Linux sudo命令與其配置文件/etc/sudoers

日期:2017/2/28 15:52:29   编辑:Linux教程
對Linux有一定了解的人多少也會知道點關於sudo命令。sudo命令核心思想是權限的賦予 ,即某個命令的所屬用戶不是你自己,而你卻有權限執行它。但是我們需要注意的是,雖然你有權限執行這個命令,但是在執行的時候卻仍是以這個命令本身所屬用戶來完成的[注釋1]。(su命令類似sudo命令,但是兩者的差別在於前者su是一個粗粒度權限賦予,
對su最好的理解我覺得是change user running command permanent。即永久的切換到了su過去的用戶,然後以這個su到的新用戶干它能干的一切事情,而sudo則是指在執行某個命令的時候臨時切換到這個命令的所屬用戶執行[注釋1],而且sudo可以做到以單個命令為單位將權限賦予給其他用戶,相比su顯得更加靈活。)

大概了解了sudo的功能,那麼你知道怎麼配置sudo嗎?下面來簡要說明一下:
配置sudo的配置文件在/etc/sudoers裡面,一般通過visudo命令來安全打開編輯。查看/etc/sudoers的用法可以使用命令: man 5 sudoers。在/etc/sudoers文件裡面主要包括這兩部分:
1. 別名設置
別名主要包括這幾種:User_Alias,Host_Alias,Runas_Alias,Cmnd_Alias,分別是用戶別名,主機別名,運行用戶別名,命令別名。設置這幾個別名的命令主要是為了配置方便,這個很類似Linux用戶群組或是數據庫中角色的作用,有了別名便可以批量的賦予權限。
設置方法 Alias_Type alias_name = name1, name2, name3, 例如User_Alias User1 = user1, user2, user3。其他類型的alias設置方法類似。
2. 真正的sudo entry
這個就是真正配置哪些用戶可以使用哪些命令了(你www.linuxidc.com甚至可以不使用別名設置那部分)。
格式為:用戶名(用戶別名) 主機名(主機別名)=[(運行用戶或是Runas_Alias)可選] [tag可選] 可以執行的命令(或Cmmd_Alias) 這樣描述語法很生硬,不易理解,舉例子
user1 host1 = /bin/kill # user1 可以在host1上使用命令/bin/kill
user1 host1 = NOPASSWD: /bin/kill # user1 可以在host1上使用命令/bin/kill 同時可以不必輸入密碼(這裡就是使用了NOPASSWD
# 這個tag,默認是PASSWD)
user1 host1 = NOPASSWD: /bin/kill , PASSWORD: /bin/ls # user1 可以在host1上使用命令/bin/kill無需輸入密碼,但是使用/bin/ls則需要輸入密碼
user1 host1 = (opterator) /bin/kill # user1 可以在host1上使用命令/bin/kill但是必須是以operator用戶運行這個命令,等價於
# su -u opertor /bin/kill
user1 host1 = (:group_name) /bin/kill # user1 可以在host1上使用命令/bin/kill,且必須以group_name這個用戶群組裡面的用戶來運行。

%group_name host1 = /bin/kill # 所有group_name裡面的用戶都可以在host1上執行/bin/kill(Linux中一般代表整個用戶群組用

# %group_name)

再舉個實際例子,我之前對sudo su這個命令不理解,為什麼我可以直接就su到root用戶了呢,連密碼都不需要?查看了一下sudoers文件才知道原來裡面有這麼一行:
xxx ALL=NOPASSWD: /bin/su

好了,到此為止。

注釋1:
在Linux中每個進程都是有與之相關的UID,GID,分別為有效UID,真實UID,有效GID,真實GID。有效UID,GID是用來判斷權限,而真實UID,GID是用來記賬(哪個進程屬於哪個用戶,或記錄日志等等)。當配置了sudo entry後,有效UID裡面就包含了這個被配置的用戶UID,因而權限驗證的時候就可以通過。

Copyright © Linux教程網 All Rights Reserved