Benutzer-Werkzeuge

Webseiten-Werkzeuge


anleitungen:openldap:ssh_pulickey

Dies ist eine alte Version des Dokuments!


5. Einrichtung Openssh mit Public Key

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

Anschlissend 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 :-)

anleitungen/openldap/ssh_pulickey.1450631303.txt.gz · Zuletzt geändert: 2018/02/20 10:07 (Externe Bearbeitung)