PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LDAP und kein Ende



pixel
26.06.03, 23:17
Hi@all,

nachdem sowohl das gedruckte wie auch das verfügbare, deutschsprachige Onlinematerial weitesgehends unbrauchbar ist habe ich mich daran gesetzt die Doku auf openldap.org durchzulesen.

Um ein wenig Erfahrung im Umgang mit LDAP zu bekommen möchte ich mit einem ganz einfachen Beispiel anfangen. Dazu habe ich folgende slapd.conf erstellt:

include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema

pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args
database ldbm
suffix "dc=dreampixel,dc=de"
rootdn "cn=Manager,dc=dreampixel,dc=de"
rootpw secret
directory /var/lib/ldap
index objectClass eq

anschliessend habe ich den LDAP-Server gestartet was ohne Probleme geklappt hat. Weiter habe ich eine Datei 'dreampixel.ldif' mit folgendem Inhalt:

dn: dc=dreampixel,dc=de
objectclass: dcObject
objectclass: organization
o: dreampixel
dc: dreampixel

dn: cn=Manager,dc=dreampixel,dc=de
objectclass: organizationalRole
cn: Manager

erstellt. Abschliessend wollte ich die Daten einfügen mit:

ldapadd -x -D "cn=Manager,dc=dreampixel,dc=de" -W -f dreampixel.ldif

danach werde ich nach dem Passwort gefragt, egal was ich jedoch eingebe. Ich erhalte immer die Fehlermeldung:

Enter LDAP Password:
ldap_bind: Server is unwilling to perform (53)
additional info: unwilling to allow anonymous bind with non-empty DN

Ich denke mal das die Anmeldung zum hinzufügen mit dem Account 'Manager' erfolgen soll und das ich nach dessen Passwort gefragt werde. Nur dieses habe ich nicht, Auf dem LDAP-Server existier neben root kein weiterer User. Wie muss ich vorgehen?

Gruss Pixel

[WCM]Manx
27.06.03, 07:09
Hi!

Welche Distri?
Das Rootpw ist NICHT Klartext sondern ein Hash!


manx:~# slappasswd
New password:
Re-enter new password:
{SSHA}Bnr6LoMPNXUg4vnBzOlST3FTAqIAELo6
manx:~#

Manx

xstevex22
27.06.03, 08:19
Original geschrieben von [WCM]Manx
Hi!

Welche Distri?
Das Rootpw ist NICHT Klartext sondern ein Hash!


manx:~# slappasswd
New password:
Re-enter new password:
{SSHA}Bnr6LoMPNXUg4vnBzOlST3FTAqIAELo6
manx:~#

Manx

Stimmt nicht, geht auch Klartext. Diese Fehlermeldung habe ich noch nie erhalten, post einfach mal meine slapd.conf:

# $OpenLDAP: pkg/ldap/servers/slapd/slapd.conf,v 1.8.8.7 2001/09/27 20:00:31 kurt Exp $
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/osint.schema

# Define global ACLs to disable default read access.

# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral ldap://root.openldap.org

pidfile /var/run/slapd.pid
argsfile /var/run/slapd.args

# Create a replication log in /var/lib/ldap for use by slurpd.
# replogfile /var/lib/ldap/master-slapd.replog

# Load dynamic backend modules:
# modulepath /usr/sbin/openldap
# moduleload back_ldap.la
# moduleload back_ldbm.la
# moduleload back_passwd.la
# moduleload back_shell.la

#
# The next two lines allow use of TLS for connections using a dummy test
# certificate, but you should generate a proper certificate by changing to
# /usr/share/ssl/certs, running "make slapd.pem", and fixing permissions on
# slapd.pem so that the ldap user or group can read it.
TLSCertificateFile /etc/openldap/certs/server.pem
TLSCertificateKeyFile /etc/openldap/certs/server.pem

#
# Sample Access Control
# Allow read access of root DSE
# Allow self write access
# Allow authenticated users read access
# Allow anonymous users to authenticate
#
access to *
by self write
by users auth
by anonymous auth


# if no access controls are present, the default is:
# Allow read by all
#
# rootdn can always write!

################################################## #####################
# ldbm database definitions
################################################## #####################
database ldbm
suffix "dc=test,dc=de"

rootdn "cn=ldapadmin,dc=bfst,dc=de"

# Cleartext passwords, especially for the rootdn, should
# be avoided. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw secret


# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd/tools. Mode 700 recommended.
directory /var/lib/ldap

# Indices to maintain
index objectClass,uid eq
index cn,mail,surname,givenname eq,subinitial

# Replicas to which we should propagate changes
#replica host=ldap-1.example.com:389 tls=yes
# bindmethod=sasl saslmech=GSSAPI
# authcId=host/ldap-master.example.com@EXAMPLE.COM

und die passende ldif:

version: 2

#
# filter: (objectclass=*)
# requesting: ALL
#

version: 2

#
# filter: (objectclass=*)
# requesting: ALL
#

# test,dc=de
dn: dc=test,dc=de
objectClass: organization
objectClass: dcObject
dc: test
o: test

# ldapadmin,dc=test,dc=de
dn: cn=ldapadmin,dc=test,dc=de
objectClass: organizationalRole
cn: ldapadmin

# osint,dc=test,dc=de
dn: ou=osint,dc=test,dc=de
objectClass: organizationalunit
ou: osint

pixel
27.06.03, 12:53
Hi@all,

ich benutze SuSE-8.2.

slappasswd
New password:
Re-enter new password:
Also muss ich mit diesem Befehl zuerst das Passwort setzen? Muss ich diesen Hash-Wert der anschliessend ausgegeben wird irgendwo eintragen?


Stimmt nicht, geht auch Klartext. Diese Fehlermeldung habe ich noch nie erhalten, post einfach mal meine slapd.conf:

Also ich möchte schon verschlüsselte Passwörter. Die slapd.conf?? Die habe ich doch ober gepostet? Habe ich jetzt was falsch verstanden?

Ich habe am Server nun mal slappasswd ausgeführt, anschliessend ein PAsswort definiert und wenn ich anschliessend wieder:

ldapadd -x -D "cn=Manager,dc=dreampixel,dc=de" -W -f dreampixel.ldif

aufrufe erhalte ich als Meldung:

ldap_bind: Invalid credentials (49)

Gruss Pixel

xstevex22
27.06.03, 13:25
Hi!
Wenn du die Passwörter verschlüsselt eintragen willst, musst du die Verschlüsslungsmethode davor schreiben:

rootpw {crypt}<encrypted-password>

http://www.redhat.com/docs/manuals/linux/RHL-7.3-Manual/ref-guide/s1-ldap-files.html

pixel
30.06.03, 17:41
Hi@all,

kann mir jemand erklären wie ich dazu vorgehen muss? Bei der Installation des Rechners habe ich die Passwortverlüsselung auf 'MD5' eingestellt.

Wie ermittle ich das verschlüsselte Passwort?

Gruss Pixel

xstevex22
30.06.03, 17:56
Hi!
Was willst du denn nun genau machen ? Geht es dir nur um die Speicherung des verschlüsselten admin Passworts für den admin in der slapd.conf ??
Wenn ja, solltest du eigentlich unter der von mir geposteten URL Hilfe finden:

perl -e "print crypt('passwd','a_salt_string');"

z.B. perl -e "print crypt('meinpasswd','A5');"

Der zurückgegebene String kommt nun in deine slapd.conf:

..
rootpw {crypt}<zurückgegebener String>
..

pixel
30.06.03, 20:59
Hi@all,

also ich möchte die User im Netzwerk zentral auf dem LDAP-Server verwalten d.h. die User die sich am Client anmelden müssen sich am LDAP-Server anmelden und das wenn möglich mit verschlüsselten Passwörtern.
Da ich noch Neuling in Bezug auf LDAP bin, im Netz keine brauchbaren deutschen Dokus gefunden habe und das von mir bestellte Buch zum Thema noch nicht da ist wollte ich mal mit einer kleinen Aufgabe beginnen.
Leider klappt nichteinmal das.
Ich habe die /etc/openldap/slapd.conf wie oben bereits gepostet erstellt und habe anschliessend den LDAP-Server gestartet. Wenn ich das richtig verstanden habe muss ich einen Admin für den den LDAP-Server anlegen. Warum eigentlich, kann ich nicht root benutzen?
Zuerst habe ich versucht mit 'slappasswd' das Passwort zu setzen. Was dabei rauskam steht ja weiter oben. Für was ist dieser Befehl denn dann, zum setzen von unverschlüsselten Passwörten? Anschliessend habe ich mit perl -e "print crypt('meinpasswd','A5');" das von mir gewünschte Passwort in verschlüsselter Form erzeugt. Der String der dabei ausgegeben wurde habe ich in der slapd.conf eingesetzt und zwar in der Form:
rootpw {crypt}A5gM/8N1Ic8zI
anschliessend habe ich den LDAP-Server neu gestartet. Nun habe ich ein Textfile mit dem oben bereits geposteten Inhalt erzeugt um zuerst mal dem LDAP-Manager hinzuzufügen.
Wenn ich jedoch versuche dies mit
ldapadd -x -D "cn=Manager,dc=dreampixel,dc=de" -W -f dreampixel.ldif
in den LDAP-Server zu bringen werde ich nach dem Passwort gefragt wo ich natürlich das gleiche eingebe womit ich zuvor diesen verschlüsselten Wert erzeugt habe.

Als Ausgabe erhalte ich:
adding new entry "dc=dreampixel,dc=de "
ldapadd: update failed: dc=dreampixel,dc=de
ldap_add: Invalid syntax (21)
additional info: objectclass: value #0 invalid per syntax

Ich habe die Syntax von meinem ldif File übrprüft und kann keinen Fehler finden:
Hier ist es nochmal:

dn: dc=dreampixel,dc=de
objectclass: dcObject
objectclass: organization
o: dreampixel
dc: dreampixel

dn: cn=Manager,dc=dreampixel,dc=de
objectclass: organizationalRole
cn: Manager

Gruss Pixel

pixel
30.06.03, 21:10
Hi@all,

es war ein kleiner Fehler in meinem ldif File und zwar waren an den Zeilenenden jeweils Leerzeichen enthalten und das mag er wohl gar nicht.

Danach erhielt ich die Ausgabe:

adding new entry "dc=dreampixel"
adding new entry "cn=Manager,dc=dreampixel"

(ich habe das letzte dc=de in allen Files rausgenommen). Wie kann ich nun überprüfen ob der LDAB-Server von den Clients aus erreichbar ist?

Gruss Pixel

xstevex22
30.06.03, 21:51
Hi!
Du kannst prüfen, ob der LDAP Rechner von den Clients aus erreichbar ist mittels:

ldapsearch -h <ldap-ip> -p 389 -x -D "cn=Manager,dc=dreampixel,dc=de" -W -b "dc=dreampixel,dc=de"

Auf diese Weise solltest du auf jeden Fall Ergebnisse bekommen. Wenn du anonymen Lesezugriff haben willst, muss das gesondert konfiguriert werden.

Wenn du die Anmeldung über einen LDAP Server machen willst, helfen die Scripts unter http://www.padl.com/OSS/MigrationTools.html
Damit kann man sich die nötigen Dateien erzeugen, und dann PAM so umstellen, dass man sich nicht über die lokale passwd anmeldet, sondern über den LDAP-Server. Bei RedHat kann man easy die Anmeldung auf LDAP umstellen.

Edit: Bei Befehl oben die dc=de weglassen, habe gerade erst den Hinweis in deinem Post gesehen

pixel
01.07.03, 20:18
Hi@all,

also der Server ist vom Client aus erreichbar. Bevor ich jetzt ein grossartige Struktur anlege dachte ich mir ich mache mich zuerst mal mit den Befehlen ein wenig vertraut. Dabei sind jedoch noch ein paar Fragen aufgetaucht.

1.) Ich habe nachdem ich die Organisation und den Manager angelegt hatte zwei weitere Unterobjekte (Container) angelegt und diese auch wieder entfernt. Hat geklappt. Wenn ich nun aus irgend einem Grunde den LDAP-Admin (Manager) oder gar das oberste Objekt löschen möchte funktioniert das nicht. Muss ich hierzu einen anderen Befehl verwenden?

2.) Ist es zwingend notwenig das der LDAP-Admin eine eigenständige 'Person' ist? Kann man hierzu nicht den root nehemen oder ist das nicht zu empfehlen?

Gruss Pixel

xstevex22
01.07.03, 20:52
Hi!

> 2.) Ist es zwingend notwenig das der LDAP-Admin eine eigenständige 'Person' ist?
> Kann man hierzu nicht den root nehemen oder ist das nicht zu empfehlen?

Du gibst in deiner slapd.conf an, wer der privelegierte Nutzer ist, sprich der "root" des LDAP's. Dieser kann natürlich auch root heißen, allerdings immer in der Notation wie du sie bereits gemacht hast (cn=root,dc=example,dc=com).

mamue
02.07.03, 08:58
Wenn Du die Wurzel des Verzeichnissdienstes löschen möchtest, also alles, dann geht das am einfachsten, indem Du die gesamte Datenbank löschst.
rcldap stop
rm -rf /var/lib/ldap (siehe slapd.conf für genauen Ort)

BTW slapcat und slapadd zur Datensicherung bzw Rücksicherung sind prima tools ;-)


mamue

pixel
02.07.03, 12:08
Hi@all,

also das mit dem löschen hat funktioniert.

Ich habe mir diese Migrationstools mal angeshen und habe folgenden Fall ausprobiert. Ich habe auf der Linux-Maschiene einen User angelegt und danach die beiden Skripte:

migrate_group.pl
migrate_passwd.pl

Aufgerufen. Dadurch sollten doch die Gruppen und die User in den LDAP übertrag sein oder? Wenn ich anschliessend ldapsearch.... ausführe ist jedoch nichts drin. Hier die Ausgabe der Befehle:

darwin:/data/download/MigrationTools-44 # ./migrate_group.pl /etc/group
dn: cn=root,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: root
userPassword: {crypt}x
gidNumber: 0

dn: cn=bin,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: bin
userPassword: {crypt}x
gidNumber: 1
memberUid: daemon

dn: cn=daemon,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: daemon
userPassword: {crypt}x
gidNumber: 2

dn: cn=sys,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: sys
userPassword: {crypt}x
gidNumber: 3

dn: cn=tty,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: tty
userPassword: {crypt}x
gidNumber: 5

dn: cn=disk,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: disk
userPassword: {crypt}x
gidNumber: 6
memberUid: sven

dn: cn=lp,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: lp
userPassword: {crypt}x
gidNumber: 7

dn: cn=www,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: www
userPassword: {crypt}x
gidNumber: 8
memberUid: sven

dn: cn=kmem,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: kmem
userPassword: {crypt}x
gidNumber: 9

dn: cn=wheel,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: wheel
userPassword: {crypt}x
gidNumber: 10
memberUid: sven

dn: cn=mail,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: mail
userPassword: {crypt}x
gidNumber: 12
memberUid: sven

dn: cn=news,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: news
userPassword: {crypt}x
gidNumber: 13

dn: cn=uucp,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: uucp
userPassword: {crypt}x
gidNumber: 14
memberUid: sven

dn: cn=shadow,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: shadow
userPassword: {crypt}x
gidNumber: 15

dn: cn=dialout,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: dialout
userPassword: {crypt}x
gidNumber: 16
memberUid: sven

dn: cn=audio,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: audio
userPassword: {crypt}x
gidNumber: 17
memberUid: sven

dn: cn=floppy,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: floppy
userPassword: {crypt}x
gidNumber: 19
memberUid: sven

dn: cn=cdrom,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: cdrom
userPassword: {crypt}x
gidNumber: 20
memberUid: sven

dn: cn=console,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: console
userPassword: {crypt}x
gidNumber: 21

dn: cn=utmp,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: utmp
userPassword: {crypt}x
gidNumber: 22

dn: cn=at,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: at
userPassword: {crypt}x
gidNumber: 25

dn: cn=public,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: public
userPassword: {crypt}x
gidNumber: 32
memberUid: sven

dn: cn=video,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: video
userPassword: {crypt}x
gidNumber: 33
memberUid: sven

dn: cn=games,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: games
userPassword: {crypt}x
gidNumber: 40
memberUid: sven

dn: cn=xok,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: xok
userPassword: {crypt}x
gidNumber: 41

dn: cn=trusted,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: trusted
userPassword: {crypt}x
gidNumber: 42

dn: cn=modem,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: modem
userPassword: {crypt}x
gidNumber: 43

dn: cn=named,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: named
userPassword: {crypt}x
gidNumber: 44

dn: cn=ftp,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: ftp
userPassword: {crypt}x
gidNumber: 49

dn: cn=postfix,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: postfix
userPassword: {crypt}x
gidNumber: 51

dn: cn=maildrop,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: maildrop
userPassword: {crypt}x
gidNumber: 59

dn: cn=man,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: man
userPassword: {crypt}x
gidNumber: 62

dn: cn=sshd,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: sshd
userPassword: {crypt}x
gidNumber: 65

dn: cn=ldap,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: ldap
userPassword: {crypt}x
gidNumber: 70
memberUid: sven

dn: cn=nobody,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: nobody
userPassword: {crypt}x
gidNumber: 65533

dn: cn=nogroup,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: nogroup
userPassword: {crypt}x
gidNumber: 65534
memberUid: nobody

dn: cn=users,ou=Group,dc=padl,dc=com
objectClass: posixGroup
objectClass: top
cn: users
userPassword: {crypt}x
gidNumber: 100

Muss ich das Perl-Skript erst noch anpassen oder warum fügt er die nicht ein?

Gruss Pixel

xstevex22
02.07.03, 15:37
Hi!
Du musst die Datei migrate_common.ph noch anpassen. Ändere die Parameter

# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "padl.com";

# Default base
$DEFAULT_BASE = "dc=padl,dc=com";

...

auf deine Einstellungen in der slapd.conf ab (dc=dreampixel,dc=de, dreampixel.de)

pixel
02.07.03, 17:11
Hi@all,

habe ich gemacht:

# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "dreampixel";

# Default base
$DEFAULT_BASE = "dc=dreampixel";

dc=de habe ich nicht mehr das ist überall raus. Anschliessend habe ich wieder die beiden Skripte wie folgt aufgerufen:

./migrate_group.pl /etc/group
./migrate_passwd.pl /etc/passwd

auch in dieser Reihenfolge. Es wurde wieder keine Fehlermeldung ausgegeben jedoch auch keine Einträge in den LDAP-Server aufgenommen. Müssen da evtl. schon Containerobjekte 'user' und 'group' drin sein oder warum geht das nicht?

Gruss Pixel

xstevex22
02.07.03, 17:45
Hi!
Also, fangen wir von vorne an. Stoppe den LDAP Dienst, lösche alle Files unter /var/lib/ldap, mache die entsprechenden Anpassungen in der migrate_common.ph (hast du ja bereits gemacht/geschrieben), starte den LDAP wieder und führe die Skripte aus. Fange an mit

# migrate_base.pl > /etc/openldap/base.ldif
# migrate_groups.pl /etc/gorups > /etc/openldap/groups.ldif
# migrate_passwd /etc/passwd > /etc/openldap/passwd.ldif

Dann alles ins LDAP:

# ldapadd -x -D "cn=Manager,dc=dreampixel" -W -f /etc/openldap/base.ldif
# ldapadd -x -D "cn=Manager,dc=dreampixel" -W -f /etc/openldap/groups.ldif
# ldapadd -x -D "cn=Manager,dc=dreampixel" -W -f /etc/openldap/passwd.ldif

Danach solltest du mit

# ldapsearch -x -D "cn=Manager,dc=dreampixel" -W -b "dc=dreampixel"

die hinzugefügten Daten sehen.

pixel
03.07.03, 17:11
Hi,

erst mal vielen Danke für deine Geduld. Leider funktioniert das einfügen nicht. Ich habe folgendes gemacht:

- Den LDAP-Server beendet
- Verzeichnis /var/lib/ldap geleert

Im Verzeichnis der Migrationstools folgende Skripte aufgrufen:

./migrate_base.pl > /data/openldap/ldif/base.ldif
./migrate_group.pl /etc/group > /data/openldap/ldif/group.ldif
./migrate_passwd.pl /etc/passwd > /data/openldap/ldif/passwd.ldif

anschliessend den LDAP-Server wieder gestartet. Als ich nun die base.ldif einfügen wollte:

ldapadd -x -D "cn=root,dc=dreampixel" -W -f /data/openldap/ldif/base.ldif
[Passwort eingegeben]

erhalte ich die Meldung:

adding new entry "ou=Hosts,dc=dreampixel"
ldapadd: update failed: ou=Hosts,dc=dreampixel
ldap_add: Internal (implementation specific) error (80)

Ich habe doch alles genauso gemacht???

Gruss Pixel