ZARZąDZANIE HOSTINGIEM (DIRECTADMIN) • 5 MIN READ

Separacja domen (open_basedir) w DirectAdmin

Jak włączyć separację domen w IQHost. Funkcja open_basedir izoluje pliki każdej domeny — jeśli jedna strona zostanie zhakowana, atakujący nie zobaczy plików pozostałych. Konfiguracja w pluginie DirectAdmin + .htaccess.

Zespół IQHost 14 maj 2026 5m read
#DirectAdmin #IQHost #bezpieczeństwo #hosting

Separacja domen w IQHost to mechanizm open_basedir — dyrektywa bezpieczeństwa PHP ograniczająca dostęp skryptów do plików spoza katalogu danej domeny. Mówiąc prosto: jeśli atakujący włamie się na blog.pl na Twoim koncie, nie zobaczy plików ze sklep.pl ani z firma.pl — każda domena działa we własnym „sandboksie".

Co zyskasz

  • Włączysz izolację open_basedir dla całego konta lub wybranych domen.
  • Zrozumiesz różnicę między separacją plików (open_basedir) a izolacją procesów (CloudLinux LVE).
  • Skonfigurujesz dodatkowe katalogi w open_basedir przez .htaccess.
  • Rozwiążesz typowe błędy: open_basedir restriction in effect.

Wymagania wstępne

  • Konto IQHost z DirectAdmin.
  • Co najmniej dwie domeny na koncie (dla jednej domeny separacja nic nie zmienia).

Wskazówka

Dwa poziomy izolacji w IQHost. CloudLinux LVE izoluje procesy (CPU/RAM/IO per konto klienta — chroni przed sąsiadami). open_basedir izoluje pliki (PHP per domena — chroni jedną stronę przed drugą na tym samym koncie). Pierwsze jest zawsze włączone systemowo; drugie włączasz w pluginie Domain Protection.

Krok 1: Otwórz Zarządzanie separacją domen

Dodatkowe funkcje → Zarządzanie separacją domen (plugin Domain Protection). URL: /evo/plugin?src=%2FCMD_PLUGINS%2Fdomain_protection.

Strona Zarządzanie separacją domen w DirectAdmin

Plugin pokazuje listę domen na Twoim koncie z aktualnym stanem open_basedir per domena.

Krok 2: Włącz/wyłącz separację globalnie lub per domena

Pełna strona Zarządzanie separacją domen z opcjami globalnymi i per domena

Dwa poziomy konfiguracji:

  • Globalnie (dla całego konta) — jeden przełącznik włącza/wyłącza open_basedir dla wszystkich domen na koncie.
  • Per domena (override) — możesz dla pojedynczej domeny wymusić inny stan niż globalny (np. globalnie ON, ale legacy.pl ma WYŁĄCZONE bo działa stary skrypt wymagający dostępu do katalogów spoza domeny).

Klik Zapisz po dokonaniu zmian.

::: callout warn Zmiana działa od razu dla nowych żądań HTTP. Skrypty już uruchomione (np. długie cron) działają na starych regułach do końca.

Krok 3: Co konkretnie blokuje open_basedir

Po włączeniu separacji PHP w domenie mojafirma.pl może czytać/zapisywać pliki tylko w:

  • /home/host36592/domains/mojafirma.pl/ (sama domena i wszystkie podkatalogi)
  • /tmp (katalog tymczasowy systemu — zwykle dozwolony)

Próby dostępu do innych ścieżek (np. /home/host36592/domains/inna-domena.pl/) zwracają błąd:

Warning: open_basedir restriction in effect.
File(/home/host36592/domains/inna-domena.pl/wp-config.php)
is not within the allowed path(s)

To dokładnie to czego chcemy — atakujący nie zobaczy wp-config.php z innej domeny.

Krok 4: Dodaj dodatkowe katalogi przez .htaccess (opcjonalne)

Jeśli legalnie potrzebujesz dostępu do katalogu spoza domeny (np. wspólna biblioteka PHP):

  1. Menedżer Plików → katalog public_html domeny
  2. Otwórz / utwórz plik .htaccess
  3. Dodaj:
php_admin_value open_basedir "/home/host36592/domains/mojafirma.pl:/home/host36592/shared_libs:/tmp"
  • Ścieżki rozdziel dwukropkiem : (bez spacji)
  • Pierwszy katalog: sama domena
  • Drugi: dodatkowy katalog (np. wspólne biblioteki)
  • Trzeci: /tmp (zwykle wymagany)

::: callout warn W niektórych konfiguracjach zmiana open_basedir przez .htaccess może być zablokowana (zależnie od trybu PHP — mod_php czy LSPHP). Wtedy: ticket do supportu IQHost.

Krok 5: Test po włączeniu

Po zmianie sprawdź czy strona nadal działa:

  1. Otwórz każdą domenę w przeglądarce (https://mojafirma.pl, https://blog.pl, etc.)
  2. Otwórz logi błędów w DA: Site summary & logserror log per domena
  3. Szukaj open_basedir restriction

Jeśli widzisz takie błędy — coś musi mieć dostęp do katalogu spoza domeny. Albo dodaj ten katalog (krok 4), albo wyłącz separację dla tej domeny.

Typowe scenariusze

Współdzielona biblioteka PHP

Masz katalog /home/host36592/lib/ z funkcjami PHP używanymi przez 3 sklepy:

# .htaccess w public_html każdej domeny korzystającej
php_admin_value open_basedir "/home/host36592/domains/sklep1.pl:/home/host36592/lib:/tmp"

Katalog z mediami współdzielony

Sklep i blog dzielą katalog z obrazkami /home/host36592/media/:

php_admin_value open_basedir "/home/host36592/domains/sklep.pl:/home/host36592/media:/tmp"

Aplikacja PHP wymaga /var/www (rzadkie)

Zwykle błąd — aplikacja źle skonfigurowana. Najpierw sprawdź dokumentację aplikacji. Jeśli faktycznie wymaga: ticket do supportu z konkretnym przypadkiem.

Przykłady dla popularnych aplikacji

Większość aplikacji działa bez problemu z domyślnym open_basedir (tylko katalog domeny + /tmp). Niżej rzadkie wyjątki:

Aplikacja Wymaga dodatkowych katalogów?
WordPress (czysty + popularne pluginy) Nie. Domyślny open_basedir wystarcza.
WordPress + WP All Import (import z pliku) Zwykle nie — wybierz upload przez admin
PrestaShop / WooCommerce Nie
Joomla Nie
Drupal Nie
Magento Zwykle nie, czasem /var/cache z absolute path
Custom legacy app Sprawdzaj logi

Najczęstsze problemy

1. „Po włączeniu separacji strona pokazuje błąd 500"

Sprawdź error log domeny:

  • Informacje o systemie i Pliki → Site summary & logs → wybierz domenę → error log
  • Szukaj open_basedir restriction in effect
  • Komunikat pokaże dokładną ścieżkę próbowaną przez skrypt

Rozwiązanie: dodaj tę ścieżkę do .htaccess (krok 4) lub przerzuć plik do katalogu domeny.

2. „WordPress + plugin XYZ przestał działać"

Niektóre pluginy próbują pisać do katalogów spoza WP (rzadko, ale się zdarza). Sprawdź dokumentację pluginu. Najczęstsza poprawka: wymuś katalog cache wewnątrz domeny (wp-content/cache/ zamiast /tmp/xyz).

3. „Mam tylko jedną domenę — separacja ma sens?"

Nie. open_basedir izoluje między domenami. Z jedną domeną nie ma czego separować. Włącz dopiero gdy dodasz drugą domenę.

4. „Czy spowolni stronę?"

Wpływ na wydajność jest pomijalny (~1% overhead na request). Bezpieczeństwo wielokrotnie przewyższa koszt.

5. „Czy mogę włączyć tylko dla konkretnej domeny?"

Tak. W pluginie zaznacz checkbox dla wybranej domeny i Zapisz. Pozostałe domeny działają bez separacji.

6. „Skąd wiem, czy separacja jest WŁĄCZONA?"

Plugin Zarządzanie separacją domen pokazuje aktualny status. Alternatywnie sprawdź skrypt PHP:

<?php
echo ini_get('open_basedir');
// pusty = wyłączone, ścieżki = włączone

7. „Otrzymuję open_basedir w PHP CLI (cron)"

Skrypty cron działają jako proces użytkownika i mają inne open_basedir. Sprawdź Zadania Cron — komendy w cron powinny mieć dostęp do wszystkich katalogów konta (nie ograniczone per domena).

open_basedir w PHP Selector — ostrzeżenie

W Dodatkowe funkcje → Select PHP version → Options zobaczysz pole open_basedir. NIE zmieniaj go tam — wartości w PHP Selector są często ignorowane przez nasz system. Głównym i jedynym narzędziem zarządzania separacją w IQHost jest plugin Domain Protection (krok 1).

Słowniczek

  • open_basedir — dyrektywa PHP ograniczająca dostęp do katalogów (filesystem isolation).
  • Sandbox — izolowane środowisko, w którym aplikacja działa bez wpływu na inne.
  • Domain Protection — plugin DirectAdmin w IQHost zarządzający open_basedir.
  • CloudLinux LVE — osobny mechanizm izolacji procesów (CPU/RAM/IO per konto). Współistnieje z open_basedir.

Related

Feedback

Czy ten artykuł pomógł?

Potwierdź