У меня есть файл php, который выполняет сценарий оболочки
$ip_access = $_GET['ip_access']; // run knock app exec("/home/knock.sh ".$ip_access);
однако при доступе к нему я получаю следующую ошибку в журналах: «sh: /home/knock.sh: Permission denied». Я создал нового пользователя и добавил его в файл apache httpd.conf, но все еще не работает. Будем очень признательны за любые советы, как установить разрешения или как я могу предоставить пользователю больше доступа, чтобы он работал.
Проверьте, в каком режиме вы используете SELinux.
getenforce
Если вы работаете в принудительном режиме, вы можете устранить проблемы с SELinux, временно отключив SELinux:
setenforce 0
Если сценарий выполняется, повторно включите SELinux с помощью setenforce 1
и начните искать, где проблема в вашей конфигурации по сравнению с политикой безопасности системы SELinux.
Если вы работаете в режиме Enforcing, который используется по умолчанию, вам необходимо изменить контекст этого файла, потому что Apache может выполнять файлы только с httpd_script_exec_t
ярлык по умолчанию. Вы захотите запустить:
semanage fcontext -a -t httpd_script_exec_t /home/knock.sh
fixfiles restore /home/knock.sh
После этого проверьте контекст SELinux сценария:
ls -lZ /home/knock.sh
Если вы работаете в принудительном режиме, но он по-прежнему не работает, проверьте журналы аудита на /var/log/audit/audit.log
.
Если вы запускаете скрипт от имени соответствующего пользователя, вам может потребоваться добавить разрешение на выполнение +x
в файл. Вы можете сделать это, используя:
chmod +x /home/knock.sh
В качестве альтернативы вы можете использовать следующую команду (не нужно добавлять разрешение на выполнение):
exec("bash /home/knock.sh ".$ip_access);