====== Bezpieczeństwo ====== DokuWiki jest aplikacją sieciową, często używaną na serwerach publicznych, dostępnych przez Internet. Oznacza to większe ryzyko ataku przez złośliwych ludzi, niż na przykład lokalnej aplikacji w systemie stacjonarnym. DokuWiki jest rozwijana z myślą o bezpieczeństwie. Próbujemy odnaleźć równowagę pomiędzy przyjaznością i bezpieczeństwem, jednak preferujemy zabezpieczenie gdy nie można uzyskać satysfakcjonującego kompromisu. Ta strona powinna dać ci pogląd na jakie aspekty powinieneś zwrócić uwagę by upewnić się, że DokuWiki jest bezpieczna. ===== Raportowanie i powiadomienia ===== Gdy odkryjesz problem w zabezpieczeniach, powiadom nas o tym. Preferowane sposoby to: * Wypełnij [[bugs|raport błędu]] * Wyślij wiadomość email na [[mailinglist|listę mailową]] * Wyślij prywatną wiadomość na adres [[andi@splitbrain.org]] Preferujemy pierwsze dwie drogi, chyba że jest to bardzo poważny błąd, którego upublicznienie przed udostępnieniem poprawki mogłoby narazić instalacje DokuWiki na całym świecie. Wszystkie poprzednie zgłoszenia można obejrzeć w [[http://bugs.dokuwiki.org/index.php?tasks=all&project=1&type=1&cat=5&status=all&perpage=20|systemie śledzenia błędów]]. W zależności od od dotkliwości znalezionego problemu bezpieczeństwa zostanie on poprawiony w kolejnej wersji (przy zgłoszeniach naprawdę niewielkiej wagi) lub zostanie wydana wersja poprawkowa. W tym drugim przypadku użytkownicy zostaną poinformowani przez mechanizm [[update check|sprawdzenia aktualizacji]]. Powinieneś **zawsze** pracować na najaktualniejszej wersji DokuWiki jako że na niej są wydawane poprawki bezpieczeństwa dla starszych wersji. ===== Bezpieczeństwo dostępu przez sieć ===== DokuWiki przechowuje dane konfiguracji i stron w plikach. Pliki te nie mogą być dostępne bezpośrednio z sieci. Dystrybucyjna paczka archiwum zawiera zestaw plików ''.htaccess'', który często wskazuje serwerowi sieciowemu Apache blokowanie dostępu do pewnych folderów. **Jeśli n ie używasz serwera sieciowego Apache lub twój Apache nie używa plików ''.htaccess'' musisz ręcznie zabezpieczyć instalację** Następujące foldery **nie** mogą być dostępne z sieci: * ''data'' * ''conf'' * ''bin'' * ''inc'' (nie jest niebezpieczny, jeśli dostępne, ale jednak) Jeśli potrzebujesz sprawdzić uprawnienia dostępu, spróbuj wejść na ''%%http://yourserver.com/dokuwiki/data/pages/wiki/dokuwiki.txt%%''. Nie powinieneś uzyskać dostępu do pliku w ten sposób. Jeśli foldery nie są odpowiednio zabezpieczone, przeczytaj kolejne sekcje by dowiedzieć się, jak to zrobić. ==== Blokowanie dostępu do folderów w Apache ==== Najprostszym sposobem jest włączenie obsługi ''.htaccess'' w konfiguracji Apache. Przejrzyj [[http://httpd.apache.org/docs/2.2/howto/htaccess.html|Samouczek .htaccess Apache]]. DokuWiki dostarczana jest już z odpowiednio skonfigurowanymi plikami .htaccess. Zawartość pliku .htaccess blokującego całkowicie dostęp do folderu powinna wyglądać jak następuje: order allow,deny deny from all **Obserwacja** : Podczas używania apache2 na Ubuntu, .htaccess nie działa ! Wydaje się, że Apache2 ogólnie, lub być może tylko w szczególności wraz z Ubuntu, jest konfigurowany trochę inaczej niż Apache1.x. W ///etc/apache2/sites-available// powinieneś zmienić plik //default// (lub plik //default-ssl// jeśli używasz https zamiast http) Znajdziesz tam: NameVirtualHost * ServerAdmin admin@site.com DocumentRoot /var/www/ Options FollowSymLinks AllowOverride None Options Indexes FollowSymLinks MultiViews AllowOverride none Order allow,deny allow from all Domyślnie dla AllowOverride w jest wpis **none**, powinien być **all** ///etc/init.d/apache2 reload// by odświeżyć konfigurację apache, a pliki .htaccess powinny zadziałać. (Przejrzyj http://ubuntuforums.org/showthread.php?t=47669 by poznać cały wątek) ---- Innym sposobem jest użycie dyrektywy ''LocationMatch'' wewnątrz definicji ''VirtualHost'' - jest to trochę bardziej efektywne niż ''.htaccess''. Tuż poniżej dyrektywy ''Directory'' dodaj: Order allow,deny Deny from all Satisfy All //Mimo wszystko przejrzyj sekcję "What to use When" w [[http://httpd.apache.org/docs/2.0/sections.html#file-and-web]] by dowiedzieć się że dyrektywy "Location" nie powinny być używane do ochrony obiektów systemu plików, a tylko wirtualne (np tworzone przez bazy danych) ścieżki. IMO jeśli .htaccess nie jest dostępny albo wystarczający, umieszczenie specyficznych dla folderów ograniczeń bezpośrednio w pliku konfiguracyjnym hostów będzie będzie najbezpieczniejszym podejściem. Opisane w [[http://ada.adrianlang.de/dokuwiki-php-execution#solutions_in_the_configuration]] wydaje się poprawnym podejściem - jednak ten dokument powinien być "kanoniczny".// ==== Deny Directory Access in IIS ==== Access to the mentioned directories can be disabled in IIS' configuration settings. - Open the configuration tool: Start -> Settings -> Control Panel -> Administrative Tools -> Internet Information Services - Navigate to the directory you want to protect: Local Computer -> Web Sites -> Default Web Site → //path to directory// - Right-Click the folder and chose Properties -> Directory Security -> IP address and domain name restrictions -> Edit... - Choose "By default, all computers will be: Denied access" In IIS7: - select "IIS Request Filtering" - go to the "URL" tab - click on "Deny Sequence" - enter "/data" in the popup box Repeat for "/data/media" and choose "Always Allow" (otherwise your images and other won't be visible) Note: By default, the Management Console snap-in for Internet Information Services 7 does not have UI access to "IIS Request Filtering" section. However, can be enabled by installing "IIS Administration pack 1.0" by using the [[http://www.microsoft.com/web/downloads/platform.aspx|Web Platform Installer]]. ==== Deny Directory Access in Lighttpd ==== Using a [[http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModRewrite|URL re-write]] you can deny access to the above directories. In your lighttpd.conf file adding the following URL rewrite rule should be sufficient to keep people out. It suppose your Dokuwiki files are installed under http://yourwebsite.tld/dokuwiki/. Don't forget to uncomment ''//"mod_rewrite"//'' in the ''//server.modules//'' section. url.rewrite-once = ( "^/dokuwiki/(data|conf|bin|inc)/+.*" => "/nonexistentfolder" ) Or use ''//"mod_access"//''. More examples available [[http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModAccess|here]]. $HTTP["url"] =~ "^/dokuwiki/(data|conf|bin|inc)/+.*" { url.access-deny = ("") } ==== Blokowanie dostępu do folderów na Nginx ==== Dostęp do powyższych katalogów może zostać wyłączony w sekcji serwera DokuWiki pliku konfiguracyjnego Nginx. W pliku nginx.conf dodaj następującą lokalizację by zapobiec dostępowi do bezpiecznych folderów. location ~ /(data|conf|bin|inc)/ { deny all; } Zalecane jest również zablokowanie dostępu do plików .htaccess: location ~ /\.ht { deny all; } ==== Zmiana nazwy folderu data ==== Zabezpieczenie folderu ''data'' jest najważniejsze. Jeśli nie możesz przenieść folderów poza serwer sieciowy (patrz poniżej) lub nie możesz skonfigurować serwera by zablokować dostęp (patrz wyżej), powinieneś przynajmniej spróbować uczynić trudniejszą do odgadnięcia nazwę folderu z danymi. Aby to zrobić, zmień nazwę folderu data na jakiś tajemniczy (np. długi ciąg znaków z literami i cyframi) i zmień ustawienie opcji [[config:savedir]] w pliku ''conf/local.php''. ==== Przeniesienie folderów poza DocRoot ==== Najbezpieczniejszym sposobem uniknięcia dostępu do wspomnianych folderów jest przeniesienie ich poza tak zwany "Korzeń Dokumentów" Webservera. **__OSTRZEŻENIE:__** Jeśli planujesz użycie [[installer|instalatora]], powinieneś zainstalować wiki wykonując skrypt install.php zanim wykonasz ten krok. Jeśli operacja Przeniesienia Folderów wykonana zostanie wcześniej, wykonanie instalatora nie powiedzie się. === Folder data === - Przenieś folder ''data'' (i całą jego zawartość) poza korzeń dokumentów - Zmień ustawienie [[config:savedir]] by wskazywało nowe położenie folderu ''data''. Na przykład, jeśli folder ''data'' został przeniesiony do ''/home/yourname/data'', dodaj następującą linię do ''conf/local.php'': $conf['savedir'] = '/home/yourname/data/'; === FOlder conf === - Przenieś folder ''conf'' (i całą jego zawartość) poza korzeń dokumentów - Utwórz plik o nazwie preload.php z folderze ''inc'' i wpisz w nim polecenie define ''DOKU_CONF'' wskazując nowe położenie folderu ''conf''. Na przykład, jeśli folder ''conf'' został przeniesiony do ''/home/yourname/conf'',utwórz następujący ''inc/preload.php'': === Folder bin === Foder bin zawiera narzędzia [[CLI]]. Jeśli nie masz dostępu do powłoki na serwerze, możesz po prostu usunąć folder i jego zawartość. W przeciwnym przypadku po prostu przenieś folder poza korzeń dokumentów. Nie jest potrzebna żadna dalsza konfiguracja. === Folder inc === Nie ma obecnie prostego sposobu przeniesienia tego folderu poza korzeń dokumentów. Jednak ponieważ nie zawiera on żadnych poufnych danych, nie jest wart wysiłku włożonego w jego przeniesienie. ===== Ustawienia konfiguracji DokuWiki ===== DokuWiki zawiera kilka ustawień konfiguracyjnych, które mają wpływ na różne aspekty bezpieczeństwa instalacji. Proszę zapoznać się z dokumentacją każdego ustawienia, aby dowiedzieć się za co odpowiadają i jakie są sugerowane ustawienia. * [[config:allowdebug]] -- wyłączenie wyjścia diagnostycznego, aby uniknąć wycieku informacji o systemie :!: * [[config:fmode]], [[config:dmode]] -- ustawienie uprawnień dla plików utworzonych w DokuWiki, a także odczytu informacji na temat konfiguracji [[permissions|uprawnień]] * [[config:fetchsize]] -- konfiguracja buforowania danych zewnętrznych * [[config:fullpath]] -- pokazywanie pełnych nazw ścieżek do stron * wszystkie [[auth|ustawienia autoryzacji]] * [[config:usewordblock]] -- zapobieganie spamowi przy użyciu blacklist * [[config:mailguard]] -- unikanie robotów zbierających adresy mail * [[config:iexssprotect]] -- ochrony przed problemem XSS w Internet Explorerze * [[config:htmlok]] -- włączenie HTML * [[config:phpok]] -- właczenie PHP * [[config:hidepages]] -- ukrycie niektórych stron w indeksie i wyszukiwaniu * [[config:safemodehack]] -- obejścia ograniczenia trybu bezpiecznego ===== Zabezpieczenia wtyczek ===== DokuWiki posiada [[plugins|wiele wtyczek dodanych przez społeczność]]. Wtyczki dodają nową funkcjonalność do DokuWiki przez dopisanie nowego kodu. Oznacza to kod posiadający praktycznie dowolny dostęp do serwera. Ponadto wtyczki są rozpowszechniane oddzielnie od DokuWiki w zupełnie doraźny sposób. Nie poświęca im się w tym samym stopniu uwagi i nie przegląda, w jakim podlega rdzeń DokuWiki. Dlatego konieczne są środki bezpieczeństwa przed zainstalowaniem wtyczki. Oto kilka wskazówek pomagających w wyborze wtyczki do zainstalowania. * Jeśli możesz, przejrzyj samodzielnie kod źródłowy wtyczki //zanim// ją zainstalujesz. * W przypadku wątpliwości, pytaj na [[mailinglist|liście mailingowej]]. * Wtyczki instalowane są w folderze ''lib'' DokuWiki, który jest dostępny bezpośrednio z zewnątrz. Przejrzyj co zawiera wtyczka i zablokuj odpowiednio dostęp w plikach .htaccess. * Wtyczki są autorstwa twórców nie związanych bezpośrednio z projektem DokuWiki - mogą oni być niedoświadczeni, mieć złe intencje lub może trzymać kod źródłowy wtyczki na serwerze, który został skompromitowany. Uważaj, którym ufasz! * Przejrzyj stronę wtyczki pod kątem wymienionych ostrzeżeń o bezpieczeństwie i aktualizować wtyczkę gdy będą dostępne nowe wydania. Patrz również: [[devel:security#reporting_security_issues|Jak zgłaszać problemy bezpieczeństwa we wtyczkach]]. ===== Lektura dodatkowe ===== Oto kilka wewnętrznych i zewnętrznych stron związanych z bezpieczeństwem. * [[acl|Ustawienia kontroli dostępu]] * [[tips:httpslogin|Wymuszenie logowania przez HTTPS]] * [[install:php|Konfiguracja PHP dla DokuWiki]] * [[tips:clean_acl|Usunięcie reguł ACL dla usuniętych stron]] * {{http://www.apachesecurity.net/download/apachesecurity-ch03.pdf|Bezpieczeństwo Apache - Rozdział 3: Blokowanie PHP}}.((Już nie istnieje; spróbuj [[https://www.feistyduck.com/books/apache-security/]])) * [[http://www.bouthors.fr/wiki/doku.php?id=en:linux:dokuwiki:secu|Jak zupełnie ukryć nieautoryzowane strony]]