Pam-ldap-debian

Aus xinux.net
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