Sudo

以特定方式限制 su 命令

  • March 23, 2016

我有一個系統使用者列表,他們可以通過 sudo 訪問幾乎所有內容。現在我想限制他們對命令 su 的 sudo 訪問。

我想為系統上的每個使用者限制su命令,並允許每個系統使用者能夠su到特定使用者(在本例中是 tomcat):

#user_name should be able to do *sudo su tomcat* but not *sudo su another_user*
user_name ALL=/bin/, !/bin/su, /bin/su tomcat

我為此嘗試了不同的組合,但不幸的是無法使其工作。

這是我完整的 /etc/sudoers 文件:

Defaults   !visiblepw
Defaults    always_set_home

Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root    ALL=(ALL)   ALL

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

/etc/sudoers.d/ 有另一個文件,其中包含以下內容:

meraj ALL=(ALL) NOPASSWD:ALL
siraj ALL=(ALL) NOPASSWD:ALL

# Members of the group 'sysadmin' may gain root privileges
%sysadmin ALL=(ALL) NOPASSWD:ALL

**更新 2:**當我從使用者 meraj執行sudo -l時,我得到了這個:

Matching Defaults entries for meraj on this host:
   !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG
   LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
   env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User meraj may run the following commands on this host:
   (ALL) NOPASSWD: ALL
   (root) ALL, (root) !/bin/su
   (root) /bin/su tomcat

當我執行 sudo /bin/su tomcat 或 sudo /bin/su siraj 時,它會詢問我密碼:

[sudo] password for meraj:
username       ALL=(root)      /bin/su tomcat

為我工作。如果它對您不起作用,可能是因為 sudoers 文件中的另一個條目,它允許更廣泛的命令,可能不受限制地訪問/bin/su- 我們需要查看您的整個sudoers文件,未編輯,如以及失敗的詳細剪切和粘貼,以便能夠對此發表評論。

編輯:您已澄清您在其他地方授予使用者執行所有操作的權限。我發現明確刪除 sudo 權限來執行 su,例如

username       ALL=(root)      ALL, !/bin/su

在將它們歸還給tomcat之前,我在答案開頭引用的那一行已經奏效了。如果這對您不起作用,您能否向我們展示sudo -l此類使用者的輸出以及sudo /bin/su tomcatand的輸出sudo /bin/su userC(其中 userC 是第三個使用者)?

引用自:https://serverfault.com/questions/765553