⋮ Obsah

Seznamy přístupových práv (ACL)

https://www.dokuwiki.org/acl

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í.

Konfigurace a nastavení

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.

conf/users.auth.php
# login:passwordhash:Real Name:email:groups (comma[,] separated)

admin:$2y$10$P5YH8uIM2uAE9snRq32yAuHMb4/XAzksFd5Cakqqtsw9BWeSsyLZq:admin:admin@admin.com:admin,user

Viz také

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

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.

Úprava ACL

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:

  1. v levém stromu vyberte jmenný prostor nebo stránku, kterou chcete omezit
  2. určete, na koho se má pravidlo vztahovat
    • vyberte známou skupinu nebo uživatele z rozbalovací nabídky
    • nebo zvolte „User:“ či „Group:“ a zadejte jméno uživatele či skupiny do pole
  3. nastavte odpovídající oprávnění

Existující pravidla lze upravit nebo smazat v tabulce ve spodní části Správce ACL. conf/acl.auth.php.dist​conf/users.auth.php.dist​conf/acl.auth.php​conf/users.auth.php

ACL na příkladech

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:

  1. Nastaví oprávnění pro všechny v hlavním jmenném prostoru: každý může upravovat a vytvářet stránky. Upload povolen není.
  2. Uživatel bigboss dostává plná práva.
  3. Přístup do jmenného prostoru devel se omezuje. Nikdo tam nemůže nic.
  4. No, ne tak docela - členům skupiny devel se zde udělují téměř plná práva. Mazání souborů povoleno není.
  5. Uživatel bigboss má ale v devel plný přístup. Může i mazat nahrané soubory.
  6. Skupina marketing může v devel vše číst, ale nesmí upravovat ani vytvářet stránky.
  7. Tým devel nechce, aby šéf viděl stránku funstuff - pamatujte, že přesný shodný záznam pro stránku přebíjí oprávnění jmenného prostoru.
  8. A nakonec má skupina marketing právo upravovat stránku devel:marketing. (Tuto stránku ale nemohli vytvořit.)
  9. Dále se nastaví práva pro jmenný prostor marketing: všichni v marketing mohou nahrávat
    • ostatní se řídí řádkem #1, takže stále mohou vytvářet a upravovat.
    • Práva pro bigboss se dědí z řádku #2, takže může nahrávat i mazat. (Není divu, že každý chce být bigboss.)
  10. Poslední řádek omezuje úvodní stránku na „pouze pro čtení“ pro všechny. I pro bigboss. Upravovat ji budou moci jen superuživatelé.

Druhý příklad pro lepší pochopení specific matching:

Pravidla, která budou platit při přístupu na stránku private:bobspage:

  1. abby, běžný uživatel
    • odpovídají tři pravidla: #1, #2, #4
    • nejblíže je #4 (úroveň jmenného prostoru) - má přednost
    • abby má oprávnění None
  2. bob, běžný uživatel
    • odpovídají čtyři pravidla: #1, #2, #4, #6
    • vítězí #6, protože jde o přesnou shodu
    • bob má oprávnění Delete
  3. bob zapomene přihlášení a zkusí přístup
    • odpovídají #1 a #4
    • bližší je #4 - vítězí
    • bez přihlášení má bob oprávnění None
  4. charlie, zaměstnanec (staff)
    • odpovídá pět pravidel: #1–#5
    • na úrovni jmenného prostoru odpovídají dvě; #5 dává vyšší práva, proto vítězí
    • charlie má oprávnění Delete

Pozná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.

Zákulisní informace

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.

Kódování uživatelů/skupin

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

Zástupné znaky pro uživatele

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.