我不能通过PHP exec()函数运行可执行文件。
操作系统:Fedora 15
PHP safe_modeclosures
PHP代码是:
$exe = "/tmp/defne/./CwCssUGxhjAc"; $result = system( $exe, $retval );
chmod 777 on /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已启用。
PS:我不想禁用SELinux。 感谢你的创意,如果你build议禁用selinux。 我同样可以禁用我的电脑的电源插头。
SELinux几乎肯定会阻止Apache执行/tmp 。 你可以通过检查/var/log/audit/audit.log来validation。
简单的解决scheme是将二进制文件移动到可执行文件的标准位置; /usr/local/bin可能是最合适的。
或者,您可以将相应的文件上下文( bin_t )应用于二进制文件:
sudo semanage fcontext -a -t bin_t /tmp/defne/CwCssUGxhjAc sudo restorecon -v /tmp/defne/CwCssUGxhjAc