DokuWiki - stejně jako většina wiki - je ve výchozím nastavení velmi otevřená. Každý může vytvářet, upravovat a mazat stránky. Někdy ale dává smysl omezit přístup k určitým stránkám nebo i všem. V takové chvíli přichází na řadu Access Control List (ACL). Tato stránka podává přehled, jak ACL v DokuWiki fungují a jak se konfigurují.
ACL lze zapnout v instalátoru a tam se také nastaví počáteční politika ACL. Pro ruční zapnutí ACL aktivujte volbu config:useacl a vytvořte kopii ukázkových souborů conf/acl.auth.php.dist a conf/users.auth.php.dist. Soubory poté přejmenujte na conf/acl.auth.php a conf/users.auth.php.
Příklad minimálního souboru conf/users.auth.php pro uživatele admin s heslem admin. Pokud jej použijete, nezapomeňte následně heslo změnit.
# login:passwordhash:Real Name:email:groups (comma[,] separated) admin:$2y$10$P5YH8uIM2uAE9snRq32yAuHMb4/XAzksFd5Cakqqtsw9BWeSsyLZq:admin:admin@admin.com:admin,user
Existuje několik dalších konfiguračních voleb a funkcí souvisejících s autentizací, registrací uživatelů a nastavením ACL. Podrobnosti viz příslušné wiki stránky:
VAROVÁNÍ: Funkce ACL v DokuWiki je k dispozici již delší dobu a měla by být stabilní. Pokud však existují obavy z rizika neoprávněného přístupu k citlivým informacím ve wiki, neměla by být umístěna na počítači přístupném z internetu.
Omezení přístupu lze vázat na stránky a jmenné prostory. Existuje sedm oprávnění: none, read, edit, create, upload, delete a admin. Každá vyšší úroveň zahrnuje nižší; nejnižší je read a nejvyšší je delete. Všimněte si, že oprávnění create, upload a delete lze přiřadit pouze jmenným prostorům.
Pravidla nastavená pro jmenné prostory platí jak pro mediální jmenné prostory, tak pro jmenné prostory stránek.
Když DokuWiki vyhodnocuje, jaká práva má uživateli přidělit, bere v úvahu všechna pravidla, která odpovídají uživatelskému jménu nebo skupinám, jejichž je členem. Pravidlo, které určí výsledná oprávnění, se volí takto:
Uživatelé jsou ve skupinách, které jim byly přiřazeny ve správci uživatelů (nebo v auth backendu). Existují však dvě poněkud speciální skupiny:
Skupiny jsou interně i ve Správci ACL reprezentovány předponou @ před názvem skupiny.
Pro snadné přidávání a změnu pravidel použijte Správce ACL dostupný z administrační nabídky. Podrobný popis rozhraní viz zde.
Základní tři kroky pro přidání nového pravidla ACL:
Existující pravidla lze upravit nebo smazat v tabulce ve spodní části Správce ACL. conf/acl.auth.php.distconf/users.auth.php.distconf/acl.auth.phpconf/users.auth.php
V této části vysvětlíme fungování pravidel přístupu na fiktivním příkladu tak, jak vypadá ve Správci ACL:
Komentář k jednotlivým řádkům:
devel se omezuje. Nikdo tam nemůže nic.devel plný přístup. Může i mazat nahrané soubory.devel vše číst, ale nesmí upravovat ani vytvářet stránky.funstuff - pamatujte, že přesný shodný záznam pro stránku přebíjí oprávnění jmenného prostoru.devel:marketing. (Tuto stránku ale nemohli vytvořit.)marketing: všichni v marketing mohou nahrávat Druhý příklad pro lepší pochopení specific matching:
Pravidla, která budou platit při přístupu na stránku private:bobspage:
NoneDeleteNoneDeletePoznámka k pravidlu #5, které vypadá jako duplikát #3. Bez něj by se staff nedostal do privátního jmenného prostoru, protože by je pravidlo #4 nepustilo.
Omezení přístupu se ukládají do souboru conf/acl.auth.php, který musí být zapisovatelný webserverem, pokud chcete používat výše popsané webové rozhraní správy. Nedoporučuje se provádět ruční editace tohoto souboru - používejte raději administraci.
Prázdné řádky a komentáře ve stylu shellu se ignorují. Každý řádek obsahuje tři pole oddělená bílými znaky:
@.
Existuje 7 úrovní oprávnění reprezentovaných celým číslem. Vyšší úroveň zahrnuje nižší. Pokud můžete upravovat, můžete i číst. Oprávnění admin s hodnotou 255 však nelze v souboru conf/acl.auth.php použít. Používá se interně při porovnání s volbou config:superuser.
| Název | Úroveň | platí pro | Oprávnění | Konstanty DokuWiki |
|---|---|---|---|---|
| none | 0 | stránky, jmenné prostory | žádná práva - úplné zablokování | AUTH_NONE |
| read | 1 | stránky, jmenné prostory | právo číst | AUTH_READ |
| edit | 2 | stránky, jmenné prostory | lze upravovat existující stránky | AUTH_EDIT |
| create | 4 | jmenné prostory | lze vytvářet nové stránky | AUTH_CREATE |
| upload | 8 | jmenné prostory | lze nahrávat mediální soubory | AUTH_UPLOAD |
| delete | 16 | jmenné prostory | lze přepisovat nebo mazat mediální soubory | AUTH_DELETE |
| admin | 255 | admin pluginy | superuživatel1) může měnit admin nastavení | AUTH_ADMIN |
Příklad nastavení odpovídající prvnímu uvedenému příkladu:
* @ALL 4 * bigboss 16 devel:* @ALL 0 devel:* @devel 8 devel:* bigboss 16 devel:* @marketing 1 devel:funstuff bigboss 0 devel:marketing @marketing 2 marketing:* @marketing 8 start @ALL 1
Vezměte na vědomí, že pořadí v souboru nehraje roli. Soubor se nejprve celý načte, poté se hledá „perfektní shoda“ pro kombinaci aktuální stránky a uživatele. Jakmile se najde, další hledání se ukončí. Pokud se nenajde, zkoumají se skupinová práva pro aktuální stránku. Pokud se stále nic nenajde, pokračuje se v nejbližším vyšším jmenném prostoru.
Poznámka: Oprávnění „delete“ ovlivňuje pouze mediální soubory. Stránky mohou mazat (a obnovovat) všichni, kdo mají alespoň právo „edit“. Kdo má „upload“ bez „delete“, může přepsat existující mediální soubory jen tehdy, je-li zapnuta volba media revisions.
Protože konfigurace ACL používá některé speciální znaky (např. předponu @, mezery apod.), je třeba názvy uživatelů a skupin při ruční editaci kódovat, pokud obsahují určité znaky, aby nedocházelo ke kolizím.
Při použití Správce ACL to řešit nemusíte - provede to automaticky.
Při ruční editaci je nutné názvy kódovat. Interně se používá metoda auth_nameencode().
Kódování používá URL kódování pro všechny nealfanumerické ASCII znaky (speciální znaky v dolní 128b sadě). UTF‑8 vícebajtové znaky se nekódují.
Příklad: Herbert.Müller se stane Herbert%2eMüller
V ACL lze používat zástupné vzory pro uživatele a skupiny. To je užitečné na wiki s mnoha registrovanými uživateli, když chcete každému přidělit osobní jmenný prostor s výhradními právy zápisu, aniž byste museli ručně doplňovat pravidla. K tomu slouží %USER% (nahradí se aktuálním uživatelským jménem) a %GROUP% (nahradí se všemi skupinami daného uživatele).
V následujícím příkladu má přihlášený uživatel plná práva (upload/delete) ve svém jmenném prostoru user:<username>:* a ostatním se přístup do jmenných prostorů pod user:* odebírá.
V tomto nastavení má přihlášený uživatel přístup jen do svého vlastního jmenného prostoru a nemá přístup do uživatelských prostorů jiných (ani k zobrazení názvů prostorů).
# Grant full access to logged in user's namespace user:%USER%:* %USER% 16 # Allow to browse own namespace via the index user: %USER% 1 # Allow read only access to start page located in "user" namespace user:start %USER% 1 # Disable all access to user's home namespaces not owned by logged in user # (include view namespaces via the index) user:* @user 0 # Allow members of 'group' to edit pages in the 'group' namespace. # BE CAREFUL, if you have a 'user' namespace, all members of the default group # will gain access to it since %GROUP% will be replaced literally %GROUP%:* %GROUP% 2
Poznámka: Verze 2009-12-25c „Lemming“ má úskalí. Pokud přidáte, změníte nebo odstraníte položky ACL v administračním rozhraní, DokuWiki nahradí %USER% ve druhém poli záznamu řetězcem
%25USER%25 (viz bug FS#1955). Abyste tomu předešli, měňte oprávnění pouze ručně (editací conf/acl.auth.php) nebo po každé operaci v administraci řetězec opravte, protože %25USER%25 nefunguje - správné je pouze %USER%. V novějších verzích je tato chyba opravena.
Poznámka: Zástupný znak se v prosinci 2008 změnil z @ na % - při upgradu ze starší verze tomu přizpůsobte nastavení ACL.