【发布时间】:2016-05-19 01:16:23
【问题描述】:
我有一个称为浏览器的页面,最终需要以 root 身份运行一个命令。我非常清楚从浏览器运行 shell_exec 命令的安全隐患,因此我已将“apache all no password”的 sudoers 文件锁定到一个命令:
apache ALL = (ALL) NOPASSWD: /usr/sbin/rndc
我已经对我的 PHP 页面进行了硬编码,因此命令的任何部分都不是从用户可访问的输入中运行的。
这个过程只是通过发出来刷新 Bind9(命名)的配置
shell_exec("/usr/sbin/sudo /usr/sbin/rndc reload");
但是,它似乎没有运行,但是当我将 /bin/bash 设置为 apache 的默认 shell 并作为 apache 时,当我在 apache shell 中尝试它时,这个进程就会运行:
[root@localhost zones]# su - apache
-bash-4.2$ /usr/bin/sudo /usr/sbin/rndc reload
server reload successful
我的整个 PHP 代码:
<?php
error_reporting(E_ALL);
$result = shell_exec("/usr/bin/sudo /usr/sbin/rndc reload");
print_r($result);
?>
我没有收到任何回复。有任何想法吗? SELinux 现在设置为 permissive。
【问题讨论】: