我无法通过 PHP exec() 函数运行可执行文件。
操作系统:Fedora 15
PHP 安全模式关闭
PHP代码为:
$exe = "/tmp/defne/./CwCssUGxhjAc";
$result = system( $exe, $retval );
chmod 777
在/tmp/defne
和/tmp/defne/CwCssUGxhjAc
我可以通过以下方式在命令行运行它:
sudo -u apache /tmp/defne/CwCssUGxhjAc
当我通过 PHP 脚本调用 whoami 时,PHP 给出了 apache。
我可以通过 PHP 运行其他可执行文件,例如 gcc、whoami 等。但我无法运行 C/C++ 编译的二进制文件。
Apache 错误日志中显示:
sh: /tmp/defne/./CwCssUGxhjAc permission denied
Selinux 已启用。
附言:我不要想要禁用 selinux。如果您建议禁用 selinux,感谢您的巧妙想法。我也可以同样禁用我的电脑的电源插头。
答案1
SELinux 几乎肯定阻止了 Apache 执行 中的操作/tmp
。您可以通过检查 来验证这一点/var/log/audit/audit.log
。
简单的解决方案是将二进制文件移动到可执行文件的标准位置;/usr/local/bin
这可能是最合适的。
或者,你可以将适当的文件上下文 ( bin_t
) 应用到二进制文件:
sudo semanage fcontext -a -t bin_t /tmp/defne/CwCssUGxhjAc
sudo restorecon -v /tmp/defne/CwCssUGxhjAc