我在 /etc/sudo 中有一個條目,供可以對所有命令執行 sudo 的使用者使用。
弗雷德 ALL=(全部:全部) 全部
根據文檔,最終 ALL 負責允許存取所有命令。
我希望 fred 能夠在 Ubuntu 14.04 上重新啟動 nginx,而無需提供 sudo 密碼,同時仍保留為其他指令呼叫 sudo 的能力。這蘇多爾斯文檔不清楚,但我相信
弗雷德 ALL=(ALL) NOPASSWD: /usr/sbin/service
只讓 Fred 運行一個指令。我想讓 fred 能夠透過 sudo 以 root 身分執行所有命令,除了 /usr/sbin/service 之外的所有命令都需要密碼。
查看文件的 BNF
User_Spec ::= User_List Host_List '=' Cmnd_Spec_List (':' Host_List '=' Cmnd_Spec_List)*
Cmnd_Spec_List ::= Cmnd_Spec | Cmnd_Spec ',' Cmnd_Spec_List
Cmnd_Spec ::= Runas_Spec? SELinux_Spec? Solaris_Priv_Spec? Tag_Spec* Cmnd
Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')'
SELinux_Spec ::= ('ROLE=role' | 'TYPE=type')
Solaris_Priv_Spec ::= ('PRIVS=privset' | 'LIMITPRIVS=privset')
Tag_Spec ::= ('EXEC:' |
'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' |
'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' |
'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' |
'NOPASSWD:' | 'SETENV:' | 'NOSETENV:')
看來我可以使用多個 Cmnd_Spec_Lists
弗雷德 ALL=(全部:全部) 全部,NOPASSWD: /usr/sbin/service
但文件並沒有說後者 NOPASSWD: Cmnd_Spec 將僅覆蓋該命令的 ALL 命令根存取權。
這是我喜歡第一次就做對的事情,任何人都可以確認最後一行是否可以用於當前的特定目的(或者,換句話說,它不會工作)?
此外,如果它可以允許fred 在沒有sudo 密碼的情況下運行服務,有沒有一種方法可以限制服務的參數,這樣fred 只能在沒有密碼的情況下在服務nginx 上工作,甚至更好,所以fred只能重新啟動該伺服器沒有密碼?
謝謝。
答案1
配置底部的命令會覆蓋上面的命令。它在文件中提到https://www.sudo.ws/man/1.8.15/sudoers.man.html#SUDOERS_FILE_FORMAT它不是最具體到最不具體的,除非您以這種方式將它們排序。
我使用多行來完成此操作。當事情變得更加複雜時,多行和規則在將來更容易閱讀和理解。多行可以幫助您設定順序。
# I don't know what order this is interpreted in:
fred ALL=(ALL : ALL) ALL, NOPASSWD: /usr/sbin/service
# I do know what order this is interpreted in:
fred ALL=(ALL) ALL
fred ALL=(ALL) NOPASSWD: /usr/sbin/service
以下幾行來自我的 sudoers 檔案。允許群組成員wheel
執行所有命令,然後在REBOOT
沒有密碼的情況下專門執行別名中的命令。
Cmnd_Alias REBOOT = /sbin/halt, /sbin/reboot, \
/sbin/poweroff, /sbin/shutdown
%wheel ALL=(ALL) ALL
%wheel ALL=(ALL) NOPASSWD: REBOOT
不幸的是,我沒有太多公開文件可供您參考。 sudoers 手冊頁很荒謬。我不久前確實讀過一本很棒的(易於閱讀的)書(須藤精通作者:Michael W. Lucas),這個範例適用於我的多台 Linux 和 BSD 機器。
答案2
您好,這可以工作嘗試以 root 身份登入並按照以下命令 $append 以下行到 sudoers 文件中
弗雷德 ALL=(ALL)NOPASSWD:ALL