Назад | Перейти на главную страницу

centos, linux, проблема с разрешением apache

У меня есть файл 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);