• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[GELÖST]LDAP Passwörter

nibbel

Newbie
Moin Leute
Ich habe hier ein interessantes Problem.
Wir haben hier eine menge user die wir von unserem alten YP/NIS ins LDAP übertragen wollen.
Ich habe mir ein Script gebastelt, das alle User einwandfrei aus der passwd zieht und sie dann in eine ldif datei mit passender Syntax schmeisst.
Auch das Passwort das ja bekanntlich CRYPT ist, lasse ich an die stelle "userPassword:" schreiben.
Im LDAP funzt dies aber nicht, obwohl ich auch meinen LDAP Server auf CRYPT eingestellt habe...

hier mal ein Beispiel:
LDAP CRYPT Passwort: e0NSWVBUfXXXXXXXX0YxY1RXXXXabk1zOHBlNllhXXXXcHMxRTZyYXX=
Debian CRYPT Passwort: mXXXiKXXVkXXX


Habe es natürlich etwas verändert (die X'e).
Die Anzahl der Zeichen habe ich aber nicht verändert.

Woran kann das liegen und ist es möglich die zu konvertieren?

Ansonsten müsste jeder User sein Passwort neu eingeben...
 

stka

Guru
Ich werde das mal nach security verschieben, aber ein shadoweintrag hier lassen. Da schaut dann bestimmt noch mal einer drüber der sich mit der Migration von Passwörtern auskennt, denn das scheint mir kein LDAP Problem zu sein. Kannst du mal dein Skript mit dem du die Benutzer migriert hast hier posten? Vielleicht liegt da ja was im argen. ICh würde da mal von mehren Seiten aus suchen.
 
OP
N

nibbel

Newbie
Ich poste das Script gerne mal, aber daran liegt es definitiv nicht.

Code:
#!/bin/bash
rm user.ldif

#Dateien mit Informationen erstellen:
#uname
cut -d: -f1 user.bak > uname.bak
#homedirectory
cut -d: -f6 user.bak > homedir.bak
#shell
cut -d: -f7 user.bak > shell.bak
#uid
cut -d: -f3 user.bak > uid.bak
#gid
cut -d: -f4 user.bak > gid.bak
#sure/name
cut -d: -f5 user.bak > name.bak
#crypt passwd
cut -d: -f2 user.bak > passwd.bak

#Allgemeine Variablen
rows=$(cat user.bak |wc -l)
ldiffile=user.ldif
oUnit="people"
baseDN="dc=XXX,dc=XXX"
i=1
sambaSID=61000

while [ "$rows" != "0" ]; do

        #Variablen fuer LDIF Datei:
        uname=$(tail -n1 uname.bak)
        homedir=$(tail -n1 homedir.bak)
        shell=$(tail -n1 shell.bak)
        fullname=$(tail -n1 name.bak)
        uid=$(tail -n1 uid.bak)
        gid=$(tail -n1 gid.bak)
        passwd=$(tail -n1 passwd.bak)
        surename=$(tail -n1 name.bak|cut -d\  -f2)
        name=$(tail -n1 name.bak|cut -d\  -f1)
        # grep -w wuerde hier auch gehen.
        sambaLM=$(grep '^'$uname':' smbpasswd.bak | cut -d: -f3)
        sambaNT=$(grep '^'$uname':' smbpasswd.bak | cut -d: -f4)


        #LDIF Anzeigen
        echo \#User Nr. $i  >> $ldiffile
        echo dn: uid=$uname,ou=$oUnit,$baseDN >> $ldiffile
        echo \#objectClass: shadowAccount >> $ldiffile
        echo objectClass: posixAccount >> $ldiffile
        echo objectClass: inetOrgPerson >> $ldiffile
        echo objectClass: organizationalPerson >> $ldiffile
        echo objectClass: person >> $ldiffile
        if [ "$uname" = "$(grep '^'$uname':' smbpasswd.bak | cut -d: -f1)" ]; then
                echo    objectClass: sambaSamAccount >> $ldiffile
                echo    sambaSID: S-1-5-21-573475172-1643248237-2101132993-$sambaSID >> $ldiffile
                echo    sambaLMPassword: $sambaLM >> $ldiffile
                echo    sambaNTPassword: $sambaNT >> $ldiffile
                echo    sambaPwdLastSet: 1226660400 >> $ldiffile
        fi
        echo \#shadowWarning: 10 >> $ldiffile
        echo \#shadowInactive: 10 >> $ldiffile
        echo \#shadowMin: 1 >> $ldiffile
        echo \#shadowMax: 365 >> $ldiffile
        echo homeDirectory: $homedir >> $ldiffile
        echo loginShell: $shell >> $ldiffile
        echo uid: $uname >> $ldiffile
        echo cn: $fullname >> $ldiffile
        echo uidNumber: $uid >> $ldiffile
        echo gidNumber: $gid >> $ldiffile
        echo sn: $surename >> $ldiffile
        if [ "$name" != "" ]; then
                echo givenName: $name >> $ldiffile
        fi
        echo userPassword: $passwd >> $ldiffile
        echo   >> $ldiffile



        #Dateien um eine Zeile verkuerzen
        sed '$d' uname.bak >> temp
        mv -f temp uname.bak

        sed '$d' homedir.bak >> temp
        mv -f temp homedir.bak

        sed '$d' shell.bak >> temp
        mv -f temp shell.bak

        sed '$d' name.bak >> temp
        mv -f temp name.bak

        sed '$d' uid.bak >> temp
        mv -f temp uid.bak

        sed '$d' gid.bak >> temp
        mv -f temp gid.bak

        i=$(($i+1))
        rows=$(($rows-1))
        sambaSID=$(($sambaSID+1))
done

rm -rf uname.bak shell.bak name.bak uid.bak gid.bak homedir.bak

Nichts über mein script ;) War so ziemlich das erste auf der Basis. Habe mittlerweise ideen um das ding winzig zu machen, aber warum, es geht und ist nicht sonderlich langsam.
 

Tooltime

Advanced Hacker
Gleich vorweg, eigentlich habe ich keine große Ahnung von LDAP. Aber wenn die Fachmänner nicht weiter wissen müssen halt die Laien ran. Meine letzten Gehversuche unter LDAP habe ich übrigens unter 9.1 unternommen.
nibbel schrieb:
Ich habe mir ein Script gebastelt, das alle User einwandfrei aus der passwd zieht und sie dann in eine ldif datei mit passender Syntax schmeisst.
Auch das Passwort das ja bekanntlich CRYPT ist, lasse ich an die stelle "userPassword:" schreiben.
Erste gewagte These. Meinen betagten Aufzeichnungen entnehme ich, das der Hashtyp der Hashsumme vorran gesetzt werden muss.
Beispiele:
Code:
userPassword: {SSHA}SIZt7SU57L8WhainyZnhIBQNT9G2sCkP
userPassword: {MD5}TmZgZ01/Z0/29bOPByMr4A==
nibbel schrieb:
Im LDAP funzt dies aber nicht, obwohl ich auch meinen LDAP Server auf CRYPT eingestellt habe...
Wie? Soweit ich mich erinnere, konnte man nur den Hashtyp für Passwortänderungen festlegen.
nibbel schrieb:
LDAP CRYPT Passwort: e0NSWVBUfXXXXXXXX0YxY1RXXXXabk1zOHBlNllhXXXXcHMxRTZyYXX=
Ein Crypt-Hash hat 13-ASCII Zeichen, 2-Byte für das salt u. 11-Byte für die Hashsumme. Da brauche ich gar nicht zu zählen, das ist niemals ein Crypt-Hash. Zum Testen kann man ja mal ein Passwort per Hand generieren:
  • slappasswd -s passwort -h {CRYPT}
 

ThomasF

Hacker
Hi,

ja ich muss Tooltime recht geben ...

Ich kann zwar nicht mit Bestimmtheit sagen das NIS immer nur CRYPT verwendet ... ich könnte mir vorstellen das NIS+ z.B auch MD5 verwenden könnte ... wer weiß ;)

Aber das LDAP Attribut userPassword beinhaltet immer den Hashtyp ... für Crypt dann eben {CRYPT} ... ohne den Typ würde von einem Klartext-Passwort ausgegangen ... genau wie in der slapd.conf auch

So long

ThomasF
 

panamajo

Guru
Tooltime schrieb:
Ein Crypt-Hash hat 13-ASCII Zeichen, 2-Byte für das salt u. 11-Byte für die Hashsumme. Da brauche ich gar nicht zu zählen, das ist niemals ein Crypt-Hash.
Das ist schon lange her, üblich ist heutzutage eher
Crypt MD5 ($1$ + 12 Zeichen Salt + $ + 22 Zeichen PW)
Crypt Blowfish ($2$ + 16 Zeichen Salt + $ + 32 Zeichen PW)
 
Üblich ist heutzutage
SHA-256 Crypt ($5$ + 16 Salz + $ + 43 Key)
SHA-512 Crypt ($6$ + 16 Salz + $ + 86 Key)
Wobei Salz und Key natürlich den Auflagen des Standards zugrunde liegen.

Blowfish ist außerdem $2a$.
 
OP
N

nibbel

Newbie
Das stimmt natürlich, CRYPT ist schon lange nicht mehr das, was man will. Dennoch komme ich nicht drum rum..

Eine umstellung wird definitv noch kommen, nur nicht zu diesem Zeitpunkt.


Ein passwort händisch im CRYPT fürs LDAP hat auch ein echtes CRYPT ergeben.
Warum er nun aber einfach nicht akzeptiert, das es immer CRYPT ist, weiss ich nicht..
 
OP
N

nibbel

Newbie
Mittlerweile raffe ich nix mehr.

Wie gesagt, das
Code:
slappasswd -s passwort -h {CRYPT}
erzeugt 1a CRYPT passwörter.
Auch über
Code:
dpkg-reconfigure
stelle ich CRYPT ein.

Zusätzlich auch noch im LAM ist CRYPT genutzt.
Dennoch speichert er über LAM generierte passwörter immer in dem nicht definierbaren Hash:

Code:
e0NSWVBUfXXXXXXXX0YxY1RXXXXabk1zOHBlNllhXXXXcHMxRTZyYXX=

kann mir jemand sagen, wie er die Verschlüsselung von LDAP einstellt?
Vielleicht übersehe ich ja einfach etwas.
 

ThomasF

Hacker
Hmm,

ich kenne den LAM nicht so gut ... holt sich das Programm auch Infos aus der lokalen ldap.conf ?

In einer ldap.conf würde mir dazu der Parameter "pam_password exop" einfallen ... damit der Client auch das benutzt was der Server ihm vorgibt ... oder so ähnlich ;)

Und in der slapd.conf gab es auch einen Parameter welcher Hash "bevorzugt" werden soll ... oder so ähnlich *fg*

So long

ThomasF
 
nibbel schrieb:
Dennoch speichert er über LAM generierte passwörter immer in dem nicht definierbaren Hash:
Code:
e0NSWVBUfXXXXXXXX0YxY1RXXXXabk1zOHBlNllhXXXXcHMxRTZyYXX=
Und wie der definiert ist. Das ist nur base64-encodiert, so wie es LDIF erfordert :wink:
 
OP
N

nibbel

Newbie
Jungs, ich habe den "Fehler" gefunden...

So einfach kanns sein:

userPassword: {CRYPT}DANNDAS CRYPT HASHED PASSWORT

...
Da muss man erst mal drauf kommen!
 

Tooltime

Advanced Hacker
nibbel schrieb:
Da muss man erst mal drauf kommen!
Wieso, ist doch schon längst alles passiert!
Tooltime schrieb:
Meinen betagten Aufzeichnungen entnehme ich, das der Hashtyp der Hashsumme vorran gesetzt werden muss.
Beispiele:
CODE: ALLES AUSWÄHLEN
userPassword: {SSHA}SIZt7SU57L8WhainyZnhIBQNT9G2sCkP
userPassword: {MD5}TmZgZ01/Z0/29bOPByMr4A==
Tooltime schrieb:
Zum Testen kann man ja mal ein Passwort per Hand generieren:
slappasswd -s passwort -h {CRYPT}
Ergibt als Ergebnis {CRYPT}3oQDdbgoRmZ4U und ich gehe einfach mal davon aus, das man mit man slappasswd die Beschreibung des Befehls durchliest.

Gegenfrage, wie soll man die Info Darstellen, damit sie auch beachtet wird? Vielleicht kann man hier im Forum ein Tag für blinkenden Text einbauen?
 
Oben