Zainstalowane jako moduł Apache
Kiedy PHP jest używane jako moduł Apache, dziedziczy uprawnienia
użytkownika Apache (zazwyczaj te użytkownika "nobody"). Wpływa to na kilka
rzeczy w kwestii bezpieczeństwa i autoryzacji. Na przykład, jeśli używasz
PHP do dostępu do bazy danych, o ile ta baza nie ma wbudowanej kontroli
dostępu, będziesz musiał sprawić, aby baza danych była dostępna dla
użytkownika "nobody". Oznacza to, że złośliwy skrypt może uzyskać dostęp i modyfikować
dane w bazie, nawet bez nazwy użytkownika i hasła. Jest zupełnie
możliwe, żeby robot sieciowy natknął się na stronę administracyjną
bazy danych i skasował wszystkie twoje bazy danych. Możesz się
przed tym zabezpieczyć, używając autoryzacji Apache lub stworzyć
własny model dostępu używając LDAP, plików &htaccess; itd.
Często, po ustawieniu zabezpieczeń do tego stopnia, że użytkownik PHP
(w tym wypadku użytkownik Apache) nie stanowi już dużego zagrożenia,
odkrywa się, że PHP nie jest już w stanie zapisać żadnych plików
do katalogu użytkownika. Lub że nie może uzyskać dostępu do
ani modyfikować baz danych. Zabezpieczenia powstrzymują przed zapisywaniem
tych dobrych i tych złych plików lub wprowadzaniem dobrych i złych danych do bazy.
Częstą pomyłką bezpieczeństwa czynioną w tym momencie jest pozwolenie Apache
na działanie z uprawnieniami roota albo zwiększenie uprawnień Apache w inny
sposób.
Zwiększanie uprawnień użytkownika Apache do roota jest skrajnie
niebezpieczne i może narazić cały system, więc użycie sudo,
chroot lub uruchamianie jako root w inny sposób nie powinno być nawet rozważane,
o ile nie jesteś specjalistą z zakresu bezpieczeństwa.
Istnieją pewne prostsze sposoby. Używając
open_basedir możesz kontrolować i ograniczać
katalogi, które mogą być używane przez PHP. Możesz także ustawić
obszary tylko dla Apache, aby zabronić aktywności pochodzącej z sieci dla katalogów
innych niż danego użytkownika.