Така проблема може залежати від ОС, яку ви використовуєте, та способу її налаштування. Деякі дистрибутиви Linux (в основному такі, що базуються на RHEL, як CentOS чи Fedora), за замовчуванням активуються SELinux. Це можна перевірити та тимчасово змінити за допомогою наступних команд:
root@ls:~# /usr/sbin/getenforce
Enforcing
root@ls:~# /usr/sbin/setenforce Permissive
root@ls:~# /usr/sbin/getenforce
Permissive
Ви також можете мати більш повне уявлення про поточну конфігурацію за допомогою:
root@ls:~# /usr/sbin/sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: enforcing
Policy version: 21
Policy from config file: targeted
Цю зміну можна зробити постійною, відредагувавши /etc/selinux/config
файл та встановивши SELINUX
змінну на permissive
або disabled
.
Але правильний спосіб вирішити подібне питання , якщо ви дійсно в цій ситуації, - це перевірити /var/log/audit/audit.log
файл журналу. Він буде містити всі події, пов'язані з правилами SELinux. Тоді, ймовірно, ви повинні надати сценарію правильний контекст, тобто мати дозвіл на управління користувачем apache / php. Перевірка контексту безпеки SELinux виконується за допомогою ls -Z
:
root@ls:~# ls -alZ /var/www/cgi-bin/
drwxr-xr-x root root system_u:object_r:httpd_sys_script_exec_t .
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t ..
У цьому списку відображаються користувач, роль та тип кожного файлу / каталогу. Тут httpd_sys_script_exec_t
тип надає файлам у директорії cgi дозвіл на виконання httpd. Ваш сценарій оболонки, ймовірно, повинен мати один і той же тип.
Ви також можете подавати audit.log
рядки до audit2allow
команди. Це видасть вам зміни, необхідні для задоволення SELinux. Але зазвичай пропоновані зміни потрібно вносити в самій політиці SELinux, що не є тим, що слід робити у вашому випадку (все-таки цей вихід може дати деяку підказку щодо того, що відбувається).
Наступна сторінка описує подібну проблему та різні способи її вирішення: http://sheltren.com/stop-disabling-selinux
x
на виконання файлу ( ) у файлі? Ви вказали інтерпретатора сценарію в рядку shebang?