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.
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_basedirdla 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_basedirprzez.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.
Plugin pokazuje listę domen na Twoim koncie z aktualnym stanem
open_basedirper domena.
Krok 2: Włącz/wyłącz separację globalnie lub per domena
Dwa poziomy konfiguracji:
- Globalnie (dla całego konta) — jeden przełącznik włącza/wyłącza
open_basedirdla wszystkich domen na koncie.- Per domena (override) — możesz dla pojedynczej domeny wymusić inny stan niż globalny (np. globalnie ON, ale
legacy.plma 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.plmoż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.phpz 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):
- Menedżer Plików → katalog
public_htmldomeny- Otwórz / utwórz plik
.htaccess- 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_basedirprzez.htaccessmoż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:
- Otwórz każdą domenę w przeglądarce (
https://mojafirma.pl,https://blog.pl, etc.)- Otwórz logi błędów w DA: Site summary & logs → error log per domena
- Szukaj
open_basedir restrictionJeś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ł?

