Benutzerautorisierung
AuthUser ist PmWikis identitätsbasiertes Autorisierungssystem, das die Kontrolle des Zugriffs auf Seiten erlaubt über den Einsatz von Benutzernamen und -Passwörtern (anders als beim Standardsystem, bei dem nur Passwörter verwendet werden und diese nicht an Benutzer, sondern an Seiten oder Gruppen oder die Site gebunden sind). AuthUser kann zusätzlich zu diesem in der Standardkonfiguration benutzten, passwort-basierten Schema benutzt werden.
AuthUser ist ein sehr flexibles System zum Verwalten der Zugangskontrolle zu Seiten, aber Flexibilität kann auch Komplexität und vermehrten Aufwand zur Pflege für den Administrator mit sich bringen. Genau darum ist PmWikis Standard das einfachere passwort-basierte System. Wegen ein paar Gedanken zu den jeweiligen Vorzügen der beiden Systeme siehe PmWiki:ThoughtsOnAccessControl.
Siehe auch: Cookbook:Quick Start for AuthUser.
AuthUser aktivieren
Um PmWikis identitätsbasiertes System AuthUser zu aktivieren, braucht man nur die folgende Zeile in die local/config.php hinzuzufügen:
$FarmD
/scripts/authuser.php");
Vergewissern Sie sich, dass Sie ein site-weites Passwort gesetzt haben, andernfalls könnten Sie SiteAdmin.AuthUser nicht bearbeiten.
PmWiki speichert einige Gruppen- und Seiten-Autorisierungsebenen zwischen, wenn auf eine Seite zugegriffen wird. Deshalb ist es besser, authuser.php
eher weiter vorn in der config.php einzusetzen, sicher jedoch
- nach allen Rezepten, die eine eigenen Seitenspeicher-Klasse (MySQL, SQLite, Compressed PageStore oder andere) etablieren
- und nach jeder Internationalisierung (UTF-8 und XLPage).
(Wenn Sie keine eigene Seitenspeicher-Klasse und i18n nutzen, sollte authuser.php
das Erste in der config.php
sein.)
Alle anderen Rezepte sollten dahinter aufgeführt werden.
Benutzerkonten anlegen
Das Meiste von AuthUsers Konfiguration wird über die SiteAdmin.AuthUser-Seite erledigt. Zum Ändern der AuthUser-Konfiguration bearbeiten Sie einfach diese Seite wie andere Seiten auch (man braucht typischerweise das Passwort des Site-Administrators dafür).
Um einen Login-Konto (account) zu erstellen, fügen Sie zu SiteAdmin.AuthUser einfach Zeilen wie diese hinzu:
username: (:encrypt password:)
Um zum Beispiel "Alice" ein Loginkonto mit dem Passwort "wunderland" zu geben, schreiben Sie also:
alice: (:encrypt wunderland:)
Wenn die Seite gespeichert wird, wird der "(:encrypt wunderland:)
"-Teil des Textes durch eine verschlüsselte Form des Passwortes "wunderland" ersetzt. Diese Verschlüsselung geschieht, damit jemand, der die Seite ansieht, nicht zu einfach das gespeicherte Passwort erschließen kann.
Um eines Benutzers Passwort zu ändern oder zurückzusetzen, ersetzt man den verschlüsselten String durch eine weitere (:encrypt:)
-Directive.
Zugriff auf Seiten durch Anmelden kontrollieren
Seiten und Gruppen können auf der Basis der Loginkonten geschützt werden, indem man "Passwörter" der Form id:benutzername
in die Passwortfelder bei ?action=attr
einträgt (siehe Passwörter. Damit zum Beispiel eine Seite nur von Alice bearbeitet werden kann, würde man als neues "bearbeiten"-Passwort "id:alice" eintragen.
Es ist möglich, mehrere "id"-Deklarationen und Passwörter in dem "?action=attr
"-Formular einzugeben, deshalb erlaubt die folgende Einstellung den Zugriff durch Alice, Carol und jeden, der das Passwort "schnell" kennt:
schnell id:alice,carol
Um jedem den Zugriff zu erlauben, der sich erfolgreich eingeloggt hat, schreibt man "id:*".
Man kann auch site-weite Einschränkungen einrichten, die auf den Identitäten im $DefaultPasswords
-Array basieren: z. B.
# Einloggen erforderlich, bevor Seiten gelesen werden können$DefaultPasswords
['read'] = 'id:*'; # Alice und Carol dürfen bearbeiten$DefaultPasswords
['edit'] = 'id:alice,carol'; # Alle Admins und Fred dürfen bearbeiten$DefaultPasswords
['edit'] = array('@admins', 'id:Fred');
Man kann das $DefaultPasswords
-Array in den lokalen Anpassungsdateien ändern:
- local/config.php (für das ganze Wiki)
- farmconfig.php (für die ganze Wikifarm)
Organisieren der Konten in Gruppen
AuthUser macht es auch möglich, Loginkonten in Autorisierungsgruppen zu sammeln, die durch ein einleitendes '@'-Zeichen bezeichnet werden. Wie die Loginkonten werden Gruppenzugehörigkeiten durch Einträge in der SiteAdmin.AuthUser-Seite verwaltet, Gruppenzugehörigkeit entweder durch Auflisten der Gruppen im Loginkonto (Person gehört zu den Gruppen ...) oder durch Auflisten der Konten für eine Gruppe (Gruppe enthält Leute). Man kann die beiden Arten wiederholt anwenden oder mischen:
@writers: alice, bob carol: @writers, @editors @admins: alice, dave
Um dann Seitenzugriffe auf eine bestimmte Gruppe zu beschränken, trägt man einfach "@gruppe
" als das "Passwort" in ?action=attr
oder in das $DefaultPasswords
-Array ein, gerade so wie "id:benutzername
" für die Zugriffsbeschränkung auf ein Loginkonto eingetragen wurde.
Einzelne aus Passwortgruppen ausschließen
Gruppenpasswortzugehörigkeiten werden über das Bearbeiten der SiteAdmin.AuthUser-Seite verwaltet. Um eine Passwortgruppe anzugeben, die jedem, der eingeloggt ist, den Zugriff erlaubt, gibt man an:
@wholeoffice: *
Wenn Fred von dieser Passwortgruppe ferngehalten werden soll:
@wholeoffice: *,-Fred
Um allen außer Fred zu erlauben, die Seitenattribute zu ändern, schreibt man beispielsweise in die config.php:
$DefaultPasswords
['attr'] = array('id:*,-Fred');
Kontonamen und Passwörter aus externen Quellen holen
Das AuthUser-Skript hat die Fähigkeit, Benutzernamen/Passwörter-Paare von anderen Stellen als der SiteAdmin.AutUser-Seite zu holen, als da wären
- passwd-formatierte Dateien(auf Apache-Servern gewöhnlich '.htpasswd' genannt),
- LDAP-Server oder sogar
- die local/config.php-Datei.
Passwd-formatierte Dateien (.htpasswd/.htgroup)
Passwd-formatierte Dateien, in Apache gewöhnlich .htpasswd-Dateien genannt, sind Textdateien, in denen jede Zeile einen Benutzernamen und ein verschlüsseltes Passwort enthält, getrennt durch einen Doppelpunkt. Eine typische .htpasswd-Datei könnte so etwas enthalten:
alice:vK99sgDV1an6I carol:Q1kSeNcTfwqjs
Anlegen und Verwalten der .htpasswd-Datei kann mit einem Texteditor durchgeführt werden (???? nur .htgroup!) oder mit einer Reihe von Drittanbieter-Werkzeugen, die mit .htpasswd-Dateien umgehen können. Beim Apache-Server wird typischerweise ein htpasswd-Kommando mit installiert, mit dem man Konten in .htpasswd anlegen und verwalten kann.
$ htpasswd /path/to/.htpasswd alice New password: Re-type new password: Adding password for user alice $
Ähnlich kann man .htgroup-formatierte Dateien nutzen, um die Gruppenzugehörigkeiten festzulegen. Jede Zeile enthält den Namen der Gruppe (ohne das "@"), gefolgt von einem Doppelpunkt und den durch Leerzeichen getrennten Benutzernamen.
writers: carol editors: alice carol bob admins: alice dave
Anmerkung: Die Gruppen sind nach wie vor "@writers", "@editors" und "@admins" in PmWiki, auch wenn in den Dateien das "@"-Zeichen nicht mitgeschrieben wird.
Damit AuthUser diese Gruppen lädt, schreibt man eine Zeile in SiteAdmin.AuthUser wie:
htgroup: /path/to/.htgroup
Konfiguration durch local/config.php
AuthUser-Konfigurationseinstellungen können auch in der local/confi.php-Datei gemacht werden zusätzlich zu der SiteAdmin.AuthUser-Seite. Solche Einstellungen werden in das $AuthUser-Array gesetzt und müssen vor dem Einfügen der authuser.php-Datei gesetzt werden.
# set a password for alice $AuthUser['alice'] = pmcrypt('wonderland'); # set a password for carol $AuthUser['carol'] = '$1$CknC8zAs$dC8z2vu3UvnIXMfOcGDON0'; # define the @editors group $AuthUser['@editors'] = array('alice', 'carol', 'bob'); # Use local/.htpasswd for usernames/passwords $AuthUser['htpasswd'] = 'local/.htpasswd'; # Use local/.htgroup for group memberships $AuthUser['htgroup'] = 'local/.htgroup';
Konfiguration über LDAP
Authentifizierung kann über einen externen LDAP-Server ausgeführt werden – setzen Sie einfach einen Eintrag für "ldap" entweder in die SiteAdmin.AuthUser-Seite oder in die local/config.php-Datei.
# use ldap.airius.com for authentication $AuthUser['ldap'] = 'ldap://ldap.airius.com/ou=People,o=Airius?cn?sub';
Vergewissern Sie sich, dass AuthUser nach dem Eintrag für den LDAP-Server eingeschlossen wird.
# Want to use AuthUser so we can use ldap for passwords
include_once("$FarmD
/scripts/authuser.php");
Und denken Sie daran, die Sicherheitsvariablen für "edit" und "history" (oder was auch immer) zu setzen:
#Security Variables set login for edit & history page # to let anyone edit that has an ldap entry:$HandleAuth
['diff'] = 'edit';$DefaultPasswords
['edit'] = 'id:*';$Author
=$AuthId
;
LDAP-Authentifizierung in AuthUser folgt dicht dem Modell, das Apache 2.0s mod_auth_ldap-Modul benutzt; siehe besonders die Dokumentation zu AuthLDAPUrl wegen einer Beschreibung des URL-Fomates.
Für Server, die kein anonymes bind erlauben, bietet Authuser die Variablen $AuthLDAPBindDN
und $AuthLDAPBindPassword
, um anzugeben. welches Binding zur Suche benutzt werden soll.
Siehe auch Cookbook:AuthUser via Microsoft LDAP
Setzen des Autorennamen
Im Standard benutzt PmWiki den Loginnamen im Autorenfeld des Bearbeiten-Formulars, erlaubt aber den Benutzern, den Wert vorm Speichern zu ändern. Um zu erzwingen, dass der Loginnamen immer als Autorenname benutzt wird, trägt man die folgende Sequenz in die config.php ein:
include_once("$FarmD
/scripts/authuser.php");$Author
=$AuthId
; # after include_once()
Für eine größere Flexibilität, die trotzdem einen Verweis auf den autorisierten Benutzer in den Versionen erlaubt, kann man dem Autorennamen einen Präfix aus der $AuthID geben:
include_once("$FarmD/scripts/author.php"); include_once("$FarmD/scripts/authuser.php"); if ($Author) { if (strstr($Author, '-') != false) { $Author = "$AuthId-" . preg_replace('/^[^-]*-/', '', $Author); } else if ($Author != $AuthId) { $Author = $AuthId . '-' . $Author; } else { $Author = $AuthId; } } else { $Author = $AuthId; } $AuthorLink = "[[~$Author]]";
Das Obige erlaubt den Benutzern einen Autorennamen ihrer Wahl einzugeben, aber der wird immer ersetzt durch einen Namen mit $AuthID als Präfix. Der Grund, warum $AuthorLink auch gesetzt werden muss, ist, dass sonst die 'Aktuelle Änderungen'-Seite den falschen Verweis enthält.
Das "Autor"-Eingabefeld entfernen
Das zwingt die Autoren, mit ihrer AuthID zu schreiben, anstatt ein Feld zu haben, in das sie jeden beliebigen Namen eintragen können. Das ermöglicht der Verwaltung, besser im Auge zu behalten, wer was tut. Diese Zeile verlinkt auch den Autorennamen mit ihrem Profil.
$[Author]: (:input e_author:)
$[Author]: [[Profiles/{$Author}]]
Autorisierung, Sessions und WikiFarms
PmWiki benutzt PHP-Sessions, um die Benutzerautorisierungsinformationen zu verfolgen. Im Standard ist PHP so konfiguriert, dass alle Interaktionen mit dem selben Server (indentifiziert durch den Domainnamen) als Teil der gleichen Session behandelt werden.
Das bedeutet für PmWiki, wenn mehrere Wikis innerhalb des gleichen Domainnamen laufen, dass PHP ein Login für ein Wiki als gültig auch für alle Wikis in der gleichen Domain ansieht. Die leichteste Lösung ist, jedes Wiki anzuweisen, ein verschiedenes "Session-Cookie" zu benutzen. In der Nähe des Anfangs in einer local/config.php-Datei eines Wikis, vor dem Aufruf von authuser oder anderen Rezepten, fügt man eine solche Zeile ein:
session_name('XYZSESSID');
Das XYZSESSID kann irgendein unverwechselbarer, einmaliger Name sein (nur Buchstaben ist am sichersten).
Siehe auch
- PmWiki.Passwords
- PmWiki.PasswordsAdmin
- Cookbook:AuthUser Wegen Tipps und Tricks
- SiteAdmin.AuthUser
Kann ich Autorisierungsgruppenzugehörigkeiten in der local/config.php angeben?
Ja – setzen Sie die Gruppendefinition in das $authUser-Array (in config.php).
$AuthUser['@editors'] = array('alice', 'carol', 'bob');
Kann ich mehrere Admin-Gruppen haben?
Ja, definieren Sie die Gruppen mit array('@admins', '@moderators');
wie hier:
$DefaultPasswords
['admin'] = array( pmcrypt('masterpass'), # globales Passwort
'@admins', '@moderators', # + Benutzer in diesen Gruppen
'id:Fred', 'id:Barney'); # + Benutzer Fred und Barney
Ich betreibe mehrere Wikis unter dem gleichen Domainnamen, und Logins von einem Wiki erscheinen in einem anderen Wiki. Sollten die nicht unabhängig voneinander sein?
Das wird verursacht von der Art, wie PHP Sessions behandelt. Siehe PmWikiDe.AuthUser#sessions wegen weiterer Details.
Gibt es einen Weg, die Zeit des letzten Logins für jeden Benutzer zu speichern, wenn man AuthUser benutzt?
Siehe Cookbook:UserLastAction.
Obwohl alle Einstellungen korrekt zu sein scheinen, funktioniert die Authentifizierung gegen LDAP nicht und es gibt kein LDAP-Log. Was ist falsch?
Vergewissern Sie sich, dass das ldap-php-modul installiert ist ( on debian apt-get install php(4|5)-ldap ; apache(2)ctl graceful )
Das Loginformular fragt nach Benutzernamen und Passwort, aber nur das Passwort spielt eine Rolle.
Vergewissern Sie sich, dass Sie nicht das Adminpasswort eingeben, wenn sie den Account testen. Wenn das Passwort mit dem des Admin übereinstimmt, wird die Autorisierung direkt durch die config.php-Datei vorgenommen und die anderen Systeme werden übersprungen.
Berücksichtigen Sie, dass man sich selbst mit eingeschaltetem AuthUser immer noch mit einem leeren Benutzernamen und nur der Eingabe des Passwortes einloggen kann. In dem Fall wird jedes eingegebene Passwort "akzeptiert", aber nur Passwörter, die in einem bestimmten Kontext authentifizieren, geben Ihnen auch Autorisierungsrechte. AuthUser koexistieren komfortabel mit dem passwort-basiertes System, wenn man diese Möglichkeit nutzt.
Wenn Sie Benutzernamen und Passwort beide abfordern wollen, dann müssen sie eine Admin-ID vor dem Einbinden von authuser.php setzen:
## Define usernames and passwords. $AuthUser['carol'] = '$1$CknC8zAs$dC8z2vu3UvnIXMfOcGDON0'; ## Enable authentication based on username. include_once('scripts/authuser.php'); # $DefaultPasswords['admin'] = pmcrypt('secret'); $DefaultPasswords['admin'] = 'id:carol';
Ein Benutzername und ein Passwort werden dann erforderlich sein, bevor ein Login erfolgreich ist.
Gibt es irgendeinen Weg, die IP-Adresse zu verbergen, sobald man eingeloggt ist, so dass registrierte Benutzer ihre IP-Adresse gegenüber jedem außer dem Administrator unsichtbar halten können?
Ja, siehe die in PITS:00400 angebotene Lösung.
Gibt es eine Möglichkeit, dass Leute sich selbst registieren können über AuthUser?
Sie können in zwei Kochbüchern nach Rezepten sehen, die dieses Feature anbieten: in HtpasswdForm und UserAdmin.
Ich hätte es gern, nachdem ich AuthUser angeschaltet habe und ein Benutzer auf meiner Site authentifiert ist, dass, wenn ich ein Passwort für eine bestimmte Seite oder Gruppe gesetzt habe, dieser Benutzer nur noch die typische Passwortzeile sieht und nicht mehr das Formular zur Eingabe von Benutzernamen und Passwort.
Übersetzung von PmWiki.AuthUser, Originalseite auf PmWikiDe.AuthUser — Rückverweise
Zuletzt geändert: | PmWikiDe.AuthUser | am 28.06.2016 |
PmWiki.AuthUser | am 05.05.2015 |