/etc/sudoers.d 中的 Sudo 指令不起作用(但如果它在 /etc/sudoers 中则没问题)

/etc/sudoers.d 中的 Sudo 指令不起作用(但如果它在 /etc/sudoers 中则没问题)

我希望向/etc/sudoers.d文件夹中添加一个文件,其中包含一条指令,允许www-data在没有 root 密码的情况下运行一个特定的脚本。

该指令是

www-data ALL=(ALL) NOPASSWD: /path/to/script.sh

如果我visudo将其添加到/etc/sudoers,则没有问题。

如果我将该行放入文件中并将其复制到/etc/sudoers.d,那么visudo它会告诉我该文件在第 1 行附近存在“语法错误”。

我是否需要在文件中放入其他内容,或者我需要做其他事情才能使其正常工作?

我正在运行 Ubuntu 18。

谢谢!

答案1

我发现了问题 - 对于 /etc/sudoers.d 中的文件,文件不能以指令结尾,而必须以新行结尾。这最容易通过 来显示cat -A

无效文件:

root@server:/etc/sudoers.d# cat -A /etc/sudoers.d/testfile
www-data ALL=(ALL) NOPASSWD: /path/to/script.shroot@server:/etc/sudoers.d#

有效文件:

root@server:/etc/sudoers.d# cat -A /etc/sudoers.d/testfile
www-data ALL=(ALL) NOPASSWD: /path/to/script.sh$
root@server:/etc/sudoers.d#

答案2

根据,文件名中/etc/sudoers.d/README不应包含符号。这对我来说是个问题——我使用了扩展名。..conf

# This will cause sudo to read and parse any files in the /etc/sudoers.d 
# directory that do not end in '~' or contain a '.' character.

文件也应该处于0440模式。

因此,我的解决方案是重命名文件:

sudo mv /etc/sudoers.d/50-jenkins.conf /etc/sudoers.d/50-jenkins
sudo ls -al /etc/sudoers.d/
drwxr-xr-x   2 root root  4096 окт 10 17:47 .
drwxr-xr-x 157 root root 12288 окт 10 17:44 ..
-r--r-----   1 root root   268 окт 10 17:44 50-jenkins
-r--r-----   1 root root   958 мар 30  2016 README

相关内容