題 對於腳本,我需要沒有密碼提示的sudo。我哪裡做錯了?


我在sudo小組可以:

$ id
uid=1002(molot) gid=1002(molot) groups=1002(molot),27(sudo),33(www-data)

在我的sudores中,我似乎有適當的設置:

sudo    ALL=(ALL:ALL) NOPASSWD: ALL

它是那裡最後一條未註釋的線。

但是當我嘗試時 git pull,我想重新輸入我的密碼:

$ sudo -u www-data git --git-dir /var/www/.git --work-tree /var/www pull "origin" master
[sudo] password for molot:

我登錄控制台時不是問題,但在腳本中是不可接受的。那麼如何在不重新輸入密碼的情況下允許sudo組中的任何人將git pull作為www-data?

當我直接輸入我的名字時:

molot ALL=(ALL) NOPASSWD: ALL

這個對我有用。但是,顯然,不是來自sudo組的marian或其他用戶。據我所知 手冊,用戶名和組名都應該在第一個文件中工作。


9
2018-04-23 11:30


起源


你能不 sudo -u www-data ./your_script.sh?腳本的目的是什麼? - jimbobmcgee
@jimbobmcgee它是一個git hook,所以不,我不能在它前面加任何東西。它是由推動git更改的用戶調用的,我發現沒有真正的方法。 - Mołot
第一個領域(如果我快速了解的話 sudoers 文件格式是正確的)是調用用戶的用戶名。你有沒有嘗試用通配符替換它 *或者git hook運行的用戶是什麼? - α CVn
@MichaelKjörling如上所述 這裡 應該可以在第一個字段中寫入用戶和組。 * 不起作用。把我的名字直接用於我......但顯然不是sudo組中的其他用戶。 - Mołot
@MichaelKjörling謝謝你,你的評論讓我尋找特殊的字符並讓我找到答案:D編輯:刪除自我答案並從同一時刻接受第三方答案。 - Mołot


答案:


似乎你的sudoers中有相關的行錯過了一個角色:

sudo ALL =(全部:全部)NOPASSWD:全部

匹配名為'sudo'的用戶。對於“sudo組中的所有用戶”,它應該是:

%sudo ALL =(ALL:ALL)NOPASSWD:ALL

(注意開頭的%符號)。


19
2018-04-23 12:46



啊那就是這樣的 % 在 %wheel 意思。 - nikhil


sudo visudo

然後,假設 molot 是您的用戶名,轉到文件末尾並:

molot ALL=(ALL) NOPASSWD: ALL

這應該有效,但如果沒有,請告訴我們。


1
2018-04-23 12:13



這很有效。為了我。但是,顯然,不適用於sudo組中的marian或任何其他用戶。 - Mołot
然後創建用戶別名(User_Alias),並授予以root身份運行特定命令的權限(Runas_Alias)。我不知道你的小組是如何設置的,你可以查看Sudoers wiki help.ubuntu.com/community/Sudoers   它非常簡潔。檢查“用戶規範”部分,這應該有所幫助。 - Jugurtha Hadjar