pld na hosting PHP - jak rozdzielacie klientów?

Wojciech Błaszkowski wojciech w blaszkowski.com
Pią, 12 Gru 2008, 10:37:40 CET


Dnia piątek 12 grudzień 2008, Jacek Osiecki napisał:
> Witam,
Hej,

> Czy ktoś przerabiał temat zrobienia bezpiecznego hostingu php?
> Chodzi o to, by uniemożliwić klientom zaglądanie do katalogów sąsiadów...
> Na razie mam to rozwiązane tak:
>   - vsftpd, klient po zalogowaniu ma HOME jako /
>   - każdy klient ma HOME w katalogu:
>     /home/clients/4c4712a4141d261ec0ca8f9037950685/nazwaklienta,
>     przy czym /home/clients ma usera root.root i 711

Uzywam pure-ftpd. Loginy zakładane są przez interfejs php i trzymane w bazie 
danych. pure-ftpd pobiera sobie te dane i umozliwia logowanie. 
Flaga "ChrootEveryone" ustawiona na "yes".

Mamy:
/home/vhosts/$login/$domena

Zatem login ma możliwość wglądu wyłącznie do własnych $domena. Config dla 
apache generowany również z bazy danych, co załatwia sprawę m.in. 
DocumentRoot.

> Niby nie zabezpiecza to fizycznie przed wejściem do sąsiada, teoretycznie
> "wystarczy" się wstrzelić w nazwę katalogu (oczywiście katalog w
> /home/clients
> jest generowany dla każdego klienta) ale biorąc pod uwagę ilość możliwych
> kombinacji to jest to mało prawdopodobne.

Bardziej martwiłbym się tym, że jeśli klient będzie marudził o safe_mode=off w 
php.ini bo nie może zainstalować sobie osCommerce (lub inny powód) to mu się 
to da. Jeśli już mu się da, to może sobie zrobić skrypt myszkujący 
po /home/vhosts/ który to skrypt będzie szukał config.php i zapisywał/wysyłał 
gdzieś jego zawartość.

Rozwiązanie AppArmor.

> Pierwszy problem to to że samo rozwiązanie nie jest zbyt eleganckie, jak
> ktoś chce sobie podawać ścieżki bezwzględne to będzie miał problem
> (oczywiście klienci nie dostają shella).
> Drugi problem to mała wygoda dla mnie - co prawda jak jestem zalogowany na
> serwerze to wystarczy wejść cd ~nazwaklienta, ale jak np. mam uniwersalnego
> usera ftp do wuwy to nijak nie dotrę do katalogu klienta - muszę najpierw
> sprawdzić jego $HOME w /etc/passwd...
> Najfajniej by było zrobić tak, żeby php widziało $HOME jako / - tak jak to
> jest rozwiązane bodajże w home.pl... tylko że oni mają własnoręcznie
> napisany serwer www :)
>
> Jak Wy to robicie?
j.w.

> Wiem że można np. zrobić wszędzie uruchamianie PHP jako 
> CGI i ustawienie takich uprawnień żeby jeden user nie miał szans zajrzeć do
> innego, ale to się wiąże ze znacznym spowolnieniem działania PHPa na co
> raczej nie mogę sobie pozwolić.
>
> Jakieś inne pomysły?
>
> Pozdrawiam,

-- 
Pozdrawiam, Best regards, Mit freundlichen Grüßen,

Wojciech "Wojtosz" Błaszkowski


Więcej informacji o liście dyskusyjnej pld-users-pl