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
Login