systemadmin.es > Autenticación > Autenticación mediante claves SSH almacenadas en un OpenLDAP

Autenticación mediante claves SSH almacenadas en un OpenLDAP

Anteriormente vimos cómo configurar sssd para realizar la autenticación contra un OpenLDAP, hoy vamos a ver cómo configurar OpenSSH para permitir entrar en el servidor mediante las claves públicas almacenadas en un servidor OpenLDAP:

En el serviro OpenLDAP deberemos cargar el schema openssh-openldap para poder cargar los tipos necesarios:

dn: cn=openssh-openldap,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: openssh-openldap
olcAttributeTypes: {0}( 1.3.6.1.4.1.24552.500.1.1.1.13 NAME 'sshPublicKey' DES
 C 'MANDATORY: OpenSSH Public key' EQUALITY octetStringMatch SYNTAX 1.3.6.1.4.
 1.1466.115.121.1.40 )
olcObjectClasses: {0}( 1.3.6.1.4.1.24552.500.1.1.2.0 NAME 'ldapPublicKey' DESC
  'MANDATORY: OpenSSH LPK objectclass' SUP top AUXILIARY MUST ( sshPublicKey $
  uid ) )

En el cliente (dónde queremos configuralo) deberemos instalar el paquete openssh-ldap. Una vez instalado deberemos modificar el /etc/ssh/sshd_config para añadir lo siguiente:

AuthorizedKeysCommand /usr/libexec/openssh/ssh-ldap-wrapper
AuthorizedKeysCommandRunAs sshd
PubkeyAuthentication yes

Y reiniciamos sshd para aplicarlo:

/etc/init.d/sshd restart

A continuación configuramos el cliente mediante el fichero /etc/ssh/ldap.conf, por ejemplo:

BASE            ou=manager,o=systemadmin
URI             ldaps://ldap1.systemadmin.es:636 ldaps://ldap2.systemadmin.es:636
BINDDN          uid=test,ou=users,o=systemadmin
BINDPW          contrasenya_secreta
DEREF           finding
REFERRALS       on
TLS_CACERT      /etc/openldap/cacerts/certificado.ca
TLS_REQCERT     demand
TLS_CACertDIR   /etc/openldap/cacerts
TIMELIMIT       15
TIMEOUT         20
SSL yes

Deberemos adaptar la configuración, en este caso estamos forzando usar LDAPS mediante SSL yes, su queremos usar LDAP en texto plano deberemos dejarlo en SSL no y para usar LDAP con START_TLS podemos dejarlo en SSL start_tls o simplemente quitar la opción (ya que es la opción por defecto)

También nos interesa tener en cuenta la opción TLS_REQCERT que define cómo de estrictos somos con el TLS, en este caso lo hemos dejado en demand (por lo tanto es necesario que el certificado sea entregado y además sea válido)

El resto de opciones son:

  • demand: Lo ya comentado, se pide el certificado y debe ser válido
  • try: Se pide el certificado, si no se entrega se sigue normalmente, pero si no es valido se interrumpe la sesión
  • allow: Se pide el certificado, pero tanto si el certificado entregado es valido o no, se sigue igualmente
  • never: No se pide certificado en absoluto

Para añadir la clave pública en el OpenLDAP, deberemos hacerlo mediante sshPublicKey, un ldif de ejemplo sería:

dn: uid=jprats,ou=users,o=systemadmin
changetype: modify
add: sshPublicKey
sshPublicKey: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsuZuQx/DDMFsGjXCdT/qMjqvRR2MFZmC7SGDymLtpMfAwtYxyK2SI446kf6AgC94a6L8wPV9+9Ot+Nt/Dk4t056ktpgl0jp6QvTDEJDeaXuib4C0VIzjpwasIl6aooCGwWMMomeUyTN87t/Ew01L4n29icOzql0GRirqHbaJ6ZT3VtA6TEooijQyjMRTObx7lQ7Ahr4tmD+K9aweL5u/Wr6Jwl99iIr7X8C23koSDllenOx10Oic7o4bAM1eBBhe9Dmodv4cyt/gS08BT2arRBpedocChvr1PxMu2vCeLg3YyQ2dk7jJQFG8KVxlfMmv+VOqBZ5fA5qej/414906v
-
add: objectClass
objectClass: ldapPublicKey

2 comments to “Autenticación mediante claves SSH almacenadas en un OpenLDAP”

  1. Supongo que donde pone

    En el cliente (dónde queremos configuralo) quiere decir En el servidor (dónde queremos configuralo)

    Tengo una duda.
    Si tengo un servidor con autenticación SSSD + LDAP y me conecto por ssh a ese servidor ¿ usará sshd la autenticación sssd + ldap para autenticar el usuario ?

  2. Me refiero que el sshd en este caso actua como cliente del OpenLDAP, por esto no digo el servidor para no confundirlo.

    Para este caso es únicamente para las claves, por lo que es independiente de si tienes configurada la autenticación con sssd+ldap o no, pero claro, es un buen complemento. Para el caso concreto que comentas, el sssd se encargará de resolver el nombre del UID, sacar dónde esta la home… pero tambiémn podria ser un usuario local con claves ssh en un OpenLDAP

    saludos,

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>