# LDAP

# Anonymous Bind deaktivieren

Standardmäßig darf jeder priviligierte Systemuser per ldapsearch die LDAP-DB abfragen. Mit folgendem Snippet muss man sich per Bind (also einen LDAP-User mit entsprechenden Rechten besitzen), um die DB abfragen zu dürfen.

<div id="bkmrk-disable_anon_backend"><dl class="code"><dt>disable\_anon\_backend.ldif</dt><dd>```
dn: olcDatabase={1}hdb,cn=config
add: olcRequires
olcRequires: authc
```

</dd></dl><dl class="code"><dt>disable\_anon\_frontend.ldif</dt><dd>```
dn: olcDatabase={-1}frontend,cn=config
add: olcRequires
olcRequires: authc
```

</dd></dl>```
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f disable_anony_backend.ldif
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f disable_anony_frontend.ldif
```

</div>

# Fedora Directory Server

##### Namenskonventionen

<div id="bkmrk-server%3A-der-ldap-ser">- <div>server: der LDAP-Server</div>
- <div>server.domaene.de: FQDN des Servers</div>

</div>##### Console starten

<div id="bkmrk-console-mit-ssl-unte">- <div>Console mit SSL-Unterstützung</div>

```
./startconsole -u admin -a https://server:45000/
```

- <div>Console ohne SSL-Unterstützung</div>

```
./startconsole -u admin -a http://server:45000/
```

</div>##### SSL-Verschlüsselung für den Directory-Server aktivieren

<div id="bkmrk-zertifikatsdatenbank">- <div>Zertifikatsdatenbank erzeugen und füllen:</div>

```
cd /opt/fedora-ds
# Zertifikatsdatenbank erstellen
shared/bin/certutil -N -P slapd-server- -d /opt/fedora-ds/alias
# vorhandene Zertifikate ins PKCS#12-Format umwandeln (Key und Zertifikat getrennt) (sofern nicht bereits vorher gemacht)
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name "Server-Cert"
# Zertifikat in die Datenbank importieren
shared/bin/pk12util -i server.p12 -d alias -P slapd-server-
# Berechtigungen korrigieren
chown nobody.nobody alias/slapd-server-*
```

- <div>PIN-File zum passwortlosen Start anlegen:</div>

```
echo "internal:secret" > /opt/fedora-ds/alias/slapd-server-pin.txt
```

- <div>Datei /opt/fedora-ds/admin-serv/config/nss.conf editieren:</div>

```
#   Pass Phrase Dialog:
#   Configure the pass phrase gathering process.
#   The filtering dialog program (`builtin' is a internal
#   terminal dialog) has to provide the pass phrase on stdout.
#NSSPassPhraseDialog  builtin
NSSPassPhraseDialog file:/opt/fedora-ds/alias/admin-serv-server-pin.txt
```

- <div>Nun sollte der passwortlose Start der LDAP-Servers möglich sein</div>

```
cd /opt/fedora-ds/slapd-server
./start-slapd
```

</div><p class="callout info">Dies gilt für den Fedora Directory Server 1.0.4 (in 1.1 hat sich einiges geändert)</p>

##### SSL-Verschlüsselung für den Admin-Server aktivieren

<div id="bkmrk-zertifikatsdatenbank-0">- <div>Zertifikatsdatenbank erzeugen und füllen:</div>

```
cd /opt/fedora-ds
# Zertifikatsdatenbank erstellen
shared/bin/certutil -N -P admin-serv-server- -d /opt/fedora-ds/alias
# vorhandene Zertifikate ins PKCS#12-Format umwandeln (Key und Zertifikat getrennt) (sofern nicht bereits vorher gemacht)
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name "Server-Cert"
# Zertifikat in die Datenbank importieren
shared/bin/pk12util -i server.p12 -d alias -P admin-serv-server-
# Berechtigungen korrigieren
chown nobody.nobody alias/admin-serv-server-*
```

- <div>PIN-File zum passwortlosen Start anlegen:</div>

```
echo "internal:secret" > /opt/fedora-ds/alias/admin-serv-server-pin.txt
```

- <div>Datei /opt/fedora-ds/admin-serv/config/nss.conf editieren:</div>

```
#   Pass Phrase Dialog:
#   Configure the pass phrase gathering process.
#   The filtering dialog program (`builtin' is a internal
#   terminal dialog) has to provide the pass phrase on stdout.
#NSSPassPhraseDialog  builtin
NSSPassPhraseDialog file:/opt/fedora-ds/alias/admin-serv-server-pin.txt
```

- <div>Nun sollte der passwortlose Start der Admin-Servers möglich sein</div>

```
cd /opt/fedora-ds
./start-admin
```

</div>##### Zertifikate via Kommandozeile erneuern

zuerst in das Verzeichnis mit der Directory-Datenbank wechseln:

<div id="bkmrk-cd-%2Fopt%2Ffedora-ds%2Fal">```
cd /opt/fedora-ds/alias
```

- <div>Zertifikat-Datenbank anzeigen</div>

```
../shared/bin/certutil -L -d . -P slapd-<hostname>-
```

- <div>einen Zertifikatsrequest erzeugen:</div>

```
TODO (ich habs über die grafische Konsole gemacht)
```

- <div>Zertifikat aus der Datenbank löschen:</div>

```
../shared/bin/certutil -D -n server-cert -d . -P slapd-<hostname>-
```

- <div>neues Zertifikat der Datenbank hinzufügen:</div>

```
../shared/bin/certutil -A -t u,u,u -n Server-Cert -d . -P slapd-<hostname>- -i /tmp/newcert.pem
```

</div>

# LDAP Datensicherung mit slapcat

Mit folgendem Script wird ein Backup der LDAP-Directory im laufenden Betrieb erzeugt (der find sorgt dafür, dass Backups älter als 60 Tage gelöscht werden):

<div id="bkmrk-%23%21%2Fbin%2Fbash-%23-dump-t">```
#!/bin/bash
# dump the ldap database

OUTFILE=/srv/backup/ldapdb-`/bin/date +%d-%m-%y_%H-%M`.ldif

echo "Starting slapcat..."
/usr/sbin/slapcat -n0 > $OUTFILE && /usr/sbin/slapcat -n1 >> $OUTFILE && echo "Backup created, now fetching it."
#find `dirname $OUTFILE` -name "*.ldif" -mtime +60 -exec rm -f {} \;
STATE=$?
exit $STATE
```

- <div>Listenpunkt„`slapcat -n0`“ - sicher Konfiguration und Schemata</div>
- <div>„`slapcat -n1`“ - sichert die Userdaten</div>

</div>

# LDAP-Server abfragen mit ldapsearch

Eine normale Abfrage des Users „test“ mit der neueren URI-Syntax:

<div id="bkmrk-ldapsearch--h-ldap%3A%2F"><div>```
ldapsearch -H ldap://server.ldap.net -b "dc=ldap,dc=net" -D "cn=Manager,dc=ldap,dc=net" "uid=test" -x -w <bindpass>
```

</div></div>eine Abfrage des Users „test“ mit TLS-Verschlüsselung (Transport Layer Security) über den normalen LDAP-Port 389:

<div id="bkmrk-ldapsearch--h-ldap%3A%2F-0"><div>```
ldapsearch -H ldap://server.ldap.net -b "dc=ldap,dc=net" -D "cn=Manager,dc=ldap,dc=net" "uid=test" -Z -x -w <bindpass>
```

</div></div>eine Abfrage des Users „test“ mit SSL-Verschlüsselung über den SSL-LDAP-Port 636:

<div id="bkmrk-ldapsearch--h-ldaps%3A">```
ldapsearch -H ldaps://server.ldap.net -b "dc=ldap,dc=net" -D "cn=Manager,dc=ldap,dc=net" "uid=test" -x -w <bindpass>
```

</div>