Rozwiązanie dla PHP bez uprawnień do wykonywania polecenia w systemie Linux
Powiązane oficjalne odniesienia
PHP exec Linux sudoers file Sudo CommandsModyfikacje podczas pracy w trybie fastcgi
Kiedy PHP działa w trybie fastcgi, jego uprawnienia są dziedziczone z programu głównego. Jako przykład wyjaśniamy apache. Najpierw musimy znaleźć konto, na którym działa Apache, a następnie użyć vi lub vim, aby edytować plik / etc / sudoers i dodać następujący przykład referencyjny do pliku. W poniższej treści najpierw użyj polecenia ps, aby znaleźć proces apache httpd, spójrz na informacje o koncie po lewej stronie zwróconego wyniku, a następnie edytuj plik sudoers, aby dodać autoryzację do konta Apache.
ps aux | grep httpd
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apache ALL=(ALL) NOPASSWD:ALL
Modyfikacje podczas pracy w trybie php-fpm
Podczas pracy w trybie php-fpm działa jako oddzielny proces. Więc najpierw znajdujemy jego bieżące konto, a następnie wykonujemy operacje autoryzacyjne jak powyżej.
ps aux | grep php-fpm
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
www ALL=(ALL) NOPASSWD:ALL
Sprawdź, czy zmiany odniosły skutek
Po powyższych operacjach zmodyfikowaliśmy autoryzację, ale nie weszła ona jeszcze w życie. Aby nasza modyfikacja zaczęła obowiązywać, musimy ponownie uruchomić usługę. W zależności od naszej aktualnej sytuacji, zrestartuj usługę Apache lub php-fpm. Następnie wykonaj polecenie exec, aby wyświetlić zwrócony wynik.Jeśli wynik jest uzyskany normalnie, to się powiedzie.
exec('sudo dmidecode -s system-serial-number', $result);
var_dump($result);