Taki problem może zależeć od używanego systemu operacyjnego i jego konfiguracji. Niektóre dystrybucje linuksowe (głównie oparte na RHEL, takie jak CentOS lub Fedora) są domyślnie włączone z SELinux. Można to sprawdzić i tymczasowo zmienić za pomocą następujących poleceń:
root@ls:~# /usr/sbin/getenforce
Enforcing
root@ls:~# /usr/sbin/setenforce Permissive
root@ls:~# /usr/sbin/getenforce
Permissive
Możesz także uzyskać pełniejszy widok bieżącej konfiguracji dzięki:
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
Zmianę można wprowadzić na stałe, edytując /etc/selinux/configplik i ustawiając SELINUXzmienną na permissivelub disabled.
Ale poprawnym sposobem rozwiązania tego rodzaju problemu , jeśli rzeczywiście jesteś w takiej sytuacji, jest sprawdzenie /var/log/audit/audit.logpliku dziennika. Będzie zawierał wszystkie zdarzenia związane z regułami SELinux. Prawdopodobnie wtedy powinieneś nadać skryptowi właściwy kontekst, tzn. Mieć uprawnienia do uruchamiania przez użytkownika apache / php. Sprawdzanie kontekstu bezpieczeństwa SELinux odbywa się za pomocą 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 ..
Lista zawiera użytkownika, rolę i typ każdego pliku / katalogu. Tutaj httpd_sys_script_exec_ttyp daje plikom w katalogu cgi pozwolenie na wykonanie przez httpd. Twój skrypt powłoki powinien prawdopodobnie mieć ten sam typ.
Możesz także wprowadzić audit.loglinie do audit2allowpolecenia. Zaowocuje to zmianami potrzebnymi do uszczęśliwienia SELinux. Ale zwykle sugerowane zmiany należy wprowadzić w samej polityce SELinuksa, co nie jest tym, co powinieneś zrobić w twoim przypadku (nadal, ten wynik może dać pewną wskazówkę, co się dzieje).
Poniższa strona opisuje podobny problem i różne sposoby jego rozwiązania: http://sheltren.com/stop-disablowanie-selinux
x) dla pliku? Czy podałeś interpreter skryptów w linii shebang?