Czy jest możliwe, aby w Nginx skonfigurować innego użytkownika dla wirtualnego hosta?
Coś jak
server {
user myprojectuser myprojectgroup;
...
}
Nie, ponieważ wszystkie sekcje serwera w konfiguracji nginx są obsługiwane z tego samego zestawu procesów roboczych. Ponadto, z punktu widzenia bezpieczeństwa, lepiej uruchomić go w ten sposób, ponieważ oznacza to, że serwer automatycznie nie drażni treści (nieobecne głupoty takie jak a chmod -R 0777
), więc jeśli istnieje luka w zabezpieczeniach nginx, żadna treść jest zagrożony.
www-data
i perms0710
podczas konfigurowania vhosta (ponieważ wymaga to roota do skonfigurowania nginx, nie jest problemem, aby twoja automatyzacja ustawiała również niezbędne uprawnienia). Następnie zawartość docroot musi być tylkoo+x
dla katalogów io+r
plików.www-data
, każdy użytkownik, który może obsługiwać skrypt PHP lub proces cgi-bin, może uzyskać dostęp do dowolnego pliku dostępnego dlawww-data
użytkownika. Nie wydaje się to oczywiste dla każdego, kto przechowuje hasła do bazy danych naconfig.php.inc
podobnym komputerze lub w podobny sposób.peter
ijohn
. Hostują swoje strony internetowe w~/public_html
. W przypadku braku innego podejścia, o którym nie wspomina żadna z osób omawiających to powyżej, skrypt .php ma takie same uprawnienia jak serwer WWW, ponieważ działa również w ramachwww-data
. Oznacza to, że podobnie jak serwer WWW i interpreter PHP, może odczytać każdy inny skrypt .php.Tak. Jest to możliwe i zalecane dla dodatkowego bezpieczeństwa (zobacz dlaczego poniżej).
Biorąc pod uwagę, że używasz PHP-FPM (prawdopodobnie, jak to jest najczęściej), możesz utworzyć bufor dla każdej domeny, należący do innego użytkownika.
1. Utwórz szpule:
Dodaj szpule
/etc/php/7.0/fpm/pool.d/www.conf
lub utwórz nowy.conf
plik dla każdej nowej szpuli.Szpula nr 1 (myuser1):
Szpula # 2 (myuser2):
PS: Trzymaj listen.owner / listen.group dla tego samego użytkownika nginx (zwykle www-data ).
2. Przypisz każdą bufor do bloku serwera (host wirtualny dla użytkowników Apache):
Host 1:
Host 2:
Uruchom ponownie usługi FPM i NGINX
Testowanie:
Utwórz plik pinfo.php (lub inną nazwę), który pokaże bieżącego użytkownika procesu:
Lub utwórz plik pinfo.php przez bash:
Następnie otwórz „ http: //.../pinfo.php ” w przeglądarce.
Dlaczego warto korzystać z wielu użytkowników (ze względów bezpieczeństwa):
Jeśli prowadzisz wszystkie witryny pod tym samym użytkownikiem ( www-data ), wywołanie PHP do system () / passthru () / exec () będzie miało dostęp do wszystkich stron! NGINX nie ochroni cię przed tym. PHP jest tylko przykładem, ale każdy popularny język serwera WWW ma podobne wywołania. Jako haker możesz „ ls .. ”, aby poruszać się po wszystkich witrynach, a „ cp / echo / mv ”, aby napisać własny kod w dowolnym pliku (w tym w innych plikach na stronie). Nawet jeśli wszystkie witryny na serwerze są własnością tej samej osoby (np. Ciebie), wskazane jest, aby uruchomić każdą witrynę z innym użytkownikiem, ponieważ uniemożliwi to ewentualnym hakerom / wirusom (np. Wirusom Wordpress) dostęp do innych stron.
źródło
W odpowiedzi na powyższy komentarz Iwana, który wydaje się mieć zastosowanie do PO. Dwie rzeczy:
Katalog główny aplikacji byłby podobny do
/blah/peterWeb/html
i/blah/johnWeb/html
. Zarówno NGINX, jak i Apache2 nie pozwoliłyby na przeglądanie lub działanie w drugim katalogu, nawet jeśli oba działają w sieci jako dane grupy.Objęcie każdego drzewa katalogów własnym uprawnieniem pozwoliłoby każdemu użytkownikowi na ssh / login do systemu UNIX i zachowanie ich katalogów w tajemnicy - po prostu nie umieszczaj każdego użytkownika w grupie danych www. Jeśli się zgadzasz, to zdanie:
może być dokładniej napisany jako:
EDYCJA 1: Musiałem rozwiązać niektóre problemy z administratorem serwera. Zagłębiłem się w ten temat. Nie wiedziałem, jak dokładne są informacje Ivana! Jeśli chcesz dać użytkownikom możliwość przesyłania i uruchamiania skryptów w konfiguracji hostingu współdzielonego, zwróć uwagę. Oto jedno podejście . Nienawidzę Iwana do upewnienia się, że zrozumiałem tę lukę.
źródło
www-data
. Jeśli Johnny może stworzyć skrypt i uruchomić gowww-data
(w naiwnych konfiguracjach potrafi), skrypt Johnny'ego może odczytać skrypty Petera i odesłać je z powrotem do Johnny'ego. To nie ma nic wspólnego z grupami. Właściwym rozwiązaniem jest posiadanie suPHP (jeśli naiwnie skonfigurowany, zły, ponieważ źle napisany kod zagraża wszystkim plikom tego użytkownika), lub więzienie, lub dedykowany dodatkowy użytkownik sieciowy na użytkownika.