2010-05-06 3 views
11

Natrafiłem na ten problem, mam serwer z uruchomionym apache i php. Mamy wielu wirtualnych hostów, ale zauważyliśmy, że potencjalnie szkodliwy użytkownik mógłby wykorzystać swoją przestrzeń internetową do przeglądania plików innych użytkowników (za pomocą prostego skryptu php), a nawet plików systemowych, może się to zdarzyć z powodu uprawnień php. Jednym ze sposobów uniknięcia tego jest ustawienie var_basedir var w php.ini, jest to bardzo proste w jednym systemie hosta, ale w przypadku wirtualnych hostów będzie to basebir na każdy host.PHP - inny open_basedir na każdego hosta wirtualnego

Ho mogę ustawić dis basedir na każdego użytkownika/hosta? Czy istnieje sposób na to, aby Apache podnosił tytuł przywilejów php pliku php, o który został poproszony. /home/X_USER/index.php ma jako właściciela X_USER, kiedy apache odczytuje plik index.php, sprawdza swoją ścieżkę i właściciela, po prostu szukam dla tej ścieżki zestawu systemowego opartego na zmiennej PHP.

Dziękuję z góry Lopoc

Odpowiedz

17

Możliwe jest ustawienie open_basedir na zasadzie per-katalogu używając dyrektywy Apache php_admin_value.

Przykład z manual:

<Directory /docroot> 
    php_admin_value open_basedir /docroot 
</Directory> 

Re swój komentarz: tak, polecenia zewnętrzne nie są dotknięte open_basedir - Dzwoniąc ls / Odbywa się to z prawami konto użytkownika PHP działa na (często o nazwie www lub podobne). O ile mi wiadomo, nie jest możliwe rozszerzenie open_basedir na zewnętrzne polecenia.

W tym przypadku nie sądzę, że rodzaj ochrony, której szukasz, jest możliwy w normalnej konfiguracji Apache/PHP. Jedyne, co może być bliskie, to running Apache in a chroot jail. Nie zrobiłem tego sam, więc nie mogę nic o tym powiedzieć - musiałbyś się przyłączyć i być może zadać pytanie na ten temat.

+0

tak ok, ale po prostu „ls /” prosty ECHO nadal działa, nawet z ta dyrektywa: – Lopoc

+0

@Lococ zobacz moją aktualizację. –

1

chroot jest dobrym pomysłem. A teraz doker jest bardziej skuteczny.

i open_basedir z „/ docroot” nie jest bezpieczeństwo, należy skończyć z „/” lub PHP mogą uzyskać dostęp/docroot1