sudo 对某些命令不起作用

Lai*_*ura 15 linux debian sudo rbac

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
Run Code Online (Sandbox Code Playgroud)

这失败了:

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.
Run Code Online (Sandbox Code Playgroud)

有什么问题?

诊断:

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
Run Code Online (Sandbox Code Playgroud)

Mad*_*ter 28

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

#includedir 指令可用于创建 sudo.d 目录,系统包管理器可以将 sudoers 规则作为包安装的一部分放入该目录。例如,给定:

#includedir /etc/sudoers.d
Run Code Online (Sandbox Code Playgroud)

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

  • 这是 sudoers 中的 2 个有问题的设计决策。使用 `#` 作为注释和指令的一部分以及忽略文件。有趣的是(令人恼火的)`visudo -f some.file` 并没有警告它在退出时可能会被忽略。一个简单的赞成票就可以让脾气暴躁的信天翁平静下来。 (4认同)

iwa*_*rue 5

尝试并运行sudo -ll以获取适用于您的用户的命令/配置列表。

如果(似乎是这种情况)您的 update-rc.d 子句没有出现,您可以考虑调整您的厨师食谱,为每个用户部署一个 sudoers.d 文件,而不是多个。

您还可以考虑是否需要与组相关的 sudoers 文件。

这个问题的答案可能会有所帮助:https : //askubuntu.com/questions/246455/how-to-give-nopasswd-access-to-multiple-commands-via-sudoers