Passwort Synchronisation von Samba nach Unix


By rakekniven - Posted on 27 August 2005

Passwort Synchronisation von Samba nach Unix

Nach 5 Stunden probierens und erfolgloser Recherche im Netz habe ich das nun am Laufen.
Beschrieben ist es fast überall gleich.
Der Haken bei mir war der Parameter passwd chat.
Um allen das Probieren mit passwd chat zu ersparen habe ich diese Zeilen verfasst.

OS : SuSE 8.0
Samba : 2.2.3 a

Das Problem :

  1. Erst einmal wie es laufen sollte.
  2. Weiter unten dann die Konfiguration.

Ich möchte meinen Usern das ändern des Passwortes über SWAT erlauben.
Dazu öffnen die User einen Browser und geben die IP-Adresse des Samba-Servers gefolgt von einem ":901" ein.
SWAT läuft (horcht) auf Port 901.

Nach Aufruf der URL kommt ein zweites Fenster welches Eingaben erfodert.
Hier nun den Usernamen und das UnixPasswort eingeben.

Das ist schon die erste Tücke. SWAT nimmt zum Authentifizieren das UnixPasswort und nicht das von Samba.
Dies kann zum Problem werden wenn diese nicht gleich sind.

Waren die Eingaben richtig so erscheint die Begrüssungsmaske von SWAT.
Hier nun die Seite "Password" auswählen.
Hier soll der User nun einmal das alte Passwort eingeben und zweimal das neue Passwort.
Abschliessend auf "Change Password" klicken und abwarten was passiert.

 

Hat alles geklappt erscheint die Maske wieder, jedoch mit dem makierten Zusatz
"The passwd for 'username' has been changed".

 

Hat es nicht geklappt dann erscheint etwas wie folgend dargestellt.

Das kann mehrere Ursachen haben :

  • Das Passwort ist zu kurz. Bei meinem Beispiel sind mind. 5 Zeichen erforderlich.
  • Das alte Passwort war falsch
  • Die beiden neuen Passwörter waren nicht identisch eingegeben.
  • Der Passwd Chat ist nicht ok ;-)

 

Nun die Konfiguration :

Die wichtigen Zeilen aus meiner Konfigurationsdatei smb.conf

<--schnipp-->
log level = 2
#log level = 100
passwd program = /usr/bin/passwd %u
passwd chat = *changing* %n\n *new* %n\n *changed*
unix password sync = True
#passwd chat debug = True
<--schnapp-->

Die Zeilen im einzelnen :

log level
Dieser Parameter ist eine Stufe und besagt wieviel Loginformationen Samba in seine Logfiles schreiben soll.

passwd program
Dies ist der Pfad welchem Samba mitteilt welches Programm benutzt werden soll um das UnixPasswort zu ändern und wie es aufgerufen werden soll.

passwd chat
Legt fest, wie die Passwort-Abfrage für ein neues Passwort abläuft.
Es wird eine Sequenz von Frage- und Antwort-Paaren definiert, die der smbd-daemon zur Kommunikation mit passwd program verwendet . Diese Sequenz beinhaltet Parameter die dem passwd programm übergeben und welche Antworten erwartet werden.
Folgende Variablen können benutzt werden :
%o = altes Passwort
%n = neues Passwort
\n =Zeilvorschub
\r = Wagenrücklauf
\t = Tabulator
\s = Leerzeichen
* = beliebige Zeichenfolge
Default ist : passwd chat = *new*password* %n\n *new*password* %n\n *changed*

unix password sync
Hat der Parameter den Wert True (default ist False) so wird das geänderte SambaPasswort auch auf Unixseite geändert.
Das Programm wird als root aufgerufen !
Damit wird das ändern des Passwortes ohne Wissen des alten Passwortes (im Klartext) möglich

 

passwd chat debug
Wenn es mal Ärger gibt mit der Änderung des Passwortes dann hilft es die letzte Zeile auszukommentieren.
Damit wird passwd chat debug auf True gesetzt (default ist False).
Ebenfalls muss das log level auf 100 gesetzet werden.
Nun wird die Interaktionen mit dem Passwortprogramm in das smbd-logfile geschrieben.
Doch Vorsicht auch die Passwörter sind nun im Klartext sichtbar und das logfile nimmt rasant riesige Dimensionen an.
Doch nur so kommt man einem fehlerhaften passwd chat auf die Schliche.

Schaue Dir also genau an wie der Dialog für root aussieht wenn er das Passwort eines Users ändern möchte.
Bei mir sah das so aus :

joe:~ # passwd <username>
Changing password for <username>
New password:
Re-enter new password:
Password changed
joe:~ # 

Daraufhin habe ich folgenden Dialog gebastelt :

passwd chat = *changing* %n\n *new* %n\n *changed*

Mit *changing* wird Changing password for <username> New password:erwartet.
Nun mit %n\n das neue Passwort gesendet mit einem Zeilenvorschub.
Mit *new* wird Re-enter new password:erwartet.
Nochmals mit %n\n das neue Passwort gesendet mit einem Zeilenvorschub.
Mit *changed* wird Password changed erwartet.
Hat alles geklappt so wird nun auch das SambaPasswort geändert, andernfalls erscheint obige Fehlermeldung in Swat.

So nun Spass beim Passwörter ändern.
Und nicht verzagen > es geht !!!