我希望普通用户能够在系统中执行 apachectl 。这将是他们在正常权限之外可以做的唯一事情。我所做的是将这一行添加到 sudoers 文件的底部:
sampleuser ALL=(root) NOEXEC:/usr/sbin/apachectl
因此,作为用户 exampleuser,我执行了apachectl
命令,并收到此错误:
$ sudo apachectl stop
[sudo] password for sampleuser:
/usr/sbin/apachectl: line 105: /usr/sbin/httpd: Permission denied
现在看来权限是通过 /usr/sbin/httpd 命令获得的,因为apachectl
脚本调用了该可执行文件。所以我在 sudoers 文件中添加了另一行:
sampleuser ALL=(root) NOEXEC:/usr/sbin/httpd
现在我执行了相同的命令,但出现了相同的错误:
sudo apachectl start
[sudo] password for sampleuser:
/usr/sbin/apachectl: line 105: /usr/sbin/httpd: Permission denied
我现在的问题是,是否有解决方案,而无需编辑 apachectl 脚本文件或其他方法,这可能比我想要做的更容易。
谢谢。
答案1
Apachectl不知道需要使用sudo来执行httpd
尝试这样的事情:
APACHE_HTTPD='sudo -E /usr/sbin/httpd' sudo -E /usr/sbin/apachectl start
-E, --preserve-env
Indicates to the security policy that the user wishes to reserve their
existing environment variables. The security policy may eturn an error
if the user does not have permission to preserve the environment.
所以你将强制 apache2ctl 使用不同的命令来调用 httpd...