PHP shell_exec 运行debian系统服务

PHP shell_exec 运行debian系统服务

我正在尝试使用 PHP 的shell_exec功能来控制系统服务:

shell_exec('sudo /usr/sbin/service icecast2 stop');

但我可以让它工作的唯一方法是允许所有用户 root 访问以下服务/etc/sudoers

ALL ALL=(root) NOPASSWD: /usr/sbin/service

这显然是一个非常糟糕的主意,但如果我尝试将其设置为其他任何内容,它就会拒绝运行,因为该服务需要 root 权限,例如:

%www-data ALL=(root) NOPASSWD: /usr/sbin/service
%www-data ALL=NOPASSWD: /usr/sbin/service

另外,回声posix_getpwuid(posix_geteuid())['name'];给了我一个正在运行的进程的不同名称 - 不是 www-data。但这些都不起作用:

%myphpuser ALL=(root) NOPASSWD: /usr/sbin/service
%myphpuser ALL=NOPASSWD: /usr/sbin/service

我还尝试编写一个 bash 脚本来控制该服务并从 shell_exec 调用它,但是无法运行。

有人能想到任何其他解决方案,这样我就不会像这样开放我的服务吗?

例如,只允许访问此特定服务和功能?

编辑

取得了一些进展。这可行,但是这足够安全吗?

myphpuser ALL=(ALL:ALL) ALL
myphpuser ALL=NOPASSWD: /usr/sbin/service

还应该提到的是,调用它的 php 脚本是由 cron 作业运行的,无论如何它都不是公开的。

相关内容