sudo不适用于某些命令


15

sudo在Debian 8上遇到了一个很奇怪的问题。用户无法在中执行某些命令/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

Answers:


28

问题是update-rc.d(中/etc/sudoers.d/update-rc.d)中的点;来自man sudo

#includedir指令可用于创建sudo.d目录,系统软件包管理器可以在软件包安装过程中将sudoers规则放入其中。例如,给定:

#includedir /etc/sudoers.d

sudo将读取/etc/sudoers.d中的每个文件,跳过以〜结尾或包含的文件名字符,以避免引起程序包管理器或编辑器临时/备份文件出现问题。


3
这是sudoers中两个可疑的设计决策。使用#为注释并作为指令的一部分,也是无视文件。有趣的是(激怒的)visudo -f some.file 没有警告说退出时很可能会忽略它。通过简单的投票就可以使信天翁信服。
user9517

1
@istheEnglishway完全同意。但是,信天翁信天翁仍然是信天翁。
MadHatter

忽略带有〜(或实际上带有某些扩展名的文件)的文件实际上是一个好主意,因为您绝对希望编辑后激活备份文件中的旧配置。而且,您可能不想手动检查该计算机上的编辑器是否也保留了备份文件。虽然当然可以通过仅包括具有白名单扩展名的文件(例如*.cf)来完成此操作,但是可能是此功能后来添加了,无论如何,有些用户会抱怨被迫使用设置的扩展名。
ilkkachu

至于在注释和include指令中都使用了哈希符号,是否有人要检查向后兼容性是否也是其背后的原因?
ilkkachu

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.