Sudo
NOPASSWD 選項不適用於第二個命令
我確定我只是在這裡遺漏了一些非常簡單的東西,但是我有以下 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