¿Es posible obtener las claves públicas de una base de datos en lugar del archivo autorizado_claves?
Me gustaría usar una configuración de este tipo para administrar el acceso ssh a cosas como repositorios git para múltiples usuarios sin la necesidad de volver a crear el archivo autorizado_keys cada vez que se cambia o agrega una clave pública.
database
ssh
public-key
Fionn
fuente
fuente
Respuestas:
Encontré esta pregunta al intentar responderla yo mismo. Después de algunas búsquedas y experimentos, he encontrado algunas otras opciones para esto. Voy a omitir la parte sobre la distribución de claves como alternativa ya que Matt Simmons lo cubrió. Además, sé que hay momentos en que eso no es lo suficientemente bueno. Por ejemplo, si usted es GitHub y tiene que almacenar millones de claves públicas contra un solo usuario, no es factible o deseable actualizar continuamente los archivos SSH autorizado_keys y mantenerlos sincronizados entre docenas y cientos de cajas de borde.
Entonces,
En primer lugar, RedHat (y sus variantes) tienen un parche compatible para OpenSSH que agrega las opciones
AuthorizedKeysCommand
yAuthorizedKeysCommandRunAs
. El parche se ha fusionado en sentido ascendente en openssh 6.2. Para citar de la página del manual :En mis experimentos de esta noche, descubrí que esto no funciona debido a las políticas predeterminadas de SELinux. Puede solucionar esto desactivando la aplicación de SELinux con
setenforce 0
. Dado que la conversión de SELinux es probablemente una mala idea, en su lugar puede generar la política correcta. En mi caso, eso fue tan simple como intentar iniciar sesión con laAuthorizedKeysCommand
opción configurada/etc/ssh/sshd_config
y luego usaraudit2allow -a -M local && semodule -i local.pp
. Básicamente, esto revisa los registros de auditoría y encuentra cosas que se evitaron y genera excepciones para ellos. Si es probable que tenga otras cosas allí que podrían incluirse en la lista blanca, probablemente debería obtener más informaciónaudit2allow
para asegurarse de obtener las nuevas políticas correctas.Existen otros parches diferentes (probablemente menos probados y confiables) para agregar una funcionalidad similar. Por ejemplo, hay, openssh-script-auth . También puede encontrar el parche que RedHat usó y aplicarlo directamente. Un encuentro rápido de Google descubre https://launchpadlibrarian.net/89063205/openssh-5.3p1-authorized-keys-command.patch y https://launchpadlibrarian.net/105938151/openssh-authorized-keys-command.patch que son basado en las versiones RH pero que se han actualizado para las versiones más nuevas de OpenSSH.
Parche OpenSSH para realizar búsquedas de claves directamente desde alguna tienda (por ejemplo, como GitHub y CodeBaseHQ y otros lo han hecho). GitHub no ha abierto este parche, que yo sepa, pero sé que en el pasado he encontrado versiones para la búsqueda de claves MySQL y PostgreSQL. Traté de encontrarlos nuevamente pero no he tenido mucha suerte.
También hay algunas opciones basadas en FUSE. Por ejemplo, hay LPKFuse que le permite servir claves públicas de LDAP cambiando la
AuthorizedKeysFile
ubicación a una en el sistema de archivos LPKFuse. LPKFuse FS crea archivos virtuales cuyo contenido está respaldado por campos de un servidor de directorio.En general, creo que la opción # 1 es, con mucho, la mejor, ya que es oficialmente compatible con RedHat. Además, le permite poner cualquier lógica que desee en ese script (incluyendo hablar con una base de datos) en el idioma que desee.
fuente
OpenSSH no tiene esta capacidad, que yo sepa. Su mejor opción puede ser que un script regenere automáticamente el archivo todas las noches (o con la frecuencia necesaria).
Además, es posible que desee ver esta pregunta: un sistema para distribuir claves públicas SSH
fuente
Creo que en las versiones más recientes de openssh puede almacenar claves en una entrada LDAP de usuarios. Si ya está utilizando LDAP o AD para la administración de cuentas, también debería poder aprovecharlo para la administración de claves.
fuente