Linux sudo命令與其設定檔/etc/
sudoers 對
linux有一定瞭解的人多少也會知道點關於sudo命令。sudo命令核心思想是許可權的賦予 ,即某個命令的所屬使用者不是你自己,而你卻有許可權執行它。但是我們需要注意的是,雖然你有許可權執行這個命令,但是在執行的時候卻仍是以這個命令本身所屬使用者來完成的[注釋1]。(su命令類似sudo命令,但是兩者的差別在於前者su是一個粗粒度許可權賦予, www.2cto.com 對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. 別名設定 www.2cto.com 別名主要包括這幾種: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 www.2cto.com 好了,到此為止~,多了流水賬一篇~~~^__^ 注釋1:在
linux中每個進程都是有與之相關的UID,GID,分別為有效UID,真實UID,有效GID,真實GID。有效UID,GID是用來判斷許可權,而真實UID,GID是用來記賬(哪個進程屬於哪個使用者,或記錄日誌等等)。當配置了sudo entry後,有效UID裡面就包含了這個被配置的使用者UID,因而許可權驗證的時候就可以通過。 ----------------- sudo 是
linux 下允許普通使用者使用超級許可權的工具,他的設定檔為 /etc/
sudoers , 我們可以使用 visudo 對該檔案進行編輯,並且強烈建議使用這個命令對檔案進行編輯,因為這個命令在編輯時帶有自動排錯和檢查文法的功能,這樣可以很有效滴保護
sudoers 檔案不被錯誤地修改掉!
一: sudo 設定不輸入密碼自動登入:
1. 用 visudo 編輯 sudoers 檔案,預設情況我們會看到有"%admin ALL=(ALL) ALL"一行注釋 , 這裡的 admin 是一個組名,這裡表示屬於 admin 組的使用者可以有 sudo 許可權,但是需要輸入密碼,如果想不輸入密碼,可以將此行改為 "%admin ALL=(ALL) NOPASSWD: NOPASSWD ALL" 即可。
2. 我們知道,sudo 情況下執行 /usr/bin/passwd root , 這個時候由於 admin 組的使用者繼承了 root 超級許可權,因此它是可以將 root 的密碼修改的,從安全上來講,這個是不被允許的,避免這種情況發生,可以在 admin 組後面做如下配置, %admin ALL=(ALL) NOPASSWD:ALL, !/usr/bin/passwd root , 這樣把 passwd命令禁用掉,則就不能修改 root 的密碼了。
3. 對於普通使用者而言,可以單獨定義其sudoer的訪問規則:
首先需要配置一些Alias,這樣在下面配置許可權時,會方便一些,不用寫大段大段的配置。Alias主要分成4種 Host_Alias Cmnd_Alias User_Alias Runas_Alias
1) 配置Host_Alias:就是主機的列表 Host_Alias HOST_FLAG = hostname1, hostname2, hostname3 2) 配置Cmnd_Alias:就是允許執行的命令的列表 Cmnd_Alias COMMAND_FLAG = command1, command2, command3 3) 配置User_Alias:就是具有sudo許可權的使用者的列表 User_Alias USER_FLAG = user1, user2, user3 4) 配置Runas_Alias:就是使用者以什麼身份執行(例如root,或者oracle)的列表 Runas_Alias RUNAS_FLAG = operator1, operator2, operator3 5) 配置許可權 配置許可權的格式如下: USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG 如果不要求輸入密碼驗證的話,則按照這樣的格式來配置 USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG
例:
# Host alias specification Host_Alias IP = 172.16.1.100 , 172.16.1.101 。。。。
# User alias specification User_Alias OK = test1 , test2 # Cmnd alias specification Cmnd_Alias OK2 = /usr/bin/scp , /usr/bin/ssh
# Defaults specification
# User privilege specification root ALL=(ALL) ALL support IP=(ALL) NOPASSWD: Ok2