--=REKLAMA=--

Bezpieczeństwo - lista kontrolna 2: Hosting i ustawienia serwera

Z Joomla!WikiPL

Wersja Zwiastun (dyskusja | edycje) z dnia 10:24, 25 kwi 2011

(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)

Wybór kwalifikowanego dostawcy usług internetowych

Bardzo ważna decyzja

Prawdopodobnie żadna inna decyzja nie jest bardziej krytyczna dla bezpieczeństwa strony niż wybór dostawcy i serwera. Ze względu na szeroki zakres opcji serwerów i ich konfiguracji, nie jest możliwe opracowanie listy wyczerpującej wszystkie sytuacje. Sprawdź tych solidnych, zalecanych dostawców, którzy w pełni spełniają wymagania dotyczące bezpieczeństwa dla typowej strony Joomla!. (FAQ)


Ryzyko serwerów współdzielonych

Jeżeli nie możesz przeznaczyć na budowę i utrzymanie witryny większego budżetu, a jej zawartość nie zawiera danych poufnych, zapewne wykupisz konto na serwerze współdzielonym. Powinieneś jednak zdawać sobie sprawę z ryzyka takiego rozwiązania. Większość podanych niżej zaleceń dotyczy serwerów współdzielonych.

Unikaj niewłaściwych konfiguracji serwera

Dla uświadomienia sobie sytuacji przeczytaj ten raport o tysiącach witryn, które zezwalają Google indeksować zawartość php.info(). Nie popełnij tego błędu na swojej stronie! Raport zawiera alarmujące statystyki ilości stron używających zaniechanych już dziś ustawień jak register_globals ON, lub pracy bez skonfigurowania open_basedir. Przy okazji, jeżeli pojęcia php.ini czy register_globals są Ci obce, prawdopodobnie nie jesteś jeszcze gotowy zarządzać bezpieczeństwem swojej strony.

Konfiguracja serwera Apache

Stosuj .htaccess

Zablokuj typowe próby włamań za pomocą lokalnego pliku serwera - .htaccess. Opcja ta nie jest włączona na wszystkich serwerach. Sprawdź u swojego dostawcy jeżeli napotkasz problemy. Stosując .htaceess możesz zabezpieczyć hasłem ważne katalogi, takie jak np. /administrator, ograniczyć do nich dostęp przez określenie adresu IP, a w zależności od ustawień Twojego serwera będziesz w stanie przełączyć się z PHP4 na PHP5.
Joomla! jest dostarczany z prekonfigurowanym plikiem .htaccess, ale to TY musisz zdecydować o jego użyciu. Jest to plik w głównym katalogu Joomla! o nazwie .htaccess.txt, i by go zastosować, musisz zmienić jego nazwę na .htaccess.
Rozważ zastosowanie zasady najmniejszego przywileju dla użytkowników, używając takich narzędzi jak PHPsuExec, php_suexec czy suPHP. (Uwaga: Są to zaawansowane metody które, wymagają zgody i współpracy z administratorem serwera. Opcje te są włączane lub wyłączane w ustawieniach całego serwera i nie są dostępne dla użytkowników serwerów współdzielonych.)

Zobacz

Prawa dostępu i phpsuexec
Permissions under phpsuexec - w języku angielskim;

Stosuj mod_security - zaporę aplikacji sieciowych serwera Apache

Skonfiguruj filtry mod_security i mod_rewrite aby zablokować ataki PHP. Zajrzyj tu Wyniki wyszukiwania w Google dla nazwy mod_security i tu Wyniki wyszukiwania w Google dla nazwy mod_rewrite. (Uwaga: Są to zaawansowane metody, które wymagają zgody i koordynacji z administratorem serwera. Opcje te są włączane lub wyłączane w ustawieniach całego serwera i nie są dostępne w serwerze współdzielonym.)

Konfiguracja bazy MySQL

Zabezpiecz bazę danych

Upewnij się, że konta MySQL są utworzone z ograniczonym dostępem. Domyślna instalacja MySQL zezwala na dostęp do bazy anonimowym użytkownikom z tego samego lokalnego serwera. Konto z ograniczonym dostępem przyznaje ograniczone przywileje określonym użytkownikom. (Zobacz MySQL Podręcznik) (Uwaga: To zalecenie dotyczy administratorów własnych serwerów jak np. serwery dedykowane. Użytkownicy serwerów współdzielonych są zależni od dostawców hostingu, którzy ustawiają właściwy poziom bezpieczeństwa bazy danych.)

Konfiguracja PHP

Zrozum jak działa PHP

Zapoznaj się z regułami pracy z plikiem php.ini, i czym ustawiana jest konfiguracja PHP (dyrektywy). Przestudiuj oficjalną listę dyrektyw php.ini na http://www.php.net, oraz strukturę dobrze udokumentowanego domyślnego pliku php.ini zawartego w każdej instalacji PHP. Tutaj znajdziesz najnowszy domyślny plik php.ini na oficjalnej stronie PHP.

Używaj PHP5

Obecnie wykorzystywane są oba wydania PHP4 i PHP 5, i często oba są dostępne na serwerach. Zanim PHP4 wyjdzie z użytku zaktualizuj swoje skrypty klienta do PHP5. Nie martw się o kod Joomla!; wszystkie obecne wersja są kompatybilne z PHP 5. (Patrz PHP News)

Stosuj lokalne pliki php.ini

Na serwerach współdzielonych nie możesz edytować głównego pliku php.ini, ale być może będziesz mógł dodać plik lokalny tego typu do określonych katalogów. W tym celu musisz po prostu skopiować plik php.ini do każdego podkatalogu, który wymaga specyficznego ustawienia PHP. Na szczęście ten zestaw skryptów może za Ciebie wykonać tę trudną pracę.
Zapamiętaj kilka ważnych rzeczy.
  1. Lokalne pliki php.ini dadzą efekt tylko, jeżeli Twój serwer jest odpowiednio skonfigurowany. Ta uwaga dotyczy także pliku php.ini umieszczonego w Twoim głównym katalogu. Będziesz mógł przetestować, czy ten plik wpływa na Twoją stronę przez zmiany ustawień dyrektyw w lokalnym pliku php.ini.
  2. Lokalne pliki php.ini wpływają tylko na pliki o rozszerzeniu .php, które są umiejscowione w tym samym katalogu (albo wstawiane tam dyrektywami included() lub required()). Oznacza to, że zasadniczo istnieją tylko dwa katalogi, w których chciałbyś umieścić "php.ini". Są to: katalog główny, gdzie zlokalizowany jest plik Joomla! - index.php, obsługujący stronę, oraz katalog administrator, gdzie zlokalizowany jest plik index.php obsługujący panel administratora. Inne katalogi, które nie zawierają plików wywoływanych z sieci, nie potrzebują lokalnych plików php.ini.
  3. Jeżeli plik php.ini jest w każdym katalogu, prawdopodobnie umieściły je tam jakieś skrypty. Jeśli nie zamierzasz tych plików wykorzystywać, prawdopodobnie powinieneś się ich pozbyć, ale pamiętaj o pkt 2, martwić musisz się tylko o pliki php.ini w katalogu głównym i katalogu administratora.

Stosuj disable_functions

Stosuj dyrektywę disable_functions, aby zablokować użytkownikom możliwość uruchamiania niebezpiecznych funkcji PHP, które nie są potrzebne dla Twojej witryny. Niżej podajemy typowy zestaw ustawień dla strony Joomla!:
     disable_functions = show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open

Używaj open_basedir

Dyrektywa open_basedir powinna być włączona i prawidłowo skonfigurowana. Dyrektywa ta ogranicza dostęp do określonego katalogu, co skutkuje filtrowaniem plików, które mogą być otwarte przez PHP. Jeżeli na serwerze mamy włączoną obsługę open_basedir i safe_mode, priorytet mają zabezpieczenia przekazywane przez open_basedir.
Filtrem open_basedir jest prefix, a nie nazwa katalogu. Oznacza to, że open_basedir = /dir/incl zezwala na dostęp do /dir/include i /dir/incls jeżeli takie istnieją. Ograniczenie dostępu tylko do jednego wyspecyfikowanego katalogu należy zakończyć slashem. Więcej informacji PHP Security and Safe Mode Configuration Directives.
   open_basedir = /home/users/you/public_html
W niektórych konfiguracjach, co najmniej w PHP 4.4.8, użycie kończącego ukośnika dla ograniczenia dostępu do tylko jednego wyspecyfikowanego katalogu, może spowodować przy zapisywaniu globalnej konfiguracji wygenerowanie następującego ostrzeżenia Joomla!: JFolder::create: Infinite loop detected. Ostrzeżenie jest generowane, ponieważ funkcja PHP file_exists() nie zadziała, np. kiedy zapytanie czy /home/user/public_html/joomla_demo istnieje i open_basedir jest ustawione /home/user/public_html/joomla_demo/ (zwróć uwagę na kończący slash).
Dodatkowo, jeżeli open_basedir jest włączona, konieczne może być ustawienie dyrektywy konfiguracji PHP upload_tmp_dir, na ścieżkę która wchodzi w zakres open_basedir, lub alternatywnie dodać ścieżkę upload_tmp_dir do open_basedir używając odpowiedniego seperatora ścieżki dla systemu hosta.
   open_basedir = /home/users/you/public_html:/tmp
PHP użyje tymczasowego katalogu systemu kiedy upload_tmp_dir nie jest włączony lub kiedy jest ustawiony, ale katalog nie istnieje, dlatego konieczne może być dodanie jej do open_basedir (jak wyżej), aby uniknąć błędów ładowania wewnątrz Joomla!.

Ustaw magic_quotes_gpc

Ustaw dyrektywę magic_quotes_gpc zgodnie z wymaganiami dla Twojej strony. Dla Joomla! 1.0.x zaleca się jej włączenie (ON), aby zabezpieczyć się przed źle napisanymi rozszerzeniami autorstwa osób trzecich. Najbezpieczniejszą metodą jest jednak wyłączenie magic_quotes_gpc i unikanie instalowania takich rozszerzeń.
Joomla! 1.5 ignoruje to ustawienie i działa dobrze w każdej sytuacji. Więcej na PHP Manual, Chapter 31. Magic Quotes.
     magic_quotes_gpc = 1

Nie używaj safe_mode

Unikaj stosowania dyrektywy safe_mode. To ważne, ale niekompletne rozwiązanie, przeznaczone dla poważniejszych problemów, które tworzy fałszywe poczucie bezpieczeństwa. Zobacz oficjalną stronę PHP dla bliższego zaznajomienia się z tematem.
    safe_mode = 0

Nie używaj register_globals

Automatyczne rejestrowanie zmiennych globalnych było prawdopodobnie najgłupszą decyzją projektantów PHP. Dyrektywa ta decyduje, czy rejestrować jako globalne zmienne EGPCS (Environment, GET, POST, Cookie, Server), w wyniku czego stają się one dostępne dla wszystkich skryptów PHP. W tej sytuacji łatwo można je nadpisać swoją własną zmienną - jeżeli nie zachowasz ostrożności. Na szczęście deweloperzy PHP zdali sobie sprawę z błędu i wycofali tę 'cechę'.
Jeżeli strona została zbudowana na serwerze współdzielonym, którego administrator nalega, by register_globals była włączona, powinieneś być bardzo zmartwiony. Chociaż zwykle będziesz mógł wyłączyć register_globals dla Twojej strony za pomocą lokalnego pliku php.ini, niewiele to zmieni, ponieważ inne strony na tym samym serwerze pozostaną narażone na ataki, które mogą dosięgnąć i Twojej strony. Więcej na ZEND Chapter 29. Using Register Globals.

Wyłącz allow_url_fopen

Ta funkcja włącza możliwość obsługi plików ze zdalnych serwerów przez podanie adresu URL (tzw. wraper, albo protokół obsługi lub interfejs). Domyślne interfejsy umożliwiają dostęp do zdalnych plików z wykorzystaniem protokołów FTP lub HTTP. Dyrektywa ta rozszerza standardowe możliwości. Niektóre rozszerzenia takie jak np. zlib mogą dodawać swoje własne interfejsy. UWAGA: ze względów bezpieczeństwa wyłączenie tej funkcji jest możliwe tylko w php.ini.
     allow_url_fopen = 0

Proces kopiowania i odtwarzania strony

Najważniejsza zasada!

Powinieneś być w stanie, w każdym momencie, przywrócić stronę do stanu prawidłowego działania przez regularne przeprowadzanie kopiowania i odtwarzania systemu poza serwerem, na którym zainstalowana jest strona. Upewnij się że prawidłowo przeprowadziłeś te testy zanim zrobisz je na serwerze strony. To jest najlepszy sposób (i często jedyny) aby odtworzyć stronę z takich katastrof jak:
  1. Włamanie na stronę lub jej zniszczenie.
  2. Uszkodzenie strony z powodu błędu w aktualizacji.
  3. Awarii sprzętu, takich jak awarie dysków, utrata zasilania, kradzież w serwerowni itp.
  4. Działania administracyjne lub karne władz (zdarzają się częściej niż myślisz).
  5. Konieczność szybkiego przeniesienia się na inny serwer lub do innego dostawcy.

Wybierz listę kontrolną

  1. Lista kontrolna 1: Zanim rozpoczniesz
  2. Lista kontrolna 2: Hosting i ustawienia serwera
  3. Lista kontrolna 3: Testowanie i rozbudowa
  4. Lista kontrolna 4: Konfiguracja Joomla!
  5. Lista kontrolna 5: Administrowanie witryną
  6. Lista kontrolna 6: Odtwarzanie witryny
© Ten materiał jest dokładnym albo swobodnym tłumaczeniem artykułu http://docs.joomla.org/Security_Checklist_2_-_Hosting_and_Server_Setup udostępnionego na licencji JEDL na witrynie: Joomla! Official Documentation Wiki

Dziękujemy za wkład

» Stefan Wajda [zwiastun],