这有效:
apache ALL=(ALL) NOPASSWD:ALL
但这并没有:
apache ALL=(ALL) NOPASSWD:/var/log/maillog
它说:“sudo:不存在 tty,并且未指定 Askpass 程序。”
路径是正确的。我在这里错过了什么吗?想法?
在后面添加空格NOPASSWD:
并没有使它起作用。我正在.sh
从 PHP 调用一个文件,其中包含以下内容:
#!/bin/sh
grep bounced /var/log/maillog
我添加了脚本和日志文件的路径,但它不起作用。
答案1
sudoers 线
apache ALL=(ALL) NOPASSWD:/var/log/maillog
允许apache
用户执行文件/var/log/maillog
。但是您的脚本会执行grep
,因此该行不适用。
Sudo 通过命令工作。无法使用它来允许通过任何命令访问特定文件。grep bounced /var/log/maillog
如果您想要的话,您可以允许该命令。但是,如果您想要的只是允许用户使用任何程序apache
进行读取/var/log/maillog
,那么您应该做的就是添加apache
到该文件的访问控制列表中。
setfacl -m user:apache:r /var/log/maillog
每次由于日志轮转而重新创建文件时都需要执行此命令。这是使用足够新的 logrotate 版本自动完成的。如果你的版本太旧,将该命令作为postrotate
条目添加到您的 logrotate 配置中。