%
% Achtung: Dateien muessen mit latin1-Encoding gespeichert werden!
% Attention: Files must be saved using latin1 encoding!
%

\chapter{Das LDAPclient-Paket}

    Dieses Paket wurde auf Basis des LDAPserver-Paketes, welches aus dem
    openldap-Paket von Jens Vehlhaber (E-MAIL \kmail{jvehlhaber@buchenwald.de})
    hervor gegangen ist, erstellt und wird von J"urgen Edner (E-MAIL
    \kmail{juergen@eisfair.org}) weiter entwickelt. Es enth"alt einzig
    die zugeh"origen LDAP-Client-Programme.


\section{Die Einleitung}

    In diesem Paket wurden die f"ur den Zugriff auf einen LDAP-Server
    (Lightweight Directory Access Protocol) Server ben"otigten Programme
    zusammengefasst.


\section{Die Funktionen}

    Das LDAPclient-Paket besteht aus folgenden Komponenten: 
    \begin{itemize}
        \item openldap - Wird f"ur den LDAP-Serverzugriff verwendet.\\
            (\url{http://www.openldap.org/})
    \end{itemize}

\section{Die Voraussetzungen}

    Dieses Paket ben"otigt zur korrekten Funktion zwingende die installierten
    Pakete 'Certs' (bei Verwendung von Verschl"usselung), 'Libldap',
    'Libsasl', 'Libssl'.


\section{Die Installation}

    Das LDAPclient-Paket wird "uber das Setup-Men"u installiert. Wird
    eine "altere Paketversion vorgefunden, so wird diese deinstalliert
    bevor die neuen Programmdateien installiert werden. Nach Beendigung
    dieses Schrittes werden die Konfigurationsdateien generiert und
    alle ben"otigten Programme gestartet.


\section{Das Men"u im Setup-Programm}

    Das Men"u im Setup-Programm ist wie folgt aufgebaut:

    \begin{itemize}
    \item OpenLDAP client administration
        \begin{itemize}
            \item View documentation: Anzeigen der Dokumentation
            \item Edit configuration: Bearbeiten der Konfiguration
            \item Advanced configuration file handling: Konfigurationen verwalten
            \item Test LDAP connection: Verbindung zum LDAP-Server pr"ufen
        \end{itemize}
        \item Return: Untermen"u verlassen
    \end{itemize}

    Die Men"upunkte d"urften selbsterkl"arend sein, da sie keinerlei
    weitere Eingaben erwarten. Aus diesem Grund wird auf deren Funktion
    nicht weiter eingegangen.


\section{Die "Anderung der Konfiguration}

    Die Konfiguration kann "uber den Men"upunkt 'Edit configuration' ge"andert
    werden. Standardm"a"sig wird der Editor aufgerufen, der in der Environment-
    Konfiguration "uber die Variable 'EDITOR' festgelegt wurde. Nachdem der
    Editor beendet wurde wird abgefragt, ob die Konfiguration aktiviert werden
    soll. Wird dies best"atigt, werden "uber ein Skript die Anpassungen umgehend
    wirksam gemacht.


\section{Die Konfigurationsdatei}

    In der Konfigurationsdatei, die "uber das Men"u zug"anglich ist, sind
    folgende Parameter vorhanden; wer sie von Hand editieren will findet sie
    unter \texttt{/etc/config.d/ldapclient}.


\section{Die Parameter}

\begin{description}
    \config{START\_LDAPCLIENT}{START\_LDAPCLIENT}{STARTLDAPCLIENT}
        Zur Aktivierung der LDAP-Client-Konfiguration muss diese Variable
        lediglich auf den Wert 'yes' gestellt werden. Die Einstellung 'no'
        deaktiviert die Konfiguration.

        G"ultige Werte: yes, no

        Standardeinstellung: \texttt{START\_LDAPCLIENT='no'}

    \config{LDAPCLIENT\_LDAP\_HOSTURI}{LDAPCLIENT\_LDAP\_HOSTURI}{LDAPCLIENTLDAPHOSTURI}
        "Uber diesen Parameter legt man den Hostnamen und TCP-Port des
        LDAP-Servers fest zu welchem eine Verbindung aufgebaut werden
        soll.

        G"ultige Werte: URI und TCP-Port

        Beispiel: \texttt{LDAPCLIENT\_LDAP\_HOSTURI='ldap://meinserver.local.lan:389'}

    \config{LDAPCLIENT\_LDAP\_BASEDC}{LDAPCLIENT\_LDAP\_BASEDC}{LDAPCLIENTLDAPBASEDC}
        "Uber diesen Parameter legt man die Basisdomain des LDAP-Verzeichnisbaums
        fest.

        G"ultige Werte: Base Domain Component

        Standardeinstellung: \texttt{LDAPCLIENT\_LDAP\_BASEDC='privatnet'}

    \config{LDAPCLIENT\_LDAP\_BASEDN}{LDAPCLIENT\_LDAP\_BASEDN}{LDAPCLIENTLDAPBASEDN}
        "Uber diesen Parameter wird der Base Distinguished Name des
        LDAP-Verzeichnisses festgelegt. Dies ist das Wurzelverzeichnis
        von welchem Suchanfragen etc. gestartet werden.

        G"ultige Werte: Base Distinguished Name

        Standardeinstellung: \texttt{LDAPCLIENT\_LDAP\_BASEDN='dc=privatnet,dc=lan'}

    \config{LDAPCLIENT\_LDAP\_AUTH}{LDAPCLIENT\_LDAP\_AUTH}{LDAPCLIENTLDAPAUTH}
        "Uber diesen Parameter wird festgelegt, ob der LDAP-Client sich
        bei einem Verbindungsaufbau authentifizieren soll oder nicht.

        G"ultige Werte: yes, no

        Standardeinstellung: \texttt{LDAPCLIENT\_LDAP\_AUTH='no'}

    \config{LDAPCLIENT\_LDAP\_ADMIN\_NAME}{LDAPCLIENT\_LDAP\_ADMIN\_NAME}{LDAPCLIENTLDAPADMINNAME}
        "Uber diesen Parameter wird der Name des LDAP-Administrators festgelegt,
        welcher zur Authentifizierung am LDAP-Verzeichnisbaum verwendet
        werden soll.

        G"ultige Werte: LDAP-Kontoname

        Standardeinstellung: \texttt{LDAPCLIENT\_LDAP\_ADMIN\_NAME='ldapadmin'}

    \config{LDAPCLIENT\_LDAP\_ADMIN\_PASS}{LDAPCLIENT\_LDAP\_ADMIN\_PASS}{LDAPCLIENTLDAPADMINPASS}
        "Uber diesen Parameter kann das Kennwort des LDAP-Administratorkontos
        festgelegt werden.

        G"ultige Werte: Kennwort

        Standardeinstellung: \texttt{LDAPCLIENT\_LDAP\_ADMIN\_PASS=$''$}

    \config{LDAPCLIENT\_CLIENT\_CERT\_FILE}{LDAPCLIENT\_CLIENT\_CERT\_FILE}{LDAPCLIENTCLIENTCERTFILE}
        Optionaler Parameter: "Uber diesen Parameter legt man den Namen des
        Client-Zertifikats fest, welches zur Authentifizierung am LDAP-Server
        verwendet werden soll. Eingegeben werden muss der absolute Pfad zur
        Datei inklusive des Dateinamens.

        G"ultige Werte: absoluter Pfad inkl. Dateiname

        Standardeinstellung: \texttt{LDAPCLIENT\_CLIENT\_CERT\_FILE=$''$}

    \config{LDAPCLIENT\_CLIENT\_KEY\_FILE}{LDAPCLIENT\_CLIENT\_KEY\_FILE}{LDAPCLIENTCLIENTKEYFILE}
        Optionaler Parameter: "Uber diesen Parameter legt man den Namen der
        Zertifikatsschl"usseldatei fest, welches zur Authentifizierung am
        LDAP-Server verwendet werden soll. Eingegeben werden muss der absolute
        Pfad zur Datei inklusive des Dateinamens.

        G"ultige Werte: absoluter Pfad inkl. Dateiname

        Standardeinstellung: \texttt{LDAPCLIENT\_CLIENT\_KEY\_FILE=$''$}

    \config{LDAPCLIENT\_SERVER\_CERT\_CHECK}{LDAPCLIENT\_SERVER\_CERT\_CHECK}{LDAPCLIENTSERVERCERTCHECK}
        Optionaler Parameter: "Uber diesen Parameter legt man fest, in welcher
        Weise ein Serverzertifikat beim Aufbau einer TLS-gesicherten Verbindung
        gepr"uft werden soll. Zur Auswahl stehen folgende Varianten:

    \begin{itemize}
        \item never - Es wird keine Zertifikatspr"ufung durch den LDAP-Client durchgef"uhrt.

        \item allow - Es wird ein Serverzertifikat angefordert, jedoch wird auch dann eine
                      Verbindung aufgebaut wenn kein oder ein ung"ultiges Zertifikat vom
                      Server "ubermittelt wird.

        \item try   - Es wird ein Serverzertifikat angefordert, jedoch wird auch dann eine
                      Verbindung aufgebaut wenn kein Zertifikat vom Server "ubermittelt wird.
                      Wird ein ung"ultiges Zertifikat "ubermittelt, so wird die Verbindung
                      umgehend beendet.

        \item hard  - Es wird ein Serverzertifikat angefordert und nur wenn ein korrektes
                      Zertifikat vom Server "ubermittelt wird, wird auch eine Verbindung
                      aufgebaut.
    \end{itemize}

        G"ultige Werte: never, allow, try, hard

        Standardeinstellung: \texttt{LDAPCLIENT\_SERVER\_CERT\_CHECK='never'}
\end{description}

\section{Die Befehls"ubersicht}

    \begin{itemize}
        \item ldapadd     - Dieses Programm wird zum Hinzuf"ugen von LDAP-Eintr"agen verwendet.
        \item ldapcompare - Diese Programm wird zum Vergleichen von LDAP-Attributen verwendet.
        \item ldapdelete  - Diese Programm wird zum L"oschen von LDAP-Eintr"agen verwendet.
        \item ldapexop    - Dieses Programm wird zum Ausf"uhren von erweiterten LDAP-Operationen verwendet.
        \item ldapmodify  - Diese Programm wird zum Modifizieren von LDAP-Eintr"agen verwendet.
        \item ldapmodrdn  - Dieses Programm wird zum Umbenennen von RDN-Eintr"agen verwendet.
        \item ldappasswd  - Diese Programm wird zum "Andern eines Kennwortes eines LDAP-Eintrags verwendet.
        \item ldapsearch  - Diese Programm wird zum Durchsuchen der LDAP-Datenbank verwendet.
        \item ldapurl     - Dieses Programm generiert eine RFC-4516 LDAP-URL mit Erweiterungen.
        \item ldapwhoami  - Dieses Programm f"uhrt eine Who-am-I Anfrage beim LDAP-Verzeichnis durch.
    \end{itemize}


\section{Verschiedenes}

\begin{description}
    \config{Verschl"usselte Verbindung testen}{Verschl"usselte Verbindung testen}{VerschluesselteVerbindungtestenLDAPCLIENT}
        Mit Hilfe des openssl-Programms kann man testen, ob eine
        verschl"usselte Verbindung zum LDAP-Server aufgebaut werden
        kann. Hierzu gibt man z.B. an der Konsole folgenden Befehl
        ein (Nat"urlich sind die Parameter entsprechend der eigenen
        Konfiguration anzupassen):

        \texttt{openssl s\_client -connect localhost:636 -showcerts -state -CAfile /var/certs/ssl/certs/ca.pem}

    \config{Weitere LDAP-Befehle}{Weitere LDAP-Befehle}{WeitereLDAP-Befehle}
        Exportieren des LDAP-Verzeichnisbaums in eine LDIF-Datei:

        \texttt{ldapsearch -x -D "cn=ldapadmin,dc=privatnet,dc=lan" -W > output.ldif}

        Importieren einer LDIF-Datei in das LDAP-Verzeichnis:

        \texttt{ldapadd -x -D ""cn=ldapadmin,dc=privatnet,dc=lan" -W -f input.ldif}

    \config{PHP-LDAP-Zugriff}{PHP-LDAP-Zugriff}{PHPLDAPZugriffLDAPCLIENT}
        Wenn es Probleme gibt sich "uber einen Webzugriff zu einem LDAP-Server zu verbinden,
        so kann es hilfreich sein, dass im Verzeichnis \texttt{/usr/share/doc/ldapclient}
        mitgelieferte PHP-Skript 'test-ldap.php' in den Webserverpfad zu kopieren, die
        Zugriffsrechte anzupassen und dann "uber den Webbrowser aufzurufen.

        Logeintr"age einer TLS-Verbindung (anonymous):

        \begin{verbatim}
eis slapd[2609]: conn=14 fd=14 ACCEPT from IP=192.168.6.1:47276 (IP=0.0.0.0:636)
eis slapd[2609]: conn=14 fd=14 TLS established tls_ssf=256 ssf=256
eis slapd[2609]: conn=14 op=0 BIND dn="" method=128
eis slapd[2609]: conn=14 op=0 RESULT tag=97 err=0 text=
eis slapd[2609]: conn=14 op=1 UNBIND
eis slapd[2609]: conn=14 fd=14 closed
        \end{verbatim}

        Logeintr"age einer TLS-Verbindung (authentifiziert):

        \begin{verbatim}
eis slapd[2609]: conn=15 fd=14 ACCEPT from IP=192.168.6.1:47279 (IP=0.0.0.0:636)
eis slapd[2609]: conn=15 fd=14 TLS established tls_ssf=256 ssf=256
eis slapd[2609]: conn=15 op=0 BIND dn="cn=ldapadmin,dc=local,dc=lan" method=128
eis slapd[2609]: conn=15 op=0 BIND dn="cn=ldapadmin,dc=local,dc=lan" mech=SIMPLE ssf=0
eis slapd[2609]: conn=15 op=0 RESULT tag=97 err=0 text=
eis slapd[2609]: conn=15 op=1 UNBIND
eis slapd[2609]: conn=15 fd=14 closed
        \end{verbatim}
\end{description}

\section{Das Glossar}
    \begin{itemize}
        \item BaseDN - Base Distinguished Name
        \item DN     - Distinguished Name
        \item LDAP   - Lightweight Directory Access Protocol
        \item RDN    - Relative Distinguished Name
    \end{itemize}

