OpenBSD LDAP Authentifizierung

Das hier vorgestellte Verfahren funktioniert bei mir unter OpenBSD 4.4 hervorragend. Als erstes wird das notwendige Paket installiert:
pkg_add login_ldap-3.51 Die Routine zieht weitere benötigte Pakete, wie z.B. den OpenLDAP Client selbständig nach. Nach der Installation wird in der Datei /etc/login.conf ein Eintrag nach folgendem Muster hinzugefügt:
ldap:\
        :auth=-ldap:\
        :x-ldap-server=ldap.rs.de:\
        :x-ldap-basedn=ou=openvpn-users,dc=rs,dc=de:\
        :x-ldap-filter=(&(objectclass=posixAccount)(uid=%u)):\
        :x-ldap-binddn=cn=Manager,dc=rs,dc=de:\
        :x-ldap-bindpw=geheim:\
        :tc=default: Hierbei sind selbstverständlich die Werte entsprechend der LDAP-Umgebung anzupassen.
Nun wird zum Test auf dem LDAP-Server ein Account "meiserh" mit einem Passwort angelegt und, sofern obige Konfiguration übernommen wurde, auch eine OU namens openvpn-users (man merkt schon was ich eigentlich damit machen will). meiserh ist selbstverständlich in dieser OU. Ist das erledigt, so kann man den Erfolg mit folgender Zeile testen:
/usr/libexec/auth/login_-ldap -d -s login meiserh ldap Ein erfolgloser Versuch, z.B. wegen eines falschen Passwortes liefert in der letzten Zeile
reject
Ein erfolgreicher Versuch hingegen
authorize
zurück. Nutzen kann man das Ganze unter anderem mit folgendem Script:  
#!/bin/sh
# success = 0 , error = 1
LOGENABLE=1
LOGCLASS=OpenVPN-LDAPAuth
DEBUGENABLE=1
   
LDAP_LOGIN=/usr/libexec/auth/login_-ldap
   
if [ ${#username} -lt 1 ]
then
  if [ ${LOGENABLE} -eq 1 ]
  then
    logger -t $LOGCLASS "Username ${username} too short (${#username} chars)"
  fi
  exit 1;
fi
   
if [ ${#password} -lt 1 ]
then
  if [ ${LOGENABLE} -eq 1 ]
  then
    logger -t $LOGCLASS "Password for user ${username} too short (${#password} chars)"
  fi
  exit 1;
fi
   
# check against ldap-server
RESPONSE=`$LDAP_LOGIN -d -s login -p ${password} ${username} ldap 2>/dev/null 3>&1`
if [ ${DEBUGENABLE} -eq 1 ]
then
  logger -t $LOGCLASS "username: ${username} login attempt at `date "+DATE: %Y-%m-%d - TIME: %H:%M:%S"`"
  logger -t $LOGCLASS "response was ${RESPONSE}"
fi
if [ ${#RESPONSE} -lt 1 ]
then
  logger -t $LOGCLASS "something went wrong! no response from authenticator"
  exit 1;
fi
if [ ${RESPONSE} != "authorize" ]
then
  exit 1;
else
  exit 0;
fi
  Hierbei wird das Script login_ldap (http://sourceforge.net/projects/login-ldap/) missbraucht. Damit man auf der Kommandozeile das Passwort übergeben kann, muß der Debug-Modus (-d) aktiviert werden. Da wir aber lediglich einen Rückgabewert (0 bei erfolgreicher Authentifizierung, ansonsten 1) haben wollen, wird der Rückgabekanal 3 auf stdout umgeleitet und damit ansonsten jede andere Ausgabe unterdrückt. Dieses Script kann man dann hervorragend für OpenVPN einsetzen.