Linux sudo命令——sudoers文件的配置
2024-06-28 13:24:10
供稿:網友
linux sudo命令——sudoers文件的配置 2014-09-13 16:24 by 非寧靜無以致遠, ... 閱讀, ... 評論, 收藏, 編輯 Linux sudo命令與其配置文件/etc/sudoers對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這個就是真正配置哪些用戶可以使用哪些命令了(你甚至可以不使用別名設置那部分)。格式為:用戶名(用戶別名) 主機名(主機別名)=[(運行用戶或是Runas_Alias)可選] [tag可選] 可以執行的命令(或Cmmd_Alias)。這樣描述語法很生硬,不易理解,舉例子:user1 host1 = /bin/kill # user1 可以在host1上使用命令/bin/killuser1 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/killuser1 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注:在linux中每個進程都是有與之相關的UID,GID,分別為有效UID,真實UID,有效GID,真實GID。有效UID,GID是用來判斷權限,而真實UID,GID是用來記賬(哪個進程屬于哪個用戶,或記錄日志等等)。當配置了sudo entry后,有效UID里面就包含了這個被配置的用戶UID,因而權限驗證的時候就可以通過。