Linux

sudo 不適用於某些命令

  • February 25, 2018

我在 Debian 8 上有一個相當奇怪的問題sudo。使用者無法在/etc/sudoers.d. 我使用 Chef 來分發配置,因此所有文件都是自動生成的。

例子:

此配置工作正常

root@server:~# cat /etc/sudoers.d/nginx 
# This file is managed by Chef.
# Do NOT modify this file directly.

user  ALL=(root) NOPASSWD:/usr/sbin/nginx

這失敗了:

root@server:~# cat /etc/sudoers.d/update-rc.d 
# This file is managed by Chef.
# Do NOT modify this file directly.

user  ALL=(root) NOPASSWD:/usr/sbin/update-rc.d

user@www42:~$ sudo update-rc.d 
[sudo] password for user: 
Sorry, user user is not allowed to execute '/usr/sbin/update-rc.d' as root on server.

有什麼問題?

診斷:

Mar  5 12:12:51 server sudo:    user : command not allowed ; TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/usr/sbin/update-rc.d
Mar  5 12:14:25 www42 su[1209]: pam_unix(su:session): session closed for user user

root@server:~# sudo --version
Sudo version 1.8.10p3
Configure options: --prefix=/usr -v --with-all-insults --with-pam --with-fqdn --with-logging=syslog --with-logfac=authpriv --with-env-editor --with-editor=/usr/bin/editor --with-timeout=15 --with-password-timeout=0 --with-passprompt=[sudo] password for %p:  --disable-root-mailer --with-sendmail=/usr/sbin/sendmail --with-rundir=/var/lib/sudo --mandir=/usr/share/man --libexecdir=/usr/lib/sudo --with-sssd --with-sssd-lib=/usr/lib/x86_64-linux-gnu --with-selinux --with-linux-audit
Sudoers policy plugin version 1.8.10p3
Sudoers file grammar version 43

問題是update-rc.d(in /etc/sudoers.d/update-rc.d) 中的點;來自man sudo

#includedir 指令可用於創建 sudo.d 目錄,系統包管理器可以將 sudoers 規則作為包安裝的一部分放入該目錄。例如,給定:

#includedir /etc/sudoers.d

sudo 將讀取 /etc/sudoers.d 中的每個文件,跳過以 ~ 結尾或包含 . 字元以避免導致包管理器或編輯器臨時/備份文件出現問題。

嘗試執行sudo -ll以獲取適用於您的使用者的命令/配置列表。

如果(似乎是這種情況)您的 update-rc.d 子句沒有出現,您可能會考慮調整您的廚師食譜,以便為每個使用者部署一個 sudoers.d 文件,而不是多個。

您還可以考慮是否需要與組相關的 sudoers 文件。

這個問題的答案可能會有所幫助:https ://askubuntu.com/questions/246455/how-to-give-nopasswd-access-to-multiple-commands-via-sudoers

引用自:https://serverfault.com/questions/836363