Home

PmWiki

pmwiki.org

edit SideBar

Passwörter verwalten

Administratoren

PmWiki hat eine eingebaute Unterstützung für den Schutz mitPasswörtern für verschiedene Bereiche der Wiki-Site. Passwörter können auf Einzelseiten, auf Wikigruppen oder die gesamte Website angewendet werden. Das hier beschriebene Passwortschutz-System ist nur ein kleiner Ausschnitt des kompletten Sicherheitssystems. Weitere Informationen dazu finden sich auf der Seite Sicherheit.

Autoren können PmWiki, wie in Passwörter beschrieben, dazu benutzen um an Einzelseiten und Wikigruppen Passwörter anzuhängen. Der WikiAdministrator kann jedenfalls auch Passwörter in den Dateien für lokale Anpassungen festlegen, so wie weiter unten beschrieben. Anmerkung: Man kann Passwörter nicht zuverlässig in Seiten- oder Gruppenanpassungsdateien setzen. Siehe im FAQ-Abschnitt wegen der Details.

Passwortgrundlagen

PmWiki unterstützt verschiedene Zugangsstufen zu Wikiseiten:

  • read-Passwörter erlauben das Anschauen der Inhalte von Wikiseiten.
  • edit-Passwörter kontrollieren das Bearbeiten und Verändern von Wikiseiten
  • attr-Passwörter kontrollieren, wer Passwörter auf Seiten überhaupt setzen darf (und übt somit Kontrolle über künftig in PmWiki bereit gestellte Eigenschaften aus)
  • upload-Passwörter kontrollieren, wenn das Hochladen von Dateien aktiviert ist, das Hochladen von Dateien und Anhängen.
  • Ergänzend können alle verfügbaren Aktionen durch Passwörter authorisiert werden.
  • Zum Schluß gibt es noch das admin Passwort, welches es einem Administrator erlaubt, Passwörter jeder Einzelseite oder Gruppen außer Kraft zu setzen.

Seiten haben ihre Passwörter als "Seiteneigenschaften", welche mittels Anhängen an die URL von ?action=attr zugänglich gemacht werden. Passwörter für Gruppen stehen auf einer besonderen, für jede Gruppe existierenden, "GroupAttributes" genannten Seite. Globale, die Website übergreifende Passwörter werden vom $DefaultPasswords-Array (Datenfeld) aus gesteuert. Alle Passwörter werden in einem verschlüsselten Format gespeichert, so dass andere Benutzer auf dem System befindliche Dateien, die eines Passworts bedürfen, nicht durch einfaches Browsen oder Erstöbern erreichen können.

Per Voreinstellung hat PmWiki die folgenden Passworteinstellungen:

  • $DefaultPasswords ist mit leeren (also ohne) read, edit, und attr Passwörtern eingestellt.
  • Das admin- und das upload-Passwort sind zunächst gesperrt.
  • Die Main- und die PmWiki-Gruppe haben ein gesperrtes attr-Passwort in ihren jeweiligen GroupAttributes-Seiten, um Autoren daran zu hindern, Passwörter auf Seiten in diesen Gruppen zu setzen. Um diese Passwörter zu verändern, wird Main.GroupAttributes?action=attr oder PmWiki.GroupAttributes?action=attr mit den entsprechenden Rechten gebraucht.
  • Die Seiten der Site-Gruppe, mit Ausnahme der SideBar, sind gesichert gegen Bearbeiten; die Site.SideBar-Seite erfordert das admin- oder das site-weite edit-Passwort.

Ein admin-Passwort kann benutzt werden, um die gesperrten Passwörter zu überwinden, darüber hinaus funktioniert gar kein Passwort. Natürlich kann der Administrator die gesperrten Passwörter setzen. Dann funktionieren diese Passwörter.

Site-weite Passwörter setzen

Eines der ersten Dinge, die ein Administrator nach dem Installieren tun sollte, ist ein admin-Passwort setzen. Um das websiteweite Administrator-Passwort auf "meingeheimnis" zu setzen, kann der Administrator die folgende Zeile in die Datei config.php setzen:

    $DefaultPasswords['admin'] = crypt('meingeheimnis');

Beachten Sie, dass der cryp()-Aufruf notwendig ist — PmWiki speichert und behandelt alle Passwörter intern als verschlüsselte Strings. Siehe den Crypt-Abschnitt weiter unten wegen Details, wie man das Klartext-Passwort aus der config.php-Datei eliminieren kann.

Um die ganze Site nur für solchen Benutzer bearbeitbar zu machen, die ein Bearbeiten-Passwort kennen, fügt man eine Zeile wie die Folgende in die config.php-Datei ein:

$DefaultPasswords['edit'] = crypt('bearbeiten_passwort');

Ähnlich kann man für jede der verfügbaren Aktionen ein site-weites Passwort setzen, d. h. $DefaultPasswords['read'], $DefaultPasswords['edit'] und $DefaultPasswords['upload'] zur Kontrolle des Standard-read-, -edit-, und -upload-Passworts für die ganze Site. Diese Standardpasswörter werden nur bei Seiten und Gruppen verwendet, für die kein Passwort gesetzt ist. Auch darf jedes der $DefaultPasswords ein Array verschlüsselter Passwörter enthalten.

$DefaultPasswords['read'] = array(crypt('alpha'), crypt('beta'));
$DefaultPasswords['edit'] = crypt('beta');

Das heißt, dass sowohl "alpha" als auch "beta" zum Betrachten von Seiten verwendet werden können, aber nur "beta" erlaubt jemandem das Bearbeiten der Seiten. Da PmWiki Passwörter, die einmal eingegeben wurden, während einer Sitzung behält, erlaubt das "beta"-Passwort sowohl Betrachten als auch Bearbeiten, während das "alpha"-Passwort nur Betrachten erlaubt. Eine Person ohne eines der Passwörter könnte Seiten noch nicht einmal ansehen.

Passwörter durch Referenzen setzen

Passwörter durch Referenzen zu setzen, erlaubt dem Administrator, das Passwort für einen ganzen Satz von Seiten zu ändern, das geht so einfach wie das Ändern von site-weiten Passwörtern. (Andernfalls müsste man die Attribute jeder Seite individuell ändern.) Man gibt in den Gruppen- oder Seitenattributen ein:

@_site_MeinPasswort2

und in der lokalen Konfigurationsdatei setzt man das eigentliche Passwort mit Zeilen wie diesen:

$DefaultPasswords['MeinPasswort2'] = array(crypt('secret'), '@admins');
$DefaultPasswords['MeinPasswort9'] = array('$1$NuBV/Mcc$GG3J60h.TLczUTRKhoVPM.');

Identitätsbasierte Passwörter (Benutzername/Passwort-Logins, AuthUser)

Anders als viele Systeme, die identitätsbasierte Systeme zu Kontrolle der Seitenzugriffe einsetzen (d. h. sie benutzen einen separaten Benutzenamen und ein Passwort für jeder Person), kommt PmWiki mit einem passwortbasierten System an, wie es oben beschrieben wurde. Generell sind passwortbasierte Systeme einfacher zu verwalten, da sie den administrativen Overhead des Erstellens von Benutzerkonten, des Restaurierens verlorengegangener Passwörter, und des Verzahnens der Benutzernamen mit erlaubten Aktionen vermeiden.

Allerdings erweitert PmWikis authuser.php-Skript das passwortbasierte System und erlaubt den Zugriff auf Seiten, basierend auf einer Benutzername-Passwort-Kombination. Siehe [AuthUser]] wegen weiterer Details über die Zugriffkontrolle auf Seiten, basierend auf Benutzeridentität.

Sicherheitslöcher ...

Administratoren müssen sorgfältig planen, wo Passwörter angewendet werden, um das Öffnen unbeabsichtigter Sicherheitslöcher zu vermeiden. Wenn Ihr Wiki offen ist (jeder kann lesen und schreiben), scheint das nicht beunruhigend zu sein, außer ein böswilliger oder verwirrter Benutzer kann ein Ansehen-Passwort für eine Gruppe setzen und die Gruppe vollständig unzugänglich für alle andern Benutzer machen. Als das Allerwenigste sollte auch ein offenes Wiki ein site-weites "admin"-Passwort und ein site-weites "attr"-Passwort in der config.php-Datei gesetzt haben. Die sample-config.php-Datei, die mit PmWiki ausgeliefert wird, zeigt, dass (nur) die PmWiki- und die Main-Gruppe "attr" standardmäßig gesperrt haben, aber wenn jemand eine neue Gruppe anlegt, ist "attr" frei. Administratoren müssen jedes Mal daran denken, das "attr"-Passwort für jede neue Gruppe zu setzen (wenn es gewünscht ist). Eine einfachere Lösung ist, diese Zeilen in die config.php-Datei zu schreiben:

$DefaultPasswords['admin'] = crypt('youradminpassword');
$DefaultPasswords['attr'] = crypt('yourattrpassword');

Passwörter verschlüsseln in config.php

Einen Pferdefuß hat es, die crypt()-Funktion in der config.php direkt zu verwenden, um Passwörter zu setzen, schließlich kann jeder, der die Möglichkeit hat, in die config.php hineinzusehen, das unverschlüsselte Passwort sehen. Wenn zum Beispiel die config.php

$DefaultPasswords['admin'] = crypt('meingeheimnis');

enthält, ist das "meingeheimnis"-Passwort Als Klartext für andere zu sehen. Allerdings kann ein Wikiadministrator eine verschlüsselte Form des Passwortes direkt eintragen und benutzen, indem er ?action=crypt an irgend einen URL einer Wikiseite anfügt (oder springen Sie eben zu PasswordsAdmin?action=crypt). Diese Aktion präsentiert ein Formular, in das man sein Passwort einträgt und das eine verschlüsselte Version des Passwortes erzeugt und anzeigt für den Gebrauch in der config.php. Wenn also das Passwort "meingeheimnis" übergeben wird, liefert PmWiki einen String zurück, der etwa so aussieht:

$1$sG2.F8..$g/tgMqCFlIKj1iFkcAAxx0

dazu eine Zeile, die man fast eins zu eins in die config.php kopieren kann:

$DefaultPasswords['type']='$1$sG2.F8..$g/tgMqCFlIKj1iFkcAAxx0';

Man muss nur noch 'type' durch 'admin'ersetzen.

Beachten Sie, dass in dieser verschlüsselten Form der Funktionsname und die Klammern entfernt sind. da das Passwort bereit verschlüsselt ist. Auch muss das Passwort in einfache Anführungszeichen gesetzt werden. In diesem Beispiel ist das Passwort, das der Administrator benutzt, noch immer "meingeheimnis", aber wenn jemand in die config.php sieht, wird er das Passwort durch bloßes Ansehen des verschlüsselten Passwortes nicht herausbekommen. Crypt liefert für ein und dasselbe Passwort verschiedene Verschlüsselungen — das ist normal, und macht es um so schwieriger, das eigentliche Passwort herauszubekommen.

Passwörter entfernen

Um ein Sitepasswort vollständig zu entfernen, so wie das standardmäßig gesperrte Passwort für 'upload', setzt man einen leeren String ein:

$DefaultPasswords['upload'] = '';

Es kann auch das Sonderpasswort "@nopass" (wird in der $AllowPassword Variablen festgelegt) mittels ?action=attr gesetzt werden. Dadurch wird eine nicht passwortgeschützte Seite in einer passwortgeschützten Gruppe erstellt oder eine nicht passwortgeschützte Gruppe innerhalb einer passwortgeschützten Website.

Ein Passwort ungültig machen oder aufheben

Wenn ein Passwort kompromittiert ist und der Wikiadministrator das Passwort schnell ungültig machen möchte, ist das Folgende in der local/config.php eine schnelle Lösung:

$ForbiddenPasswords = array('secret', 'tanstaafl');
if (in_array(@$_POST['authpw'], $ForbiddenPasswords)) 
    unset($_POST['authpw']);

Das hindert "secret" und "tanstaafl" daran, je wieder als ein gültiges Authorisierungspasswort angenommen zu werden ohne Rücksicht darauf, bei welcher Seite es angewandt wurde.

Aktionen schützen (Beispiel)

Jede verfügbare Aktion kann durch ein Passwort geschützt werden. Kochbuchautoren, die Skripte mit eigenen Aktionen bereitstellen, können das auch benutzen, aber ich begrenze das Beispiel auf eine (standardmäßig) nicht geschützte ?action=source. Diese Aktion zeigt die Wikiquelle der aktuellen Seite. Manchmal möchte man das nicht, insbesondere um E-Mail zu schützen oder man benutzt ein paar bedingte Texte, die nicht einfach vor jedem aufgedeckt werden sollen oder nur von Personen, die das Recht haben, die Seite zu bearbeiten.

Es gibt einige Lösungen dafür:

  1. Man begrenzt "source" nur auf Verfasser und fügt das zur local/config.php hinzu:
    $HandleAuth['source'] ='edit';
  2. Man benutzt "source" mit einem eigenen Passwort:
    $HandleAuth['source'] ='source';
    $DefaultPasswords['source'] = crypt(secret); # siehe oben

Wenn man das Passwort zusätzlich in die Attributes-Seite setzen möchte:

$PageAttributes['passwdsource'] = "$['Set new source password']";

Im allgemeinen gilt: fügt man einem Aktionsnamen in dem $PageAttributes-Array den Präfix 'passwd' hinzu, zeigt das an, man möchte für das gegebene Feld, dass es beim Speichern verschlüsselt wird.

Der volle Satz von Schritten zum Hinzufügen einer neuen Passworthandhabung für eine Aktion wie "diff" wäre:

# Füge ein neues (verschlüsseltes) Feld zur 'attr'-Seite hinzu
$PageAttributes['passwddiff'] = '$[Set new history password]';

# lösche das Standardpasswort für 'diff'
$DefaultPasswords['diff'] = '';

# Sage PmWiki, dass das 'diff'-Passwort die Aktion 'diff' erlaubt
$HandleAuth['diff'] = 'diff';

# Sage PmWiki, das das 'read-Passwort
# (oder alternativ das 'edit'-Passwort)
# auch reicht, um 'diff' zu ermöglichen
# natürlich geht auch das 'admin'-Passwort

$AuthCascade['diff'] = 'read';    ## or 'edit'

<< E-Mail Nachricht bei geänderten Seiten (neu) | Dokumentationsindex | Auffinden von verwaisten und fehlenden Seiten >>

Es scheint ein Standardpasswort zu geben, welches ist es?

Es gibt keine gültigen Passwörter, bis Sie eines setzen. Site-weite Passwörter setzen erklärt, wie man eines setzt.

PmWiki kommt "out of the box" mit dem $DefaultPasswords['admin'] auf '*' gesetzt. Das heißt nicht, das Passwort ist ein Sternchen, es bedeutet, das Standard-Administrator-Passwort muss etwas sein, das verschlüsselt zum Sternchen wird. Da das für die crypt()-Funktion unmöglich ist, jemals einen ein-Zeichen-langen verschlüsselten Wert zurückzugeben, ist das Administrator-Passwort tatsächlich gesperrt, bis der Administrator ein Passwort in config.php setzt.

Wie benutze ich eine passwd-formatierte Datei (wie .htpasswd) für die Authentifizierung?

Siehe AuthUser, Cookbook:HtpasswdForm or Cookbook:UserAuth.

Gibt es irgendetwas, das ich in das GroupAttributes-Feld eintragen kann, was 'das gleiche wie das Administrator-Passwort' bedeutet? Wenn nicht, gibt es irgendetwas, das ich in die config.php-Datei eintragen kann, um ebendas zu erreichen?

Geben Sie '@lock' in GroupAttributes?action=attr ein, damit diese Gruppe ein Administrator-Passwort benötigt.

Wie schütze ich – sagen wir mal – alle RecentChanges-Seiten gegen Bearbeiten?

Siehe Security#wikivandalism

Wie kann ich alle Seiten in einer Gruppe gegen Ansehen ('read') schützen, mit Ausnahme der Startseite (HomePage), wenn ich dafür Kofigurationsdateien benutzen will?

Wie in Individuelle Einstellungen pro Gruppe beschrieben, sollten Per-Gruppen- oder Per-Seiten-Konfigurationsdateien nicht benutzt werden, um Passwörter zu setzen. Der Grund ist, dass Per-Gruppen- oder Per-Seiten-Konfigurationsdateien nur für die aktuelle Seite geladen werden. Wenn $DefaultPasswords['read'] in local/GruppeA.php gesetzt ist, dann kann jemand eine Seite in einer anderen Gruppe nutzen, um Inhalte von Seiten aus GruppeA zu lesen. Zum Beispiel könnte Main.WikiSandbox dies enthalten:

(:include GroupA.SomePage:)

und weil die GruppeA.php-Datei nicht geladen wird (wir sehen uns ja Main.WikiSandbox an --> local/main.php), ist kein Ansehen-Passwort gesetzt.

Wie kann ich das Anlegen neuer Seiten mit einem Passwort schützen?

Siehe Cookbook:LimitWikiGroups, Cookbook:NewGroupWarning, Cookbook:LimitNewPagesInWikiGroups.

Wie ändere ich den Schirm mit der Aufforderung zum Passwort-eingeben?

Wenn Ihre Frage ist, wie ändere ich die Seite ... Bearbeiten Sie Site.AuthForm. Wenn ihre Frage dahingeht, wie man umstellt, welche Seite aufgerufen wird, wenn man nach einem Passwort gefragt wird, suchen sie Hilfe bei Cookbook:CustomAuthForm.

Wie ändere ich die Aufforderung auf dem Attribute-(?action=attr)-Schirm?

Legen Sie einfach eine neue Seite an (Site.AttrForm?), und fügen Sie die folgende Zeile in config.php ein:

$PageAttrFmt = 'page:Site.AttrForm';

Bachten Sie, dass das nur den Text über den Eingabefeldern ändert und nicht die Eingabefelder selbst — die Eingabefeldern muss man getrennt davon behandeln. Siehe Cookbook:CustomAttrForm wegen weiterer Informationen.

Ich bekomme einen http error 500 "Internal Server Error", wenn ich versuche, mich einzuloggen. Was ist falsch?

Das kann passieren, wenn das verschlüsselte Passwort nicht auf dem Server erzeugt wird, auf dem PmWiki gehostet wird.
Die crypt-Funktion hat sich während der Entwicklung von PHP geändert, d. h. dass ein Passwort, das mit PHP 5.2 verschlüsselt wurde, nicht mit PHP 5.1 entschlüsselt werden kann, aber PHP 5.2 kann Passwörter entschlüsseln, die mit PHP 5.1 verschlüsselt wurden.
Diese Situation passiert normalerweise, wenn Sie Alles auf Ihrem lokalen Rechner mit der letzten PHP-Version vorbereitet haben und Sie die Passwörter auf einen Webserver hochladen, der mit einer älteren Version läuft.
Der gleiche Fehler tritt auf, wenn Sie verschlüsselte Passwörter in die local/config.php einfügen.

Lösung: Erzeugen Sie die Passwörter auf dem System mit der ältesten PHP-Version und benutzen Sie sie auf allen anderen Systemen.

Ich möchte, dass meine Benutzer nur ein Bearbeiten-Passwort erstellen müssen, das dann automatisch auch als ihre 'upload'- und 'attr'-Passwörter gilt, ohne dass sie das getrennt setzen müssen. Wie mache ich das?

Indem Sie $HandleAuth wie hier einrichten:

      $HandleAuth['upload'] = 'edit';
      // Um u. a. eine WikiSandbox vorm Ändern ihres 'attr'-Rechts zu schützen außer durch den 
      // Admin (aber den Verfassern das Ändern ihrer eigenen Seiten/Gruppen zu erlauben)
      // And to prevent a WikiSandbox from having it's 'attr' permissions changed 
      // except by the admin (but allowing editors to change it on their own pages/group)
      if(($group=="Site") || ($group=="Main") || ($group=="Category") || 
                             ($group=="SiteAdmin") || ($group=="PmWiki") ) {
          // setze 'attr' auf das 'admiin'-Passwort für alle Main-Admin-Seiten 
          $HandleAuth['attr'] = 'admin';  
      } else { 
          // Wer Bearbeiten kann, kann auch Attribute setzen
          $HandleAuth['attr'] = 'edit';  
      }


Übersetzung von PmWiki.PasswordsAdmin Originalseite auf PmWikiDe.PasswordsAdmin - Rückverweise
Zuletzt geändert:
PmWikiDe.PasswordsAdmin am 10.09.2011
PmWiki.PasswordsAdmin am 03.06.2022