Я не могу запустить исполняемый файл функцией PHP exec ().
ОС: Fedora 15
PHP safe_mode выключен
Код PHP:
$exe = "/tmp/defne/./CwCssUGxhjAc";
$result = system( $exe, $retval );
chmod 777
на /tmp/defne
и /tmp/defne/CwCssUGxhjAc
Я могу запустить его в командной строке:
sudo -u apache /tmp/defne/CwCssUGxhjAc
PHP дает apache, когда я вызываю whoami через скрипт PHP.
Я могу запускать другие исполняемые файлы, такие как gcc, whoami и т. Д., Через PHP. Но я не могу запустить скомпилированный двоичный код C / C ++.
В журнале ошибок apache говорится:
sh: /tmp/defne/./CwCssUGxhjAc permission denied
Selinux включен.
PS: Я не хочу отключить selinux. Спасибо за ваши гениальные идеи, если вы предложите отключить selinux. С таким же успехом я могу отключить шнур питания своего компьютера.
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