Linux
sudo 不適用於某些命令
我在 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