====== Zugriffskontrolle ====== [[DokuWiki]] ist -- wie die meisten **Wikis** -- in der Basiskonfiguration sehr offen. Jeder hat das Recht, Seiten zu erstellen, zu editieren oder zu löschen. Manchmal ist es trotzdem besser, den Zugriff zu manchen oder allen Seiten zu beschränken. An diesem Punkt kommen //Access Control Lists// (ACL) ins Spiel. Diese Seite soll einen Überblick darüber geben, wie ACLs im DokuWiki arbeiten und wie sie konfiguriert werden. Für weiterführende Informationen oder Fragen --> [[discussion:acl|discussion:acl]] :!: **WARNUNG:** Die ACL-Funktion im DokuWiki ist seit einiger Zeit eingebaut und sollte stabil sein. Wenn Sie sich jedoch wegen der Risiken eines unautorisierten Benutzerzugriffs auf die Informationen in ihrem Wiki sorgen, sollten Sie diese Information niemals auf einen Rechner stellen, auf den über das Internet zugegriffen werden kann...... ===== Konfiguration ===== Um ACL im DokuWiki zu aktivieren, benötigen sie zumindest ein Standard-ACL. Kopieren Sie einfach jeweils die Beispieldateien ''conf/acl.auth.php.dist'' und ''conf/users.auth.php.dist'' nach ''conf/acl.auth.php'' und ''conf/users.auth.php''. Danach sollte die Anmeldeseite funktionieren. Wenn Sie die Meldung "No ACL setup yet! Denying access to everyone." erhalten, dann stellen Sie sicher, dass der Code am Anfang der Datei acl.auth.php die Datei ''acl.auth.php'' :?: (steht so im Original) :?: liest und nicht ''users.auth.php''. Sie benötigen darüber hinaus einige [[config]] Optionen. Betrachten wir ein Beispiel, das Sie in ihre ''local.php'' einfügen könnten, um die Standard Klartext-Authentifizierung bei der öffentlichen Registrierung zu aktivieren: $conf['useacl'] = 1; // this enables the ACL feature $conf['superuser'] = '@admin'; // admin group is superuser [[config:useacl]] aktiviert das ACL-Feature. Wenn es aktiviert wurde, erscheint ein Login-Feld am Ende jeder Wikiseite, und die Benutzer können sich registrieren. Die Option [[config:superuser]] gibt an, wer in der Lage ist, im DokuWiki alles zu machen (einschließlich neue ACL-Beschränkungen hinzuzufügen) - dies kann entweder ein einzelner Benutzer oder eine Gruppe sein (gekennzeichnet durch ein führendes ''@''). Wenn Sie ein DokuWiki von Anfang an mit ACL unter Benutzung eines Browsers installieren, klicken Sie den "Login"-Button, folgen Sie dem Link "register", und registrieren Sie wenigstens einen Benutzer. (Wenn Sie keinen Registrierungslink sehen, dann sind die Dateirechte von ''conf/users.auth.php'' oder ''conf/acl.auth.php'' nicht korrekt und deswegen können keine neuen Daten dorthin geschrieben werden.) Dann editieren Sie ''conf/users.auth.php'' und //befördern// sie wenigsten einen "user" zum "admin". Ab sofort gibt es einen zusätzlichen "Admin"-Button wenn Sie als ein Benutzer angemeldet sind, der zur "admin"-Gruppe gehört. An diesem Punkt kann eine zusätzliche Sicherheitsfunktion aktiviert werden. Um Benutzern zu verbieten, sich selbst zu registrieren fügen Sie 'register' zu den ''disableactions''-Optionen hinzu: $conf['disableactions'] = 'register'; // users are no longer allowed to register themselves Früher wurde dies mittels der [[config:openregister|openregister]]-Option gemacht. Dies ist veraltet. Auf diese Art und Weise können Benutzer nur von einem Administrator hinzugefügt werden (entweder durch das Admin-Webinterface oder durch den direkten Eintrag in ''conf/users.auth.php'' ). Darüber hinaus gibt es zusätzliche Konfigurationsoptionen, die Kontrolle über andere Aspekte der ACL's erlauben. Viele werden hierfür aber die Standardeinstellungen für ausreichend halten. $conf['autopasswd'] = 1; //autogenerate passwords and email them to user $conf['passcrypt'] = 'smd5'; //Used crypt method (smd5,md5,sha1,ssha,crypt,mysql,my411) $conf['defaultgroup']= 'user'; //Default groups new Users are added to $conf['profileconfirm'] = '1'; //Require current password to confirm changes to user profile $conf['authtype'] = 'plain'; // plaintext backend (default) * Ändern Sie [[config:autopasswd]] auf 0 um dem Benutzer die Auswahl eines eigenen Passwortes zu erlauben. Dies hat allerdings den Nebeneffekt, dass man nicht mehr überprüfen kann, ob der Benutzer sich auch mit einer korrekten Emailadresse registriert. * [[config:passcrypt]] legt die Verschlüsselungsmethode für das Passwort fest. * [[config:defaultgroup]] erklärt sich von selbst: alle neuen Benutzer werden zunächst in diese Gruppe eingetragen. * Setzen Sie [[config:profileconfirm]] auf 0 um einem angemeldeten Benutzer zu erlauben, sein Profil zu ändern (Name, Passwort und Emailadresse) ohne es mit dem derzeitigen Passwort bestätigen zu müssen. * DokuWiki kann verschiedene Wege benutzen um auf Benutzer- und Gruppendaten zuzugreifen. Standardmäßig benutzt es sein eigenes [[.auth:plain|plaintext]] Verfahren. Das Verfahren wird durch die [[config:authtype]]-Option gewählt. Siehe hierzu [[.auth:backends]] um die verfügbaren Optionen zu sehen. ... ===== Benutzermanagement ===== Benutzer koennen hinzugefuegt, geloescht und bearbeitet werden mittels [[plugin:usermanager]]. Fuer Informationen wie Benutzer manuell hinzugefuegt werden lesen sie die Beschreibung in der [[.auth:plain|plain backend]] Dokumentation. Standardmaessig koennen sich Benutzer selbst registrieren. Siehe dazu: [[faq:regdisable|FAQ: How to disable open user registration]] ===== Zugriffsbeschraenkungen ===== Zugriffsbeschraenkungen werden mit [[pagename|pages]] und [[namespaces]] verbunden. Es gibt fuenf Zugriffsrechte: //read//, //edit//, //create//, //upload// und //delete// (lesen, editieren, anlegen, hochladen und loeschen). Jedes hoehere Zugriffsrecht enthaelt die darunter liegenden. Dabei ist //read// das unterste und //delete// das hoechste Recht. Die Rechte create, upload und delete koennen nur namespaces zugewiesen werden. Wenn DokuWiki prueft, welche Rechte es einem Benutzer geben soll, benutzt es alle Regeln, die mit dem Benutzernamen übereinstimmen oder der Gruppenrechte der Gruppe, in der sich der Benutzer befindet. Die Regel mit dem hoechsten Recht wird benutzt. Die Rechte werden zuerst fuer die Seite geprüft. Danach werden alle übergeordneten namespaces geprueft, bis eine zutreffende Regel gefunden wurde. Um eine beschraenkende Regel hinzuzufuegen, wechseln Sie auf die Seite, die beschraenkt werden soll und wechseln dann auf die Administrationsoberflaeche durch druecken des ''Admin'' Button (Nur verfuegbar fuer den [[config:superuser]]). Dort selektieren Sie //Access Control List Management//. Ihnen wird dann eine Tabelle wie die folgende gezeigt, die alle Beschraenkungen der ausgewaehlten Seite zeigt. {{wiki:acladmin.png|Beispiel einer ACL-Beschraenkung}} Beschraenkungen werden in die oberste Zeile der Tabelle eingetragen. Sie muessen einen Bereich auswaehlen. Dies kann entweder die gewaehlte Seite selbst oder einer der namespaces sein, in denen sich die Seite befindet ((der oberste namespace heisst ''*'')). Sie muessen ausserdem auswaehlen, wem Sie den Zugriff erlauben (oder verbieten) wollen; dies kann eine Gruppe oder ein Benutzer sein. Zum Schluss muessen Sie noch die Rechte waehlen, die Sie gewaehren wollen. Wird nichts gewaehlt, wird der gewaehlte Benutzer oder die gewaehlte Gruppe von der Benutzung der Seite oder des namespaces ausgeschlossen. Anm.: Das //delete//-Recht betrifft nur media Dateien. Seiten koennen geloescht (und wieder hergestellt) werden von jedermann, der wenigstens //edit//-Rechte hat. Jemand der //upload//-Rechte aber keine //delete//-Rechte hat, kann existierende media Dateien nicht mehr ueberschreiben. === Spezielle Gruppen === **ALL**. Jeder, selbst Benutzer die nicht angemeldet sind, sind Mitglieder der Gruppe ALL. Sie koennen diese Gruppe benutzen, um den Zugriff fuer alle Benutzer zu beschraenken (als Standardeinstellung) um dann die Rechte ausgewaehlter Benutzer zu erweitern. Im Bildschirmfoto oben ist z.B. niemand berechtigt etwas hochzuladen ausser den Mitgliedern der Gruppe UPLOAD. **user**. Alle Benutzer, die sich selbst registriert haben sind automatisch Mitglied der Gruppe USER. Benutzen Sie dies, um angemeldeten Benutzern Rechte zu geben. Der Name dieser Gruppe wird durch die Option [[config:defaultgroup]] festgelegt. Anders als die virtuelle Gruppe ALL, ist die Gruppe "user" real. Zu ihr werden alle Benutzer automatisch hinzugefuegt, wenn die einfache Benutzerauthentifizierung benutzt wird. Wenn Sie ein anderes Verfahren verwenden muessen Sie die Gruppen benutzen, die dieses Verfahren benutzt. ===== Hintergrundinformationen ===== Zugriffsbeschränkungen werden in der Datei ''conf/acl.auth.php'' gesichert. Sie sollte durch den Webserver geschrieben werden können, wenn Sie die ACL Admin-Oberfläche benutzen wollen. :!: Es wird nicht empfohlen, diese Datei manuell zu editieren. Benutzen Sie die Admin-Oberfläche. Leere Zeilen und Kommentare im Stile der Shell werden ignoriert. Jede Zeile enthält drei Felder, die durch Leerzeichen getrennt sind: * Der Name der Ressource. Dies kann entweder ein [[pagename|Seitenname]] oder ein [[namespace|Namespace]] sein. Namespaces werden durch ein zusätzliches Sternchen gekennzeichnet (siehe Beispiel unten) * Eine Gruppe oder Benutzername. Gruppennamen werden mit einem fuehrenden ''@'' Zeichen gekennzeichnet. * Ein Rechtelevel (siehe unten) Es gibt 7 Rechtelevel, die durch eine Zahl repräsentiert werden. Höhere Levels beinhalten tiefere. Wenn Sie editieren können, dann können Sie auch lesen. Trotzdem sollte das //admin//-Recht von //255// nie in der ''conf/acl.auth.php'' Datei benutzt werden. Es wird nur intern bei der Prüfung der Übereinstimmung der [[config:superuser]] Option benutzt. ^ Name ^ Level ^ applies to ^ Permission ^ DokuWiki constant ^ | none | 0 | pages, namespaces | no permission -- complete lock out | AUTH_NONE | | read | 1 | pages, namespaces | read permission | AUTH_READ | | edit | 2 | pages, namespaces | existing pages may be edited | AUTH_EDIT | | create | 4 | namespaces | new pages can be created | AUTH_CREATE | | upload | 8 | namespaces | mediafiles may be uploaded | AUTH_UPLOAD | | delete | 16 | namespaces | mediafiles may be overwritten or deleted | AUTH_DELETE | | admin | 255 | admin plugins | superuser((see [[config:superuser]])) can change admin settings | AUTH_ADMIN | Hier ist ein Beispiel: * @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 Lassen Sie uns das Beispiel Zeile für Zeile durchsehen (s. unten für weitere Informationen): - Dies setzt Rechte fuer den Haupt-Namespace. Erlaubt jedem, Seiten zu editieren und anzulegen. Trotzdem ist upload nicht erlaubt. - Benutzer //bigboss// werden alle Rechte gegeben. - Die Rechte für die Startseite werden für jedermann auf nur-lesen gesetzt. - Dann werden die Rechte für den Namespace ''marketing'' gesetzt. Allen Mitgliedern der //marketing// Gruppe wird erlaubt, hier hochzuladen - fuer andere Benutzer gilt Zeile 1, die anlegen und editieren erlaubt. //bigboss// erbt seine Rechte von Zeile 2, so dass er hochladen und loeschen kann. - Der Zugriff auf den namespace ''devel'' wird beschraenkt. Niemand darf etwas machen. - na gut, nicht wirklich jeder -- hier geben wir den Mitgliedern der Gruppe //devel// volle Rechte - und natuerlich darf //bigboss// alles -- er darf sogar hochgeladene Dateien loeschen - die //devel//-Leute wollen aber nicht, dass ihr Boss die ''funstuff''-Seite sieht -- erinnern Sie sich: genaue Seitenrechte überschreiben namespace Rechte - und das //marketing//-Team darf auch alles im ''devel''-Namespace lesen - und zum Schluss wird den //marketing//-Leuten erlaubt, die ''devel:marketing''-Seite zu editieren. Bitte beachten Sie, dass ** die Reihenfolge in der Datei egal ist**. Die Datei wird als Ganzes analysiert und das Wiki sucht die perfekte Übereinstimmung für die Seiten/Benutzer-Kombinationen. Wenn eine Übereinstimmung gefunden wird, wird die Suche abgebrochen. Wenn keine Übereinstimmung gefunden wird, dann werden die Gruppenrechte der zu aktuellen Seite geprüft. Wird auch hier keine Übereinstimmung gefunden, wird die Prüfung mit dem nächsthöheren Namespace fortgesetzt. Sie sehen im obigen Beispiel die Recht für die Benutzer //bigboss//. Ihm wurde via Zeile 2 der volle Zugriff gewährt, aber er benötigt den vollen Zugriff auf den devel:* namespace via Zeile 7 noch einmal. Wäre die Zeile nicht da, dann wäre die erste Übereinstimmung für den Benutzer //bigboss// und Seiten innerhalb des devel Namespace die Zeile 5, weil //bigboss// Mitglied der magischen Gruppe //ALL// ist. Anm.: Um Benutzer und Gruppen mit speziellen Zeichen (wie Leerzeichen) zu konfigurieren müssen Sie den Namen "URL escapen". Das trifft nur auf spezielle Zeichen im unteren 128 Byte Bereich zu. Die ACL Datei benutzt UTF-8 Codierung. Dadurch kann jedes Multibyte-Zeichen geschrieben werden, wie es ist. Dies trifft nur dann zu, wenn ein Verfahren benutzt wird, dass anders ist als [[.auth:plain]] -- das einfache Verfahren erlaubt keine speziellen Zeichen.