Sudo

NOPASSWD 選項不適用於第二個命令

  • February 16, 2014

我確定我只是在這裡遺漏了一些非常簡單的東西,但是我有以下 sudoers 文件,我打算在其中允許某些使用者以repomgr沒有密碼的使用者身份執行幾個命令:

lambda@host:~$ sudo cat /etc/sudoers.d/repo
Cmnd_Alias REPO_LOAD_PASSPHRASE = /bin/bash -c /home/repomgr/preset-passphrase.sh
Cmnd_Alias REPO_PULL = /bin/bash -c /usr/bin/reprepro -b /var/packages/devel pull

%qa     ALL = (repomgr) NOPASSWD: REPO_LOAD_PASSPHRASE, \
             (repomgr) NOPASSWD: REPO_PULL

現在,該REPO_LOAD_PASSPHRASE命令工作正常;我執行它,它不會提示我輸入密碼:

lambda@host:~$ sudo -K
lambda@host:~$ sudo -u repomgr -i /home/repomgr/preset-passphrase.sh
lambda@host:~$

但是,儘管設置如下,第二個命令(REPO_PULL命令)仍繼續提示我輸入密碼:NOPASSWD

lambda@host:~$ sudo -K
lambda@host:~$ sudo -u repomgr -i reprepro -b /var/packages/devel pull
[sudo] password for lambda:

如果我檢查如何sudo解釋它,實際上除了NOPASSWD第二個命令之外的所有內容:

lambda@host:~$ sudo -l
Matching Defaults entries for lambda on this host:
   env_reset,
   secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User lambda may run the following commands on this host:
   (ALL : ALL) ALL
   (repomgr) NOPASSWD: /bin/bash -c /home/repomgr/preset-passphrase.sh,
   (repomgr) /bin/bash -c /usr/bin/reprepro -b /var/packages/devel pull

為什麼這不起作用?什麼會導致NOPASSWD聲明從第二個命令中刪除?

嗯,是的,它為什麼不起作用肯定是顯而易見的。當我修復了需要添加 /bin/bash -c 以允許使用 -i 的錯誤時,我沒有將命令的完整路徑更改為/usr/bin/reprepro我實際傳入的路徑reprepro。將其更改為使用下面的完整路徑,或者同樣將規則更改為僅包含命令,都可以正常工作。

lambda@host:~$ sudo -K
lambda@host:~$ sudo -u repomgr -i /usr/bin/reprepro -b /var/packages/devel pull

這仍然留下了為什麼NOPASSWD沒有出現在sudo -l查詢中的難題,但我已經解決了實際問題。

我有 Sudo-Version 1.8.7 並且問題沒有出現在這裡:

sudo -l
User hl may run the following commands on this host:
   (ALL) ALL
   (nobody) NOPASSWD: /bin/bash -c /home/repomgr/preset-passphrase.sh
   (nobody) NOPASSWD: /bin/bash -c /usr/bin/reprepro -b /var/packages/devel pull

所以也許這只是一個已經修復的錯誤。也許您可以通過兩個單獨的語句來解決這個問題:

%qa     ALL = (repomgr) NOPASSWD: REPO_LOAD_PASSPHRASE
%qa     ALL = (repomgr) NOPASSWD: REPO_PULL

引用自:https://unix.stackexchange.com/questions/115135