====== Kontrola dostępu ====== [[DokuWiki]] -- jak większość **systemów Wiki** -- jest domyślnie otwarty. Każdy może tworzyć, edytować i usuwać strony. Jednak czasami przydałoby się zabezpieczyć dostęp do niektórych lub wszystkich stron. W takim przypadku //Access Control Lists// (ACL) wchodzi do gry. Ta strona powinna dać ci ogólny pogląd na to, jak funkcjonuje ACL w DokuWiki i jak się go konfiguruje. Więcej informacji znajdziesz na --> [[discussion:acl|discussion:acl]] :!: **UWAGA:** ACL DokuWiki jest obecnie standardowo dołączany i powinien być stabilny. Jeśli jednak jesteś zaniepokojony ryzykiem dostępu to twoich informacji w wiki przez nieautoryzowanych użytkowników, nie powinieneś w ogóle umieszczać tych danych w Internecie ... ===== Konfiguracja ===== Aby włączyć ACL w DokuWiki, potrzebujesz co najmniej jednego domyślnego ACL. Po prostu skopiuj przykładowe pliki ''conf/acl.auth.php.dist'' i ''conf/users.auth.php.dist'' odpowiednio do ''conf/acl.auth.php'' i ''conf/users.auth.php'' a logowanie powinno działać. Jeśli dostaniesz komunikat "No ACL setup yet! Denying access to everyone." (ACL nie ustawiony, brak dostępu dla wszystkich) upewnij się, że tekst na początku pliku acl.auth.php czyta acl.auth.php a nie users.auth.php. Musisz ustawić pewne opcje [[config|konfiguracyjne]]. Popatrz na przykład, który możesz dodać do ''local.php'' aby włączyć domyślny tekstowy sposób autoryzacji z publiczna rejestracją: Pamiętaj że wszystkie te opcje konfiguracji mogą być ustawione w menu administracji uprawnieniami. $conf['useacl'] = 1; // to włącza ACL $conf['superuser'] = '@admin'; // admin group is superuser - admin jest grupą superuser Opcja [[config:useacl]] włącza dodatek ACL. Dodatek staje się teraz aktywny, przycisk logowania pojawia się na dole każdej ze stron Wiki i użytkownicy mogą się rejestrować. Opcja [[config:superuser]] określa, kto może zrobić wszystko w DokuWiki (włączając w to dodawanie uprawnień ACL) - może to być pojedynczy użytkownik lub grupa (oznaczona na początku znakiem ''@''). Kiedy instalujesz Dokuwiki od początku, wciśnij przycisk w przeglądarce "Zaloguj", podążaj za linkiem "zarejestruj" i zarejestruj przynajmniej jednego użytkownika. (Jeśli nie widzisz linku rejestracyjnego, masz ustawione niepoprawne uprawnienia do plików conf/users.auth.php conf/acl.auth.php i nie mogą być do nich zapisywane nowe dane) Następnie edytuj ''conf/users.auth.php'' i zmień uprawnienia przynajmniej jednego użytkownia z "user" na "admin". Odtąd powinien pojawiać się dodatkowy przycisk "Administracja" wtedy, gdy jesteś zalogowany jako użytkownik należący do grupy "admin". W tym momencie można włączyć dodatkową cechę bezpieczeństwa. Aby nie pozwolić użytkownikom rejestrować się samodzielnie dodaj 'register' do opcji disableactions: $conf['disableactions'] = 'register'; // użytkownicy nie mogą już rejestrować sami siebie Jeśli jest to zachowanie pożądane, użytkownicy mogą być dodawani tylko przez administratora (albo przez administracyjny interfejs sieciowy albo bezpośrednią edycję ''conf/users.auth.php''). Jest również kilka dodatkowych opcji konfiguracyjnych pozwalających kontrolować inne aspekty ACL, których wartości domyślne zaspokajają życzenia większości administratorów. $conf['autopasswd'] = 1; //Automatyczne generowanie hasła i wysłanie go mailem użytkownikowi $conf['passcrypt'] = 'smd5'; //Użyta metoda szyfrowania (smd5,md5,sha1,ssha,crypt,mysql,my411) $conf['defaultgroup']= 'user'; //Domyślna grupa, do której dodawani są nowi użytkownicy $conf['profileconfirm'] = '1'; //Wymaganie bieżącego hasła by potwierdzić zmiany profilu użytkownika $conf['authtype'] = 'plain'; // backend tekstowy (domyślny) * Zmiana [[config:autopasswd]] na 0 zezwala użytkownikom wskazać hasło w czasie rejestracji. Ma to efekt uboczny usunięcia gwarancji, że użytkownik zarejestrował się podając poprawny własny adres email. * [[config:passcrypt]] określa metodę szyfrowania używaną do przechowywania haseł. * [[config:defaultgroup]] wszyscy nowi użytkownicy zostaną domyślnie dodani do tej grupy. * Ustaw [[config:profileconfirm]] na 0 by zezwolić użytkownikom na zmianę swojego profilu (pełna nazwa, hasło i adres email) bez konieczności potwierdzenia przez wpisanie aktualnego hasła. * DokuWiki może użyć różnych sposobów dostępu do danych użytkowników i grup. Domyślnie używa własnego backendu [[.auth:plain|plaintext]]. Backend jest wybierany przez ustawienie opcji [[config:authtype]]. Przejrzyj stronę [[.auth:backends]] by sprawdzić, jakie opcje są dostępne. ===== Zarządzanie użytkownikami ===== Użytkowników można dodawać, usuwać i modyfikować przy pomocy [[plugin:usermanager|menadżera użytkowników]]. Aby dowiedzieć się, jak ręcznie dodać użytkowników, przejrzyj w dokumentacji opis [[.auth:plain|backendu plain]]. Domyślnie użytkownicy mogą się również rejestrować sami. Zobacz również: [[faq:regdisable|FAQ: Jak wyłączyć możliwość samodzielnej rejestracji użytkowników]] ===== Ograniczenia Dostępu ===== Ograniczenia dostępu mogą być przypisane do [[pagename|stron]] i [[namespaces|przestrzeni nazw]]. Mamy pięć uprawnień: //czytanie//, //zmiana//, //tworzenie//, //przesyłanie plików// i //usuwanie//. Każde wyższe uprawnienie zawiera w sobie wszystkie niższe, z których czytanie jest najniższym, zaś usuwanie najwyższym. Zauważ, że uprawnienia tworzenie, przesyłanie plików i usuwanie mogą być przypisane tylko do przestrzeni nazw. Gdy DokuWiki sprawdza jakie uprawnienia przyznać użytkownikowi, wykorzystuje wszystkie reguły pasujące do nazwy użytkownika lub grup, do których należy. Wykorzystywana jest reguła dająca największe uprawnienia. Sprawdzane są najpierw uprawnienia do strony, następnie wszystkich nadrzędnych przestrzeni nazw aż do odnalezienia pasującej reguły. Aby dodać regułę ograniczającą, przejdź do strony do przyblokowania i przejdź do interfejsu administracji wciskając przycisk ''Administracja'' (dostępny tylko dla [[config:superuser]]). Tam wybierz //Zarządzanie uprawnieniami//. Zostanie wtedy wyświetlona poniższa tabela, pokazując wszystkie ograniczenia istotne dla bieżącej strony. {{wiki:acladmin.png|Przykład ograniczenia ACL}} Ogranicznia dodawane są w pierwszym wierszu tabeli. Musisz wskazać zakres, którym może być sama strona lub jedna z przestrzeni nazw, w których ona leży ((najszersza przestrzeń nazw określana jest znakiem ''*'')). Musisz również wskazać komu chcesz przyznać (lub odebrać) dostęp; może to być użytkownik albo grupa. I na koniec musisz wskazać właściwy poziom uprawnień. Wybierając //żadne// blokujesz całkowicie dostęp użytkownikowi lub grupie do strony lub przestrzeni nazw.. Uwaga: Uprawnienie usuwania dotyczy tylko plików multimedialnych. Strony mogą być usuwane (i odtworzone) przez wszystkich posiadających uprawnienia co najmniej zmiany. Osoba posiadająca uprawnienie przesyłania plików bez usuwania nie może nadpisywać istniejących plików multimedialnych. === Grupy Specjalne === **ALL**. Wszyscy, nawet użytkownicy niezalogowani, są członkami grupy ALL. Możesz użyć tej grupy by zablokować dostęp wszystkim użytkownikom (jako ustawienie domyślne) a następnie poluźniać uprawnienia dla określonych użytkowników. Na przykład, na powyższym zrzucie ekranu, nikt nie ma prawa przesyłania plików poza członkami grupy ''upload''. **user**. Wszyscy zarejestrowani użytkownicy są domyślnie przypisywani do grupy 'user'. Użyj tej nazwy do nadania uprawnień 'zalogowanym' użytkownikom. Nazwa tej grupy jest konfigurowana przez opcję [[config:defaultgroup]]. Inaczej zatem niż wirtualna grupa "ALL", grupa "user" jest rzeczywistą grupą do której użytkownicy są przypisywani automatycznie podczas użycia standardowego backendu autoryzacji. Jeśli używasz innego backendu musisz skorzystać z grup dostarczanych przez ten backend. ===== Informacje o kontekście ===== Ograniczenia dostępu są zapisywane w pliku ''conf/acl.auth.php'', do którego serwer WWW musi mieć uprawnienia zapisu jeśli chcesz używać interfejsu administracji ACL. :!: Nie zaleca się, aby edytować ten plik ręcznie. Użyj zamiast tego interfejsu administracyjnego. Puste linie i komentarze w stylu powłoki są ignorowane. Każda linia zawiera trzy pola oddzielone białymi znakami: * Ograniczany zasób. Może to być albo [[pagename|nazwa strony]] albo [[namespace|przestrzeń nazw]]. Przestrzenie nazw oznaczane są dodatkowym znakiem gwiazdki (patrz przykłady poniżej) * Nazwa grupy lub użytkownika. Nazwy grup oznaczane są wiodącym znakiem ''@'' * Poziom dostępu (patrz niżej) Jest 7 poziomów dostępu reprezentowanych przez liczbę całkowitą. Wyższe poziomy zawierają w sobie niższe. Gdy możesz zmieniać, możesz również czytać. Jednakże uprawnienie //admin// o wartości //255// nie powinno być nigdy użyte w pliku ''conf/acl.auth.php''. It is only used internally by matching against the [[config:superuser]] option. ^ Nazwa ^ Poziom ^ Stodowane do ^ Uprawnienie ^ DokuWiki constant ^ | żadne | 0 | strony, przestrzenie nazw | brak uprawnień -- pełna blokada | AUTH_NONE | | czytanie | 1 | strony, przestrzenie nazw | uprawnienie odczytu | AUTH_READ | | zmiana | 2 | strony, przestrzenie nazw | można edytować istniejące strony | AUTH_EDIT | | tworzenie | 4 | przestrzenie nazw | można tworzyć nowe strony | AUTH_CREATE | | przesyłanie plików | 8 | przestrzenie nazw | mogą być przesłane pliki multimedialne | AUTH_UPLOAD | | usuwanie | 16 | przestrzenie nazw | pliki multimedialne mogą być nadpisane i usunięte | AUTH_DELETE | | administracja | 255 | wtyczki administracyjne | superużytkownik ((patrz [[config:superuser]])) może zmieniać uprawnienia administracyjne | AUTH_ADMIN | Oto przykład: * @ALL 4 * bigboss 16 start @ALL 1 marketing:* @marketing 8 devel:* @ALL 0 devel:* @devel 8 devel:* bigboss 16 devel:funstuff bigboss 0 devel:* @marketing 1 devel:marketing @marketing 2 Prześledźmy go linia po linii (poniżej pełny opis): - Ta linia ustala uprawnienia dla podstawowej przestrzeni nazw. Zezwala wszystkim tworzyć i edytować strony. Niemniej jednak przesyłanie plików nie jest dostępne. - Użytkownik //bigboss// posiada pełne prawa - Uprawnienia do strony początkowej 'start' jest ograniczone tylko do odczytu dla wszystkich - Następnie ustalane są uprawnienia do przestrzeni nazw ''marketing''. Wszyscy członkowie grupy //marketing// mogą tam przesyłać pliki - inni użytkownicy będą dopasowywani do linii 1 zatem wciąż mogą tworzyć i zmieniać. //bigboss// dziedziczy prawa z linii 2 zatem może przesyłać i usuwać pliki. - Teraz ograniczany jest dostęp do przestrzeni nazw ''devel''. Nikt nie może tam nic zrobić. - No, niezupełnie nikt -- dajemy tu użytkownikom grupy //devel// pełne prawa - I oczywiście //bigboss// jest również dopuszczony -- i jest jedynym, który może usuwać przesłane pliki - However the devel guys don't want their boss to see the ''funstuff'' page -- remember exact pagematches override namespace permissions - Dodatkowo zespół //marketing// może czytać wszystko z przestrzeni nazw ''devel'' - I na koniec chłopcom z //marketing// zezwala się również na zmianę strony ''devel:marketing''. Zauważ proszę, że w tym pliku **kolejność nie ma znaczenia**. Plik jest przetwarzany jako całość, po czym wyszukiwane jest najlepsze dopasowanie pary strona/użytkownik. Jeśli znajdzie się dopasowanie, kolejne działania są przerywane. Jeśli dopasowania nie ma, sprawdzane są uprawnienia grup do bieżącej strony. Jeśli nie odnajdzie się dopasowania, sprawdzenie kontynuowane jest na kolejnej otaczającej przestrzeni nazw. Możesz prześledzić to na powyższym przykładzie dla uprawnień użytkownika //bigboss//. Nadaje mu się uprawnienia w linii 2, jednak musi dostać pełne prawa do przestrzeni nazw devel:* jeszcze raz w linii 7. Gdyby nie było tej linii, pierwszym dopasowaniemdla użytkownika //bigboss// do strony w przestrzeni nazw devel byłaby linia 5, jako że //bigboss// jest członkiem domyślnej grupy //ALL//. Uwaga: Aby skonfigurować użytkowników lub grupy zawierające znaki specjalne (jak białe znaki) musisz zastosować znaki ucieczki URL. Stosuje się to tylko do znaków z zakresu poniżej 128. Plik ACL używa kodowania UTF-8 zatem wszystkie znaki wielobajtowe mogą być pisane normalnie. Powyższe stosuje się do backendów innych niż [[.auth:plain]] -- backend tekstowy nie dopuszcza żadnych znaków specjalnych.