/etc/sudoers 將使用者設定為具有一般 sudo 使用權限,只有一個指令沒有密碼提示

/etc/sudoers 將使用者設定為具有一般 sudo 使用權限,只有一個指令沒有密碼提示

我在 /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

相關內容