Przejdź do głównej zawartości

Jak bezpiecznie izolować użytkowników hostingu w systemie Linux

· 6 min aby przeczytać

Opublikowano 12 listopada 2026 r.

Jak bezpiecznie izolować użytkowników hostingu w systemie Linux?

Serwer współdzielony może działać bez zarzutu przez wiele miesięcy, aż do chwili, gdy jedna zaatakowana witryna odczyta plik, którego nigdy nie powinna zobaczyć. Dlatego zespoły muszą bezpiecznie izolować użytkowników hostingu — nie jako luksus zarezerwowany dla dużych firm hostingowych, ale jako podstawową zasadę dla każdego serwera obsługującego więcej niż jedną witrynę, klienta lub projekt.

Izolacja użytkowników ogranicza szkody, gdy aplikacja zawiera podatną wtyczkę, ma słabe hasło albo przesłany plik okazuje się złośliwy. Zapobiega też sytuacji, w której jedno obciążone konto spowalnia witryny wszystkich pozostałych użytkowników. Cel jest prosty: każdy klient powinien mieć wystarczającą kontrolę, by zarządzać własnymi witrynami, a serwer powinien wyraźnie oddzielać wszystko inne.

Co właściwie oznacza izolacja użytkowników hostingu​

Izolacja nie sprowadza się do jednego ustawienia. To zestaw współpracujących ze sobą warstw. Każde konto hostingowe powinno mieć co najmniej własnego użytkownika systemu Linux, katalog domowy, uprawnienia do plików, dane uwierzytelniające do bazy danych, proces PHP i reguły dostępu. Awaria jednej witryny nie powinna automatycznie dawać dostępu do wszystkich witryn na serwerze.

Wyobraź sobie serwer współdzielony jako budynek mieszkalny. Odrębny użytkownik systemu Linux to drzwi do mieszkania. Prawidłowe uprawnienia do plików to zamek. Oddzielne pule PHP-FPM, użytkownicy baz danych i limity zasobów to ściany, instalacje i bezpieczniki. Jedna warstwa pomaga, ale poleganie tylko na niej sprawia, że drobne incydenty przeradzają się w długie wieczory.

Odpowiedni poziom izolacji zależy od tego, co hostujesz. Kilka wewnętrznych witryn zarządzanych przez jednego zaufanego administratora ma inne potrzeby niż serwer agencji z 80 kontami klientów. W przypadku niepowiązanych ze sobą klientów warto zastosować silniejszą separację, nawet jeśli wymaga dodatkowej konfiguracji i nieco większej ilości pamięci.

Zacznij od osobnego użytkownika systemu Linux dla każdego konta hostingowego​

Nigdy nie uruchamiaj wszystkich witryn na tym samym koncie systemowym. Jeśli wszystkie pliki witryn należą do ogólnego użytkownika WWW, takiego jak `www-data`, każdy podatny skrypt z możliwością zapisu plików może modyfikować także witrynę innego klienta.

Utwórz osobnego użytkownika systemu Linux dla każdego konta hostingowego i przypisz mu własny katalog główny dokumentów, dzienniki, pliki tymczasowe oraz pliki aplikacji. W miarę możliwości unikaj współdzielonych katalogów z prawem zapisu. Katalog, do którego zapisu mogą dokonywać wszystkie konta, prędzej czy później stanie się miejscem, w którym czyhają kłopoty.

Domyślnie ustawiaj restrykcyjne uprawnienia. Katalogi witryn zazwyczaj wymagają `755`, a zwykłe pliki mogą mieć uprawnienie `644`. Pliki konfiguracyjne zawierające dane poufne powinny mieć bardziej restrykcyjne uprawnienia, często `600` lub `640`, zależnie od tego, które konto usługi musi mieć do nich dostęp. Nie sięgaj po `777` tylko dlatego, że folder przesyłania plików nie działa. To usuwa objaw, ale tak, jakby zdjąć z drzwi zamek.

Własność plików jest równie ważna jak uprawnienia określone liczbowo. Na przykład witryna WordPress może wymagać prawa zapisu do `wp-content/uploads`, ale usługa WWW nie powinna mieć uprawnień do modyfikowania całej aplikacji. Przyznawaj prawo zapisu wyłącznie do katalogów, które rzeczywiście go wymagają.

Nie umieszczaj granic między kontami we współdzielonych ścieżkach​

Przechowywanie kopii zapasowych, sesji, pamięci podręcznych lub plików wdrożeniowych we wspólnej lokalizacji może wydawać się kuszące. To wygodne, dopóki nie zmienią się uprawnienia albo zadanie porządkowe nie usunie niewłaściwych plików. Dane aplikacji użytkownika przechowuj w katalogu domowym tego konta lub w innej lokalizacji należącej wyłącznie do niego.

Jeśli nie da się uniknąć współdzielonej usługi, określ dostęp wprost. Użyj dedykowanej grupy z możliwie najwęższymi wymaganymi uprawnieniami, udokumentuj powód jej utworzenia i sprawdź ją ponownie po wprowadzeniu zmian. „Tymczasowy” współdzielony dostęp ma tendencję do stawania się stałym.

Uruchamiaj PHP oddzielnie dla każdego konta​

W przypadku witryn PHP model wykonywania jest jedną z najważniejszych decyzji, jakie podejmiesz. Uruchamianie PHP we współdzielonym procesie oznacza, że podatna witryna może uzyskać dostęp wykraczający daleko poza jej własne pliki. Osobna pula PHP-FPM dla każdego użytkownika hostingu zapewnia wyraźniejszą granicę: proces roboczy PHP działa jako użytkownik systemu Linux przypisany do tego konta, z własnymi ustawieniami procesu i limitami.

Pula PHP-FPM przypisana do jednego użytkownika ułatwia też diagnozowanie problemów. Jeśli aplikacja jednego klienta zacznie zużywać procesy robocze lub pamięć, możesz zidentyfikować odpowiedzialną pulę, zamiast traktować serwer jak jedną wielką zagadkę. Ustaw limity na poziomie puli, takie jak maksymalna liczba procesów potomnych i limity czasu żądań, odpowiednio do planu konta i rzeczywistych potrzeb aplikacji.

Wiąże się z tym pewien kompromis. Większa liczba pul PHP-FPM zużywa więcej pamięci niż jedna wspólna pula, zwłaszcza na małym serwerze wirtualnym. W przypadku serwera obsługującego tylko kilka witryn o niewielkim ruchu dobierz rozsądne limity, zamiast tworzyć nadmiernie duże pule. Nie rezygnuj jednak z separacji kont tylko po to, by zaoszczędzić niewielką ilość pamięci RAM. Zwiększ dostępną moc obliczeniową, zanim zamienisz wszystkich użytkowników w jedną strefę bezpieczeństwa.

W przypadku aplikacji innych niż PHP stosuj tę samą zasadę. Uruchamiaj usługi Node.js, Python, Ruby lub niestandardowe pod dedykowanymi użytkownikami. Używaj oddzielnych usług systemowych i plików środowiskowych, zamiast jednego współdzielonego konta aplikacji z dostępem do każdego projektu.

Oddziel bazy danych, dane uwierzytelniające i informacje poufne​

Serwer bazy danych często staje się miejscem, w którym izolacja po cichu przestaje działać. Przyznanie każdej aplikacji tego samego loginu administratora bazy danych jest wygodne podczas konfiguracji, ale później zawsze wiąże się z ryzykiem. Każda witryna powinna mieć własną bazę danych i własnego użytkownika bazy danych, z uprawnieniami ograniczonymi do tej bazy.

Nie przyznawaj użytkownikom aplikacji uprawnień globalnych, prawa do tworzenia nowych użytkowników ani dostępu do każdego schematu, chyba że istnieje konkretny powód operacyjny. Przejęte dane uwierzytelniające systemu CMS powinny ujawnić dane jednej aplikacji, a nie dane klientów z całego serwera.

Z taką samą ostrożnością traktuj informacje poufne. Hasła do baz danych, klucze API i dane logowania do poczty przechowuj w plikach konfiguracyjnych należących do danego konta. Nie umieszczaj ich w publicznych katalogach WWW, katalogach systemu kontroli wersji ani współdzielonych lokalizacjach kopii zapasowych. Gdy pracownik, wykonawca lub klient nie potrzebuje już dostępu, odbierz go, zamiast zakładać, że stare dane uwierzytelniające pozostaną nieszkodliwe.

Kontroluj dostęp do powłoki, SSH i zadań zaplanowanych​

Nie każdy użytkownik hostingu potrzebuje SSH. Klientowi, który zarządza tylko podstawową witryną, może wystarczyć zarządzanie plikami przez panel lub SFTP. Dla programistów i agencji SSH może być naprawdę przydatne przy wdrożeniach, Composerze, WP-CLI i sprawdzaniu dzienników. Praktycznym rozwiązaniem nie jest blokowanie go wszędzie, lecz świadome przyznawanie dostępu.

W miarę możliwości używaj kluczy SSH zamiast haseł. Wyłącz bezpośrednie logowanie na konto root, unikaj współdzielonych kont administratorów i przydzielaj pracownikom osobne konta z imieniem i nazwiskiem, aby można było przypisać działania do konkretnych osób. Jeśli użytkownik potrzebuje jedynie przesyłać pliki, rozważ ograniczenie konta do SFTP. Jeśli potrzebuje powłoki, upewnij się, że nie może odczytywać katalogów domowych innych użytkowników ani korzystać z ryzykownych metod eskalacji uprawnień.

Zadania cron wymagają takiej samej uwagi. Uruchamiaj każde zaplanowane zadanie jako jego właściciel, nie jako root ani z poziomu współdzielonego konta WWW. Nieprawidłowe zadanie cron może zapełnić dysk, wysłać tysiące wiadomości e-mail lub wielokrotnie uruchamiać kosztowny skrypt. Ustal jasne limity i przejrzyj zadania, które od dawna nie były używane.

Ustal limity zasobów dla każdego konta​

Bezpieczeństwo i stabilność łączą się w kontroli zasobów. Jedno konto może wpłynąć na każde inne, nawet bez włamywania się do ich plików, po prostu wyczerpując procesor, pamięć, limity procesów, miejsce na dysku lub liczbę i-węzłów. Limity zasobów sprawiają, że skok ruchu, błędne zapytanie lub przypadkowa pętla obciążają tylko konto, które je spowodowało.

Korzystaj z mechanizmów obsługiwanych przez Twoje środowisko Linux, takich jak limity procesów, ustawienia pul PHP-FPM, przydziały miejsca na dysku i systemowe grupy kontrolne cgroups. Przed ustaleniem wartości monitoruj rzeczywiste zużycie zasobów. Zbyt niski limit może zakłócić prawidłowy ruch w sklepie internetowym, importy w tle lub tworzenie kopii zapasowych. Limit ustawiony zbyt wysoko nie jest zbyt dużym ograniczeniem.

W miarę możliwości monitoruj dla każdego konta co najmniej obciążenie procesora, wykorzystanie pamięci, użycie dysku, wykorzystanie i-węzłów, liczbę procesów, nieudane logowania i ilość wysyłanej poczty. Monitorowanie w czasie rzeczywistym zmienia stwierdzenie „serwer działa wolno” w konkretną odpowiedź: który użytkownik, który proces i kiedy się to zaczęło.

Dodaj mechanizmy ograniczające skutki problemów, ale nie myl ich z rozwiązaniem​

Środowiska chroot, kontenery i wirtualizacja mogą zapewnić silniejsze granice między użytkownikami. Kontenery są szczególnie przydatne, gdy klienci potrzebują niestandardowych środowisk uruchomieniowych, zależności lub kontroli na poziomie usługi, które w przeciwnym razie mogłyby powodować konflikty w jednym systemie operacyjnym. Maszyny wirtualne zapewniają jeszcze silniejszą separację, ale wiążą się z większymi kosztami operacyjnymi.

Te narzędzia są pomocne, ale nie zastępują prawidłowych uprawnień, instalowania poprawek ani bezpiecznego zarządzania danymi uwierzytelniającymi. Kontener działający jako root z zapisywalnym punktem montowania hosta nie zapewnia bezpiecznej granicy między użytkownikami. Podobnie więzienie chroot może ograniczyć widoczny dostęp do systemu plików, ale nie musi powstrzymać każdego problemu na poziomie aplikacji. Wybierz warstwę odpowiadającą poziomowi ryzyka i starannie ją skonfiguruj.

Praktyczna lista kontrolna izolacji​

Przed dodaniem nowego konta hostingowego sprawdź, czy spełniono następujące podstawowe wymagania:

  • Konto ma własnego użytkownika systemu Linux, katalog domowy, pliki witryny, dzienniki i ścieżki plików tymczasowych.
  • PHP lub inne środowisko uruchomieniowe aplikacji działa w kontekście tego użytkownika, a nie współdzielonej tożsamości usługi.
  • Konto ma oddzielne dane uwierzytelniające do bazy danych, z dostępem wyłącznie do własnej bazy.
  • Własność plików i uprawnienia uniemożliwiają odczyt i zapis między kontami.
  • Dostęp do SSH, SFTP, zadań cron i kopii zapasowych oraz limity zasobów są przyznane i skonfigurowane dla konkretnego konta.

Panel sterowania powinien jasno pokazywać te granice, zamiast ukrywać je za serwerowym żargonem. FASTPANEL pomaga administratorom zarządzać oddzielnymi kontami, domenami, bazami danych i aktywnością serwera z jednego przejrzystego obszaru roboczego, dzięki czemu łatwiej utrzymać prawidłową izolację wraz z rozwojem serwera.

Kontynuuj kontrole po konfiguracji​

Izolacja nie jest zadaniem, które wykonuje się raz i o nim zapomina. Nowe wtyczki, skrypty migracyjne, ręczne zmiany uprawnień i pospieszne poprawki pomocy technicznej mogą z czasem ją osłabić. Po migracji witryny sprawdź własność konta, wyszukaj pliki z prawem zapisu dla wszystkich, usuń nieaktywne konta użytkowników, zainstaluj aktualizacje zabezpieczeń i przetestuj kopie zapasowe, nie przyznając procesom tworzenia kopii zapasowych niepotrzebnego dostępu do każdego konta.

Najlepsza konfiguracja to taka, którą zespół potrafi zrozumieć i utrzymać pod presją. Wyznacz każdemu użytkownikowi jasne granice, stosuj wyjątki rzadko i je dokumentuj, a serwerowi powierz cichą pracę polegającą na tym, by zły dzień jednej witryny nie stał się problemem wszystkich.