MongoDB Enterprise proporciona soporte para la autenticación de usuarios a través de un proxy. Esto permite a los administradores configurar un clúster de MongoDB para autenticar usuarios mediante el reenvío de solicitudes de autenticación a un servicio especificado del Protocolo Ligero de Acceso a Directorios (LDAP).
Nota
Para MongoDB 4.2 Binarios empresariales enlazados contra
libldap (como cuando se ejecuta en RHEL), el acceso a libldap está sincronizado, lo que implica algunos costos de rendimiento/latencia.
Para los binarios de MongoDB 4.2 Enterprise vinculados contra libldap_r, no hay cambios en el comportamiento respecto a versiones anteriores de MongoDB.
Considerations
Advertencia
MongoDB Enterprise para Windows no admite la vinculación mediante saslauthd.
Los servidores MongoDB de Linux admiten la vinculación a un servidor LDAP a través del demonio
saslauthd.Uso de conexiones seguras cifradas o de confianza entre los clientes y el servidor, así como entre
saslauthdy el servidor LDAP. El servidor LDAP utiliza el mecanismoSASL PLAIN, enviando y recibiendo datos en texto claro. Debe usar solo un canal de confianza, como una VPN, una conexión cifrada con TLS/SSL o una red por cable de confianza.
Configurar saslauthd
El soporte LDAP para la autenticación de usuarios requiere la configuración adecuada del proceso de demonio saslauthd, así como del servidor MongoDB.
Especifica el mecanismo.
En los sistemas que configuran saslauthd con el archivo /etc/sysconfig/saslauthd, como Red Hat Enterprise Linux, Fedora, CentOS, y Amazon Linux AMI, configura el mecanismo MECH en ldap:
MECH=ldap
En sistemas que configuran saslauthd con el archivo /etc/default/saslauthd, como Ubuntu, configura la opción MECHANISMS en ldap:
MECHANISMS="ldap"
Ajuste el comportamiento de almacenamiento en caché.
En ciertas distribuciones de Linux, saslauthd arranca con el almacenamiento en caché de credenciales de autenticación habilitado. Hasta que se reinicie o hasta que caduque la caché, saslauthd no contactará con el servidor LDAP para volver a autenticar a los usuarios en su caché de autenticación. Esto permite que saslauthd autentique exitosamente a los usuarios en su caché, incluso si el servidor LDAP está caído o si las credenciales de los usuarios en caché han sido revocadas.
Para establecer el tiempo de expiración (en segundos) de la caché de autenticación, consulte la opción -t de saslauthd.
Configura las opciones de LDAP con OpenLDAP.
Si el archivo saslauthd.conf no existe, créalo. El archivo saslauthd.conf suele residir en la carpeta /etc. Si especificas una ruta de archivo diferente, consulta la opción -O de saslauthd.
Para conectarse a un servidor OpenLDAP, actualice el archivo saslauthd.conf con las siguientes opciones de configuración:
ldap_servers: <ldap uri> ldap_search_base: <search base> ldap_filter: <filter>
El ldap_servers especifica la uri del servidor LDAP utilizado para la autenticación. En general, para OpenLDAP instalado en la máquina local, puedes especificar el valor ldap://localhost:389 o, si usas LDAP sobre TLS/SSL, puedes especificar el valor ldaps://localhost:636.
El ldap_search_base especifica el nombre distintivo al que se refiere la búsqueda. La búsqueda incluye la base o los objetos debajo.
El ldap_filter especifica el filtro de búsqueda.
Los valores de estas opciones de configuración deben corresponder a los valores específicos de tu prueba. Por ejemplo, para filtrar por correo electrónico, especifica ldap_filter: (mail=%n) en su lugar.
Ejemplo de OpenLDAP
Un archivo de muestra saslauthd.conf para OpenLDAP incluye el siguiente contenido:
ldap_servers: ldaps://ad.example.net ldap_search_base: ou=Users,dc=example,dc=com ldap_filter: (uid=%u)
Para utilizar esta configuración de muestra de OpenLDAP, cree usuarios con un atributo uid (nombre de inicio de sesión) y colóquelos en la unidad organizacional Users (ou) bajo los componentes de dominio (dc) example y com.
Para obtener más información sobre la configuración de saslauthd, consulte http://www.openldap.org/doc/admin24/guide.html#Configuringsaslauthd.
Prueba la configuración de saslauthd.
Utiliza la utilidad testsaslauthd para probar la configuración saslauthd. Por ejemplo:
testsaslauthd -u testuser -p testpassword -f /var/run/saslauthd/mux
0: OK "Success"indica autenticación exitosa.0: NO "authentication failed"indica un error de nombre de usuario, contraseña o configuración.
Modifica la ruta del archivo con respecto a la ubicación del directorio saslauthd en el sistema operativo host.
Importante
El directorio principal del archivo de socket de dominio Unix saslauthd definido para security.sasl.saslauthdSocketPath o --setParameter saslauthdPath deben conceder permisos de lectura y ejecución (r-x) a cualquiera de las siguientes opciones:
El mongod o mongos no pueden autenticarse correctamente a través de saslauthd sin el permiso especificado en el directorio saslauthd y su contenido.
Configura MongoDB
Agregue un usuario a MongoDB para la autenticación.
Agrega el usuario a la base de datos $external en MongoDB. Para especificar los privilegios del usuario, asigne roles al usuario.
Para usar sesiones de cliente y garantías de coherencia causal con usuarios de autenticación $external (usuarios Kerberos, LDAP o X.509), los nombres de usuario no pueden superar los 10k bytes.
Por ejemplo, lo siguiente agrega un usuario con acceso de solo lectura a la base de datos records.
db.getSiblingDB("$external").createUser( { user : <username>, roles: [ { role: "read", db: "records" } ] } )
Agrega actores principales adicionales según sea necesario. Para obtener más información sobre la creación y gestión de usuarios, consulta Comandos de gestión de usuarios.
Configurar el servidor de MongoDB.
Para configurar el servidor MongoDB para utilizar la instancia saslauthd para la autenticación proxy, incluya las siguientes opciones al iniciar mongod:
--authopción de línea de comandos osecurity.authorizationconfiguración,el conjunto de parámetros
authenticationMechanismsestá configurado enPLAINysaslauthdPathparámetro establecido a la ruta al zócalo de dominio Unix de la instanciasaslauthd.Importante
El directorio principal del archivo de socket de dominio Unix
saslauthdespecificado parasecurity.sasl.saslauthdSocketPatho--setParameter saslauthdPathdebe conceder permisos de lectura y ejecución (r-x) para:El
mongodomongosno pueden autenticarse correctamente a través desaslauthdsin el permiso especificado en el directoriosaslauthdy su contenido.
Si utilizas la opción authorization para aplicar la autenticación, necesitarás privilegios para crear un usuario.
Utiliza la ruta de saslauthd socket específica.
Para la ruta del socket de /<some>/<path>/saslauthd, establece saslauthdPath en /<some>/<path>/saslauthd/mux, como en el siguiente ejemplo de línea de comandos:
mongod --auth --setParameter saslauthdPath=/<some>/<path>/saslauthd/mux --setParameter authenticationMechanisms=PLAIN
Incluir opciones adicionales según sea necesario para la configuración. Por ejemplo, si se desea que los clientes remotos se conecten a su implementación o si los miembros de su implementación se ejecutan en hosts diferentes, especificar el --bind_ip.
O si utiliza un archivo de configuración en formato YAML, especifique la siguiente configuración en el archivo:
security: authorization: enabled setParameter: saslauthdPath: /<some>/<path>/saslauthd/mux authenticationMechanisms: PLAIN
O, si utilizas el formato de archivo de configuración anterior:
auth=true setParameter=saslauthdPath=/<some>/<path>/saslauthd/mux setParameter=authenticationMechanisms=PLAIN
Usar la ruta de socket por defecto del dominio Unix.
Para utilizar la ruta predeterminada del socket del dominio Unix, establezca saslauthdPath como la string vacía "", como en el siguiente ejemplo de línea de comandos:
mongod --auth --setParameter saslauthdPath="" --setParameter authenticationMechanisms=PLAIN
Incluir opciones adicionales según sea necesario para la configuración. Por ejemplo, si se desea que los clientes remotos se conecten a su implementación o si los miembros de su implementación se ejecutan en hosts diferentes, especificar el --bind_ip.
O si utiliza un archivo de configuración en formato YAML, especifique la siguiente configuración en el archivo:
security: authorization: enabled setParameter: saslauthdPath: "" authenticationMechanisms: PLAIN
O, si utilizas el formato de archivo de configuración anterior:
auth=true setParameter=saslauthdPath="" setParameter=authenticationMechanisms=PLAIN
Incluye opciones adicionales según sea necesario para la configuración. Por ejemplo, si se desea que los clientes remotos se conecten a la implementación o si los miembros de la implementación se ejecutan en diferentes hosts, se debe especificar la configuración net.bindIp.
Autenticar al usuario en mongosh.
Puede autenticarse desde la línea de comandos durante la conexión o conectarse primero y luego autenticarse mediante el método db.auth().
Para autenticarte al conectarte con mongosh, ejecuta mongosh con las siguientes opciones de línea de comandos, sustituyendo <host> y <user>, e introduce tu contraseña cuando se te pida:
mongosh --host <host> --authenticationMechanism PLAIN --authenticationDatabase '$external' -u <user> -p
Como alternativa, conéctate sin proporcionar credenciales y luego llama al método db.auth() en la base de datos $external. Especifica el valor "PLAIN" en el campo mechanism, el usuario y la contraseña en los campos user y pwd respectivamente. Utiliza el valor por defecto de digestPassword (false) ya que el servidor debe recibir una contraseña sin digerir para que pueda ser enviada a saslauthd, como en el siguiente ejemplo:
Tip
Puedes utilizar el método passwordPrompt() junto con varios métodos/comandos de autenticación/gestión de usuarios para solicitar la contraseña en lugar de especificarla directamente en la llamada del método/comando. Sin embargo, todavía puedes especificar la contraseña directamente como lo harías con versiones anteriores del shell de mongo.
db.getSiblingDB("$external").auth( { mechanism: "PLAIN", user: <username>, pwd: passwordPrompt() // or cleartext password } )
Introduzca la contraseña cuando se lo pidan.
El servidor reenvía la contraseña en texto sin formato. En general, utiliza solo en un canal de confianza (VPN, TLS/SSL, red cableada confiable). Ver Consideraciones.