Próbuję wykonać skrypt .sh z PHP, jednak nie działa.
Sprawdziłem dzienniki błędów i pojawia się błąd „sh: Odmowa dostępu”. Sprawdziłem, który użytkownik php jest uruchamiany, i zrobiłem to pod użytkownikiem apache.
Próbowałem zmienić własność .sh na użytkownika apache, ale nie ma rezultatu.
Na początku myślałem, że dzieje się tak, ponieważ skrypt znajduje się poza www / dir, jednak nawet gdy umieszczę skrypt w tym samym katalogu, błąd nadal występuje.
Czy są na to inne rozwiązania niż dodanie użytkownika apache do listy SUDOers?
Skrypt sh działa poprawnie, jeśli uruchomię go za pomocą komendy „php filename.php”.
bash
permissions
script
php
Robin Presto
źródło
źródło
x
) dla pliku? Czy podałeś interpreter skryptów w linii shebang?chmod 775 yourscript.sh
. To dar-x
(odczyt i wykonanie) uprawnienia „innym” użytkownikom tego pliku.Odpowiedzi:
Wypróbuj następujące sugestie:
php -r "echo exec('whoami');"
r-x
uprawnienia do oznaczania:chmod 755 dir; chmod 755 file
+s
flagę (sudo) do pliku (niezalecane):chmod u+s file
,safe_mode
.include_path
, np .:php.ini
plik:include_path ".:/usr/local/lib/php:/your/dir"
.htaccess
plik:php_value include_path ".:/usr/local/lib/php:/your/dir"
/bin/sh
) Dla użytkownika Apache (np. Sprawdź za pomocąfinger
:).php.ini
nie używa:disable_functions
doexec
funkcjiselinux-utils
zainstalowałeś (system Linux z ulepszonymi zabezpieczeniami), sprawdźgetenforce
/setenforce
skonfiguruj zgodnie z opisem w odpowiedzi @Tonin .Rozwiązywanie problemów:
php.ini
lubhttpd.conf
plik, nie zapomnij zrestartować serwera WWW,php.ini
wszelkiego rodzaju błędów (display_error
,error_reporting
etc.).źródło
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ń:
Możesz także uzyskać pełniejszy widok bieżącej konfiguracji dzięki:
Zmianę można wprowadzić na stałe, edytując
/etc/selinux/config
plik i ustawiającSELINUX
zmienną napermissive
lubdisabled
.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
: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 doaudit2allow
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
źródło
Dotarłem tutaj po poszukiwaniu podobnego problemu w Google. Pomyślałem, że porzucę komentarz na temat SELinuksa, który skierował mnie w dobrym kierunku.
W moim przypadku korzystałem z niestandardowego skryptu wdrażania Git, który używa polecenia powłoki. Polecenie działa dobrze w BASH, ale ma wtedy „odmowę dostępu” i „nie repozytorium” w Git. To było naprawdę dziwne i przeszedłem wiele poprawek, dopóki nie natknąłem się na tę odpowiedź.
root@ls:~# /usr/sbin/setenforce Permissive
rozwiązał problem dla mnie.źródło
Moja sytuacja jest nieco inna, ale Google mnie tu przywiodło, więc pomyślałem, że podzielę się ...
Mój serwer ma stabilną wersję Debiana i próbuję uruchomić skrypt powłoki, zadziałał raz, uprawnienia automatycznie zmieniły się na 644 i otrzymano kolejną próbę uruchomienia skryptu
Permission denied
. Okazało się to dla mnie problemem z serwerem samby i do tej pory nie zauważyłem tego wzoru.Poprawką było dziwne zmiany uprawnień QA podczas zapisywania pliku na partycji Samba z edytora Windows . Nie wiedziałem o tej
map archive = no
opcji nawet po dziesięciu latach korzystania z akcji samby.Coś w używaniu Notepad ++ na pulpicie systemu Windows zmieniłoby uprawnienia plików docelowych na 675 zamiast 775, gdy skonfigurowano umask.
źródło
Uruchamianie poleceń roota w PHP przez Apache
Mam aplikację internetową, która musi wykonywać polecenia powłoki jako root w funkcji PHP, i można by pomyśleć, że byłoby to całkiem proste… ale zajęło mi kilka googli, aby uzyskać wszystkie szczegóły, więc oto moje przydatne notatki na temat to. To działa na systemie Linux z Apache i będziemy używać „sudo” w „shell_exec” do uruchamiania poleceń.
Najważniejsze jest edytowanie pliku / etc / sudoers i zazwyczaj możesz (jako root) użyć do tego polecenia „visudo”.
Upewnij się, że apache może uruchamiać polecenia ORAZ nie wymaga hasła:
Następnie musisz skomentować ten wiersz:
Jeśli tego nie zrobisz, zobaczysz te błędy w / var / log / secure: „przepraszam, musisz mieć tty, aby uruchomić sudo”. Teraz jesteś gotowy do pracy, a kod PHP jest prosty:
$ results = shell_exec („data sudo”);
źródło