Załóżmy (czysto hipotetycznie póki co , za słaby jestem aby coś takiego robić) że chciałbym oferować kolegom konta shell z hostingiem www, na systemie uniksowym. Serwer to nginx. Jak to zabezpieczyć? Z PHP nie będzie problemu bo mamy FastCGI i setuid, ale jak z innymi plikami?
Teoretycznie istnieje następująca możliwość ataku:
Każdy plik serwowany przez nginx musi mieć ustawione przez chown i chmod, czy przez ACL, prawo do odczytu dla www-data:
[email protected]$ scp -r [email protected]:/home/user/tajne ~/public_html/tajne_pliki
[email protected]$ chown -R www-data:user ~/public_html
[email protected]$ chmod -R u=rX,g=rwX,o= ~/public_html
Teraz przychodzi włamywacz i robi sobie symlink:
[email protected]$ ln -s /home/user/public_html/tajne_pliki ~/public_html/zchakierowane
I może tajne_pliki ściągać wchodząc na http://example.com/~chakier/zchakierowane/
Normalnie nic tym nie zyska bo dane do bazy danych itd. są w plikach php które nie muszą mieć uprawnień do odczytu przez www-data ale co jeśli http://example.com/~user/tajne_pliki/ był zabezpieczony hasłem ("401 authorization required")?
Pytałem na kanale IRC nginx'a i mnie wyśmiali mówiąc że nginx nie nadaje się dzielonego hostingu... czy naprawdę jedynym rozwiązaniem jest Apache, w którym AFAIK można ustawić żeby porównywał uid i gid pliku?
Teoretycznie istnieje następująca możliwość ataku:
Każdy plik serwowany przez nginx musi mieć ustawione przez chown i chmod, czy przez ACL, prawo do odczytu dla www-data:
[email protected]$ scp -r [email protected]:/home/user/tajne ~/public_html/tajne_pliki
[email protected]$ chown -R www-data:user ~/public_html
[email protected]$ chmod -R u=rX,g=rwX,o= ~/public_html
Teraz przychodzi włamywacz i robi sobie symlink:
[email protected]$ ln -s /home/user/public_html/tajne_pliki ~/public_html/zchakierowane
I może tajne_pliki ściągać wchodząc na http://example.com/~chakier/zchakierowane/
Normalnie nic tym nie zyska bo dane do bazy danych itd. są w plikach php które nie muszą mieć uprawnień do odczytu przez www-data ale co jeśli http://example.com/~user/tajne_pliki/ był zabezpieczony hasłem ("401 authorization required")?
Pytałem na kanale IRC nginx'a i mnie wyśmiali mówiąc że nginx nie nadaje się dzielonego hostingu... czy naprawdę jedynym rozwiązaniem jest Apache, w którym AFAIK można ustawić żeby porównywał uid i gid pliku?