LDAP – 5. Einrichtung Openssh mit Public Key

Hier eine Anleitung zur Verwendung von Public/Private-Key Authentifizierung an OpenSSH über LDAP.

​OpenLDAP
Als erstes brauchen wir ein Schema im LDAP.
Dieses definiert die Objektklasse „ldapPublicKey“ welche uns erlaubt das Attribut „sshPublicKey“ nutzen zu können.

vi /srv/openldap/etc/openldap/schema/openssh-ldap.schema 
openssh-ldap.schema 
#
# LDAP Public Key Patch schema for use with openssh-ldappubkey
#                              useful with PKA-LDAP also
#
 
# octetString SYNTAX
attributetype ( 1.3.6.1.4.1.24552.500.1.1.1.13 NAME 'sshPublicKey' 
        DESC 'MANDATORY: OpenSSH Public key' 
        EQUALITY octetStringMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
 
# printableString SYNTAX yes|no
objectclass ( 1.3.6.1.4.1.24552.500.1.1.2.0 NAME 'ldapPublicKey' SUP top AUXILIARY
        DESC 'MANDATORY: OpenSSH LPK objectclass'
        MUST uid
        MAY sshPublicKey
        )

Dieses Schema muss in der slapd.conf hinzugefügt werden:

vi /srv/openldap/etc/openldap/slapd.conf 
include         /srv/openldap/etc/openldap/schema/openssh-ldap.schema

Danach muss das OpenLDAP neu gestartet werden um das neue Schema benutzen zu können.
Nun kann man einem Benutzer einen PublicKey hinzufügen. Dies funktioniert z.B. im LDAPAdmin wie folgt:
Rechtsklick auf den USer → Edit entry
Links in der Objectclass Liste auf «new» und dort reinschreiben: „ldapPublicKey“
Rechts in der Attributliste ganz nach unten scrollen und ein neues Attribut anlegen „sshPublicKey“ und den Key des users in den value kopieren.
Der Key der einzufügen ist sieht z.B. wie folgt aus:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAuNG1d9mmR8g2n+9afw1J0CWDdLw/H4+SPoR7srxDim3S3xzmb/QipC1esF1t+KPBfYW8pFaFigi0yB6C/amT7bpshyXJ0nbha56BpOPXlckvdnnyGOdvr2OFBum+++LGL7GJ0s7icwYfmcxJHqgQ09Ston+PG6RZ2km71rJDq9s= linux_key_max

Anschließend sollte er über ldapsearch aufrufbar sein:

root@Buildrootv8.0 > ldapsearch -LL -h server.ip -x "(uid=max)" -b dc=freifunk,dc=net sshPublicKey
version: 1
 
dn: uid=max,ou=users,dc=freifunk,dc=net
sshPublicKey: ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAuNG1d9mmR8g2n+9afw1J0CWDdLw/
 H4+SPoR7srxDim3S3xzmb/QipC1esF1t+KPBfYW8pFaFigi0yB6C/amT7bpshyXJ0nbha56BpOPXl
 ckvdnnyGOdvr2OFBum+++LGL7GJ0s7icwYfmcxJHqgQ09Ston+PG6RZ2km71rJDq9s= linux_key
 _max

​OpenSSH
Im OpenSSH gibt es in der Konfiguration den Befehl „AuthorizedKeysCommand“.
Dieser kann ein Script angeben, welches den Puclic-Key des Benutzers zurück gibt, welcher sich versucht am SSHD anzumelden.
In diesem Script (ldap-keys.sh) nutzen wir ldapsearch um den User zu suchen und den Public-Key aus den Attributen zurück zu geben.

vi /bin/ldap-keys.sh 
#!/bin/sh
ldapsearch -LL -h server.ip \
-w "password" -D "cn=admin;dc=freifunk;dc=net" \
-b "ou=users;dc=freifunk;dc=net" \
-x '(&(objectClass=posixAccount)(uid='"$1"'))' \
'sshPublicKey' \
| sed -n '/^ /{H;d};/sshPublicKey:/x;$g;s/\n *//g;s/sshPublicKey: //gp'

Zeit für einen Test. Wenn man dem Script die uid des LDAP-Users als ersten Parameter übergibt, sollte der Public-Key des LDAP-Users zurück kommen.

root@Buildrootv8.0 > /bin/ldap-keys.sh max
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAuNG1d9mmR8g2n+9afw1J0CWDdLw/H4+SPoR7srxDim3S3xzmb/QipC1esF1t+KPBfYW8pFaFigi0yB6C/amT7bpshyXJ0nbha56BpOPXlckvdnnyGOdvr2OFBum+++LGL7GJ0s7icwYfmcxJHqgQ09Ston+PG6RZ2km71rJDq9s= linux_key_max

Hat funktioniert 🙂

Dieses Script binden wir nun als „AuthorizedKeysCommand“ in die Konfiguration des OpenSSH Servers ein:
/etc/ssh/sshd_config

AuthorizedKeysCommand /bin/ldap-keys.sh
AuthorizedKeysCommandUser root

Danach den SSHD neu starten.
Dann sollte login über Key funktionieren 🙂

Hier die Übersicht der einzelnen Teile:

1. OpenLDAP Kompilieren
2. OpenLDAP Einrichtung
3. OpenLDAP Suchfilter
4. PAM mit LDAP
5. Einrichtung Openssh mit Public Key
6. Beispiel-Template für LDAPAdmin
7. TestSystem & Beispiele
8. SSL und TLS in OpenLDAP

leave your comment


*

Unterstütze den Frickelblog!