LDAP 02 | Einrichtung des Servers

WICHTIG: Alle Kommandos werden als root-User ausgeführt!

Optionale Vorbereitung

Das war im Video bereits passiert.

ufw allow ssh
ufw enable

Einrichtung des Hostnames

hostname="ldap.bm-uni.de"
hostnameShort=$(echo $hostname | cut -d "." -f1)
hostnamectl set-hostname $hostnameShort
sed -i "s/^127.0.1.1.*/127.0.1.1 $hostname $hostnameShort/g" /etc/hosts
bash
cat /etc/hosts

Setzen der Variablen

basedn="dc=bm-uni,dc=de"
admindn="cn=admin,$basedn"
adminpwd="hpctech1!"
echo -e "\$basedn:\t$basedn\n\$admindn:\t$admindn\n\$adminpwd:\t$adminpwd"

Installation

apt install slapd

Umzug auf statische Konfiguration

systemctl stop slapd
sed -i "s/SLAPD_CONF=.*/SLAPD_CONF=\/etc\/ldap\/slapd.conf/g" /etc/default/slapd
cat /etc/default/slapd
rm /var/lib/ldap/*.mdb

Initiale Konfiguration

adminpwdHash=$(slappasswd -h {SSHA} -s $adminpwd)

cat <<EOF >/etc/ldap/slapd.conf
# Schemata und Objektklassen
include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/inetorgperson.schema
include         /etc/ldap/schema/nis.schema
# Loglevel - 256 ist ein guter Mittelwert
# NICHT auf 0 setzen, da sonst gar nichts geloggt wird!
# https://www.openldap.org/doc/admin24/slapdconfig.html
loglevel        256
pidfile         /var/run/slapd/slapd.pid
argsfile        /var/run/slapd/slapd.args
modulepath      /usr/lib/ldap
moduleload      back_mdb
# Maximal 1000 Werte bei einer Suche zurück geben
sizelimit 1000
# Anzahl CPUs, die für das Indexing verwendet werden
tool-threads 2
#######################################################################
# Datenbank Nummer 1
database        mdb
# Der Basis-DN
suffix          "$basedn"
# Root-User
rootdn          "$admindn"
rootpw          "$adminpwdHash"
# Ablageort der Datenbank
directory       "/var/lib/ldap"
# Indices
index           objectClass eq
# Letzte Modifikation der Datenbank schreiben
lastmod         on
# Access Control Lists
access to attrs=userPassword,shadowLastChange
    by dn="$admindn" write
    by anonymous auth
    by self write
    by * none
access to *
    by dn="$admindn" write
    by * read
access to dn.base=""
    by * read
EOF
less /etc/ldap/slapd.conf
systemctl start slapd
systemctl status slapd

Erste Daten

ldapsearch -x -D "$admindn" -b $basedn -w $adminpwd

cat <<EOF >/tmp/groups-and-users.ldif
# Base erstellen
dn: $basedn
objectClass: dcObject
objectClass: organization
o: fiktive Baron Münchhausen Universität
dc: bm-uni

# Gruppen erstellen
dn: ou=groups,$basedn
ou: groups
objectClass: top
objectClass: organizationalUnit

# User erstellen
dn: ou=users,$basedn
ou: users
objectClass: top
objectClass: organizationalUnit
EOF
cat /tmp/groups-and-users.ldif

ldapadd -x -D "$admindn" -w $adminpwd -f /tmp/groups-and-users.ldif
ldapsearch -x -D "$admindn" -b $basedn -H "ldap://ldap.bm-uni.de" -w $adminpwd
echo "ZmlrdGl2ZSBCYXJvbiBNw7xuY2hoYXVzZW4gVW5pdmVyc2l0w6R0\n" | base64 -d

cat <<EOF >/tmp/posixGruppe-und-studis.ldif
# posixGruppe anlegen
dn: cn=posixGruppe,ou=groups,$basedn
cn: posixGruppe
objectClass: top
objectClass: posixGroup
gidNumber: 10000
EOF

erwinPassword=$(slappasswd -h {SSHA} -s "3rw1n3rst13")
noraPassword=$(slappasswd -h {SSHA} -s "Zi%iY8hua4coe0ain8sho!p7")
siegfriedPassword=$(slappasswd -h {SSHA} -s "daStehIchNunIchArmerToR!")
cat <<EOF >>/tmp/posixGruppe-und-studis.ldif
# Erwin Erstie anlegen
dn: uid=e.erstie,ou=users,$basedn
objectClass: top
objectClass: inetorgperson
objectClass: posixAccount
objectClass: shadowAccount
cn: Erwin Erstie
sn: Erstie
uid: e.erstie
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/e.erstie
loginShell: /bin/bash
userPassword: $erwinPassword
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0

# Nora Nieda anlegen
dn: uid=n.nieda,ou=users,$basedn
objectClass: top
objectClass: inetorgperson
objectClass: posixAccount
objectClass: shadowAccount
cn: Nora Nieda
sn: Nieda
uid: n.nieda
uidNumber: 10001
gidNumber: 10000
homeDirectory: /home/n.nieda
loginShell: /bin/zsh
userPassword: $noraPassword
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0

# Siegfried von Säusel anlegen
dn: uid=s.saeusel,ou=users,$basedn
objectClass: top
objectClass: inetorgperson
objectClass: posixAccount
objectClass: shadowAccount
cn: Siegfried von Säusel
sn: Siegfried
uid: s.saeusel
uidNumber: 10002
gidNumber: 10000
homeDirectory: /home/s.saeusel
loginShell: /bin/bash
userPassword: $siegfriedPassword
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0
EOF

ldapadd -x -H "ldap://ldap.bm-uni.de" -D "$admindn" -w $adminpwd -f /tmp/posixGruppe-und-studis.ldif

Suchen

ldapsearch -x -H "ldap://ldap.bm-uni.de" -b $basedn -D "uid=e.erstie,ou=users,$basedn" -W
ldapsearch -x -H "ldap://ldap.bm-uni.de" -b $basedn -D "$admindn" -w $adminpwd "(uid=e.erstie)" uidNumber
ldapsearch -x -LLL -H "ldap://ldap.bm-uni.de" -b $basedn -D "$admindn" -w $adminpwd "(uid=e.erstie)" uidNumber
ldapsearch -x -LLL -H "ldap://ldap.bm-uni.de" -b $basedn -D "$admindn" -w $adminpwd "(cn=*Erstie*)" uid cn
ldapsearch -x -LLL -H "ldap://ldap.bm-uni.de" -b $basedn -D "$admindn" -w $adminpwd "(gidNumber=10000)" uid loginShell
ldapsearch -x -LLL -H "ldap://ldap.bm-uni.de" -b $basedn -D "$admindn" -w $adminpwd "(&(gidNumber=10000)(loginShell=/bin/zsh))" uid cn

LDAPS

Hinweis: Keys müsst Ihr selber besorgen!

ll /etc/ldap/*.pem
chown openldap /etc/ldap/ldapkey.pem
chmod 600 /etc/ldap/ldapkey.pem
ll /etc/ldap/*.pem

sed -i '/^tool-threads*/a TLSCertificateKeyFile \/etc\/ldap\/ldapkey.pem' /etc/ldap/slapd.conf
sed -i '/^tool-threads*/a TLSCertificateFile \/etc\/ldap\/ldapcert.pem' /etc/ldap/slapd.conf
sed -i '/^tool-threads*/a # SSL Certs' /etc/ldap/slapd.conf

cat /etc/ldap/slapd.conf

sed -i 's/SLAPD_SERVICES=.*/SLAPD_SERVICES="ldapi:\/\/\/ ldaps:\/\/\/"/g' /etc/default/slapd
systemctl restart slapd
ss -tlpn

ldapsearch -x -LLL -H "ldap://ldap.bm-uni.de" -b $basedn -D "$admindn" -w $adminpwd "(cn=*Erstie*)" uid cn
ldapsearch -x -LLL -H "ldaps://ldap.bm-uni.de" -b $basedn -D "$admindn" -w $adminpwd "(cn=*Erstie*)" uid cn

Firewall einstellen

ufw allow ldaps
ufw deny ldap
ufw status