Pam-ldap-debian
Zur Navigation springen
Zur Suche springen
Benutzerauthentifizierung mit LDAP und PAM auf Debian
Installation Server
apt-get install slapd libldap2-dev db4.2-util
- slapd: OpenLDAP Standalone Server
- libldap2-dev: enthält Bibliotheken und Header
- db4.2-util: Tools zum managen der Berkley Datenbank
Installation Clients
apt-get install ldap-utils libpam-ldap libnss-ldap
- ldap-utils: Utilities zum Zugriff auf den LDAP Server
- libpam-ldap: Modules, die LDAP die Möglichkeit geben User mit Programmen die PAM benutzen zu authentifizieren
- libnss-ldap: Hiermit kann man den Name Service Switch zu konfiguriern das er einenLDAP Server nutzen kann
Die Konfigurationdatei des LDAP Servers genannt SLAPD
gawron:/etc/ldap# cat slapd.conf allow bind_v2 include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/misc.schema schemacheck on modulepath /usr/lib/ldap moduleload back_bdb pidfile /var/run/slapd.pid argsfile /var/run/slapd.args loglevel 0 database bdb suffix "dc=cronos,dc=int" directory /var/lib/ldap index objectClass eq rootdn "cn=admin,dc=cronos,dc=int" rootpw "sysadm"
Starten des slapd
gawron:/etc/ldap# /etc/init.d/slapd start Starting OpenLDAP: slapd.
Stoppen des slapd
gawron:/etc/ldap# /etc/init.d/slapd stop Stopping OpenLDAP: slapd.
Neustarten des slapd
gawron:/etc/ldap# /etc/init.d/slapd restart Stopping OpenLDAP: slapd. Starting OpenLDAP: slapd.Starten des slapd
Auf welchem Port lauscht der slapd
gawron:/etc/ldap# netstat -lntp | grep slapd tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 499/slapd
Welche PID hat der slapd
gawron:/etc/ldap# pgrep slapd 499 500 501
Clientkonfiguration von LDAP
gawron:/etc/ldap# cat ldap.conf base dc=cronos, dc=int uri ldap://127.0.0.1 ldap_version 3 rootbinddn cn=admin, dc=cronos, dc=int pam_password md5
Passwort für den Adminzugang eintragen
gawron:/etc# echo sysadm > /etc/ldap.secret
Wir benutzen nur eine Konfigurationdatei
gawron:/etc# ln -sf /etc/ldap/ldap.conf /etc/pam_ldap.conf gawron:/etc# ln -sf /etc/ldap/ldap.conf /etc/libnss-ldap.conf
Testen ob Client mit dem Server kommunizieren kann.
gawron:/etc# ldapsearch -x # extended LDIF # # LDAPv3 # base <> with scope sub # filter: (objectclass=*) # requesting: ALL # # search result search: 2 result: 32 No such object # numResponses: 1
Erstellen der Struktur im LDIF Format
gawron:~# cat struktur.ldif # cronos.int dn: dc=cronos,dc=int objectClass: dcObject objectClass: organization o: cronos dc: cronos # mitarbeiter, cronos.int dn: ou=mitarbeiter,dc=cronos,dc=int objectClass: organizationalUnit ou: mitarbeiter # gruppen, cronos.int dn: ou=gruppen,dc=cronos,dc=int objectClass: organizationalUnit ou: gruppen # rechner, cronos.int dn: ou=rechner,dc=cronos,dc=int objectClass: organizationalUnit ou: rechner
Erstellen des Adminaccount im LDIF Format
gawron:~# cat admin.ldif dn: cn=admin,dc=cronos,dc=int objectClass: top objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: admin sn: chef uid: admin uidNumber: 0 gidNumber: 0 homeDirectory: /export/home/admin loginShell: /bin/bash gecos: admin user description: admin user
Datenbank füllen
gawron:~# ldapadd -xD cn=admin,dc=cronos,dc=int -w sysadm -f struktur.ldif adding new entry "dc=cronos,dc=int" adding new entry "ou=mitarbeiter,dc=cronos,dc=int" adding new entry "ou=gruppen,dc=cronos,dc=int" adding new entry "ou=rechner,dc=cronos,dc=int" gawron:~# ldapadd -xD cn=admin,dc=cronos,dc=int -w sysadm -f admin.ldif adding new entry "cn=admin,dc=cronos,dc=int"
Erläuterung zu ldapadd
- -x Saslauth. abschalten -D DN der gebunden wird
- -w Passwort des gebundenen DN -f LDIF Datei
Gruppe Ldif erstellen
gawron:~# cat gruppe.ldif dn: cn=benutzer,ou=gruppen,dc=cronos,dc=int objectClass: posixGroup objectClass: top cn: benutzer gidNumber: 3001
User Ldif erstellen
gawron:~# cat user.ldif dn: uid=leroy,ou=mitarbeiter,dc=cronos,dc=int cn: leroy objectClass: account objectClass: posixAccount objectClass: shadowAccount objectClass: top uid: leroy uidNumber: 2001 gidNumber: 3001 homeDirectory: /home/leroy loginShell: /bin/bash
User und Gruppe in LDAP einfügen
root@gawron:~ # ldapadd -xD cn=admin,dc=cronos,dc=int -w sysadm -f gruppe.ldif adding new entry "cn=benutzer,ou=gruppen,dc=cronos,dc=int"
root@gawron:~ # ldapadd -xD cn=admin,dc=cronos,dc=int -w sysadm -f user.ldif adding new entry "uid=leroy,ou=mitarbeiter,dc=cronos,dc=int"
/etc/nsswitch.conf anpassen
root@ubuntu:~ # cat /etc/nsswitch.conf passwd: files ldap group: files ldap shadow: files ldap hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
Testen ob die nsswitch Namensauflöung funktioniert
gawron:~# getent passwd leroy leroy:x:2001:3001:leroy:/home/leroy:/bin/bash
Anpassen der Pam
Die Authentifizierung
gawron:/etc/pam.d# cat common-auth auth sufficient pam_ldap.so auth required pam_unix.so nullok_secure use_first_pass
Das Accounting
gawron:/etc/pam.d# cat common-account account sufficient pam_ldap.so account required pam_unix.so
Passwort änderungen
gawron:/etc/pam.d# cat common-password password sufficient pam_ldap.so password sufficient pam_unix.so password required pam_deny.so
Die Session
gawron:/etc/pam.d# cat common-session session required pam_mkhomedir.so skel=/etc/skel umask=0022 session required pam_unix.so
Passwort für den User setzen
gawron:/etc/pam.d# passwd leroy New password: Re-enter new password: LDAP password information changed for leroy passwd: password updated successfully
Testen des Accounts
gawron:/etc/pam.d# su - nobody nobody@gawron:~$ su – leroy Password: leroy@gawron:~$
Apache an LDAP
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all SetHandler ldap-status Authtype Basic AuthName LDAP-AUTHENTIFIKATION AuthLDAPEnabled on AuthLDAPURL ldap://127.0.0.1/dc=cronos,dc=int?uid?sub AuthLDAPAuthoritative on require valid-user RedirectMatch ^/$ /apache2-default/ </Directory>
RECHNER Ldif erstellen
gawron:~# cat rechner.ldif dn: cn=pc1,ou=rechner,dc=cronos,dc=int objectClass: device objectClass: top objectClass: ipHost cn: pc1 ipHostNumber: 172.20.103.1
Rechner Liste eintragen
gawron:~# cat ./rechner.sh #!/bin/bash for ((n=1;n<10;n++)) do cat <<MARKE dn: cn=pc$n,ou=rechner,dc=cronos,dc=int objectClass: device objectClass: top objectClass: ipHost cn: pc$n ipHostNumber: 172.20.103.$n MARKE done
./rechner.sh > rechner.ldif
Service Container erstellen
gawron:~# cat service-container.ldif # mitarbeiter, cronos.int dn: ou=service,dc=cronos,dc=int objectClass: organizationalUnit ou: service
gawron:~# ldapadd -xD cn=admin,dc=cronos,dc=int -w sysadm -f service.-container.ldif
Service Einträge erstellen
gawron:~# cat service.ldif dn: cn=xinux,ou=service,dc=cronos,dc=int objectClass: top objectClass: ipService ipServicePort: 4711 ipServiceProtocol: tcp cn:xinux
gawron:~# ldapadd -xD cn=admin,dc=cronos,dc=int -w sysadm -f service.ldif
gawron:~# getent services ssh
ssh 22/tcp
gawron:~# getent services xinux
gawron:~# cat /etc/nsswitch.conf passwd: files ldap group: files ldap shadow: files ldap hosts: files dns ldap networks: files protocols: db files services: db files ldap ethers: db files rpc: db files netgroup: nis
gawron:~# getent services xinux xinux 4711/tcp