我希望向/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