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/config
plik i ustawiając SELINUX
zmienną na permissive
lub disabled
.
Ale poprawnym sposobem rozwiązania tego rodzaju problemu , jeśli rzeczywiście jesteś w takiej sytuacji, jest sprawdzenie /var/log/audit/audit.log
pliku 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_t
typ 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.log
linie do audit2allow
polecenia. 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?