net17.de

PAM/OpenLDAP

Dieses Projekt dreht sich um die zentrale Useranmeldung mittels PAM an einem OpenLDAP Server. Ich war nur zum Teil daran beteiligt, die Hauptarbeit und langwierige Netzrecherche hat Mathias übernommen. Der Plan war die Anmledung an Linux, Apache, FTP und so weit wie möglich an Routern und Switchen zu vereinheitlichen.

Vorraussetzung ist ein installierter OpenLDAP2 Server (Wir benutzen zur Zeit Version 2.2.23-6).
Desweiteren sollte man sich überlegen wie die Basedn heissen soll, also z.B. .testdn.local oder .firmenname.local

Im ersten Teil realisieren wir erstmal die Authentifizierung von PAM an LDAP, d.h. das lokale Anmeldungen an einem Linux Server nicht lokal geprüft werden (erst nachdem LDAP geprüft wurde) sondern User und Passwort in einem LDAP Verzeichnis nachgeschaut werden.
Als zweite Bedingung galt dabei das sich User nur an bestimmten Servern anmelden künnen und nicht an allen. Das sollte durch spezielle Tags im Usereintrag realisiert werden.

Konfiguration LDAP Server

Als erstes wird die Datei /etc/openldap/ldap.conf editiert:
Hier wird die Basedn eingetragen und die zu benutzende IP-Adresse des OpenLDAP Servers.
BASE dc=testdn, dc=local
URI ldap://192.168.0.1

Dann wird die Datei /etc/openldap/slap.conf editiert:
Hier werden Loglevel, Managerkonto und Datenbanktyp konfiguriert (In der Datei befinden sich noch andere Einträge, wenn sie hier nicht erwähnt werden können sie auf den Defaultwerten gelassen werden.
loglevel 256
Die Zugriffsberechtigunegn für LDAP User: (Das Passwort darf geschrieben werden, da ansonsten der Benutzer sein Passwort nicht wechseln kann, ebeno das LastChange Feld für den letzten Passwortwechsel, der Res der Felder darf nur gelesen werden)
access to attr=userPassword
by self write
by * read
access to attr=shadowLastChange
by self write
by * read
access to *
by * read
Und noch den Manager der LDAP Datenbank und sein Passwort konfigurieren:
database ldbm
suffix "dc=testdn,dc=local"
rootdn "cn=Manager,dc=testdn,dc=local"
rootpw EinGutesPasswortAusdenken

Jetzt kann der LDAP Server gestartet werden:
rcldap start

LDAP Datenbank einrichten

Um eine Basis in der LDAP Datenbank zu haben und um den LDAP Server zu testen fügen wir als ertes die Grundtruktur der Basedn ein.
Dazu erstellen wir uns eine Datei init.ldif mit folgendem Inhalt:
dn:dc=testdn,dc=local
objectclass:dcObject
objectclass:organization
o:testdn
dc:testdn

dn:ou=intern,dc=testdn,dc=local
objectclass: organizationalUnit
ou:extern

# testuser, intern, testdn.local
dn: cn=testuser,ou=intern,dc=testdn,dc=local
cn: testuser
uid: testuser
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
objectClass: radiusprofile
shadowLastChange: 11472
shadowMax: 99999
shadowWarning: 7
uidNumber: 2107
gidNumber: 100
homeDirectory: /home/testuser
loginShell: /bin/bash
userPassword:: eHh4eA==

Mithilfe dieser Datei wird die Basisstruktur der LDAP Datenbank angelegt. D.h. die Basis testdn.local, die OU intern darunter (in die dann die User kommen) und einen ersten Testuser.
Mit dem folgenden Befehl wird die Struktur im LDP angelegt:
ldapadd -x -D "cn=Manager, dc=testdn, dc=local" -w passwort -f init.ldif

PHPLDAPAdmin

Falls ein Webserver zur Hand ist kann man sich den PHPLDAPAdmin installieren, eine wirklich grosse Hilfe zur Pflege und Administration einer LDAP Datenbank.
Das runtergeleadene Archiv einfach in den httpdocs Pfad des Webservers kopieren und die darin enthaltene Datei config.php.sample in config.php umbenennen.
Dann die Datei editieren und, entsprechend den oben gemachten Angaben, die DN und den Manager samt Passowrt anpassen.
Dann noch die automatische Basis-Erkennung deaktivieren
MIt http://ldap-server-ip/PfadZuPhpldapadmin kann dieser nun aufgerufen werden. Im Menü sollte die oben angelegte DN testdn.local, darunter intern.testdn.local und darin der testuser auftauchen.

Client(Server) Einrichtung

Jetzt wirds spannend :)
Auf den Servern auf denen in Zukunft die Userauthentifizierung über LDAP laufen soll, sind folgende Pakete zu installieren:

Jetzt müssen noch die Konfigurationsdateien

editiert werden.

nsswitch.conf
passwd: compat
group: compat
hosts: files lwres dns
networks: files dns
services: files
protocols: files
rpc: files
ethers: files
netmasks: files
netgroup: files
publickey: files
bootparams: files
automount: files nis
aliases: files
passwd_compat: ldap
group_compat: ldap


pam.d/login pam.d/ssh

Jeweils vor der lokalen Überprüfung soll der LDAP-Server abgefragt werden.

auth required pam_securetty.so
auth sufficient pam_ldap.so
auth include common-auth
auth required pam_nologin.so
auth required pam_mail.so
account sufficient pam_ldap.so
account include common-account
password sufficient pam_ldap.so
password include common-password
session include common-session
session required pam_resmgr.so


/ets/ldap.conf

Es sind nur die notwendigen Einträge aufgelistet.

# Your LDAP server. Must be resolvable without using LDAP.
host <LDAP-Server IP>

# The distinguished name of the search base.
base <Base DN Bsp: dc=testdn,dc=local>
# The LDAP version to use (defaults to 3
# if supported by client library)
ldap_version 3

# The distinguished name to bind to the server with.
# Optional: default is to bind anonymously.
# binddn cn=<username>,ou=my-OU,dc=my-domain,dc=com

»Falls der Server keinen anonymen Zugang erlaubt muss ein entsprechender User eingetragen werden

# The credentials to bind with.
# Optional: default is no credential.
bindpw <user passwort>

# The port.
# Optional: default is 389.
#port 389

# Filter to AND with uid=%s
pam_filter objectclass=account

# The user ID attribute (defaults to uid)
pam_login_attribute uid

# Group to enforce membership of
#pam_groupdn cn=group,ou=my-OU,dc=testdn,dc=local

# Group member attribute
#pam_member_attribute memberUid

pam_password crypt

/etc/openldap/ldap.conf

HOST 127.0.0.1
BASE ou=my-OU,dc=testdn,dc=local
URI ldap://<LDAP Server IP>

#SIZELIMIT 12
#TIMELIMIT 15
#DEREF never
TLS_REQCERT allow

*
mit getent passwd testen, ob die Einrichtung korrekt vorgenommen wurde
*
erst danach Login-Versuch starten

Fortsetzung ist noch in Arbeit....