Autenticar usando SASL autogerenciado e LDAP com OpenLDAP
Observação
A partir do MongoDB 8.0, A autenticação e autorização LDAP estão obsoletas. O LDAP está disponível e continuará a operar sem alterações durante a vida útil do MongoDB 8. O LDAP será removido em uma futura versão principal.
Para obter detalhes, consulte Descontinuação do LDAP.
MongoDB Enterprise fornece suporte para autenticação proxy de usuários. Isso permite que os administradores configurem um cluster do MongoDB para autenticar usuários fazendo proxy de solicitações de autenticação para um serviço LDAP (Lightweight Directory Access Protocol) especificado.
Observação
Para binários do MongoDB 4.2 Enterprise vinculados ao libldap
(como ao executar no RHEL), o acesso ao libldap
é sincronizado, incorrendo em alguns custos de desempenho/latência.
Para binários do MongoDB 4.2 Enterprise vinculados ao libldap_r
, não há alteração no comportamento de versões anteriores do MongoDB.
Considerações
Aviso
O MongoDB Enterprise para Windows não suporta ligação via saslauthd
.
Os servidores Linux MongoDB suportam ligação a um servidor LDAP através do daemon
saslauthd
.Utilize conexões seguras criptografadas ou confiáveis entre clientes e o servidor, como também, entre o
saslauthd
e o servidor LDAP. O servidor LDAP utiliza o mecanismoSASL PLAIN
, enviando e recebendo dados em texto sem formatação. Você deve usar apenas um canal confiável, como uma VPN, uma conexão criptografada com TLS/SSL ou uma rede cabeada confiável.
Configurar saslauthd
O suporte LDAP para autenticação de usuários requer a configuração adequada do processo do daemon saslauthd
, bem como do servidor MongoDB.
Especifique o mecanismo.
Em sistemas que configuram o saslauthd
com o arquivo /etc/sysconfig/saslauthd
, como Red Hat Enterprise Linux, Fedora, CentOS e Amazon Linux AMI, configure o mecanismo MECH
para ldap
:
MECH=ldap
Em sistemas que configuram o saslauthd
com o arquivo /etc/default/saslauthd
, como Ubuntu, configure a opção MECHANISMS
para ldap
:
MECHANISMS="ldap"
Ajustar comportamento de cache.
Em certas distribuições do Linux, o saslauthd
começa com o cache de credenciais de autenticação habilitadas. Até que seja reiniciado ou até que o cache expire, saslauthd
não entrará em contato com o servidor LDAP para autenticar novamente os usuários em seu cache de autenticação. Isso permite que saslauthd
autentique com êxito os usuários em seu cache, mesmo que o servidor LDAP esteja inativo ou se as credenciais dos usuários armazenados em cache forem revogadas.
Para definir o tempo de expiração (em segundos) para o cache de autenticação, consulte a opção -t de saslauthd
.
Configure opções LDAP com OpenLDAP.
Se o arquivo saslauthd.conf
não existir, crie-o. O arquivo saslauthd.conf
geralmente reside na pasta /etc
. Se especificar um caminho de arquivo diferente, consulte a opção -O de saslauthd
.
Para conectar a um servidor OpenLDAP, atualize o arquivo saslauthd.conf
com as seguintes opções de configuração:
ldap_servers: <ldap uri> ldap_search_base: <search base> ldap_filter: <filter>
O ldap_servers
especifica o uri do servidor LDAP usado para autenticação. Em geral, para OpenLDAP instalado na máquina local, você pode especificar o valor ldap://localhost:389
ou se utilizar LDAP sobre TLS/SSL, você pode especificar o valor ldaps://localhost:636
.
O ldap_search_base
especifica o nome distinto ao qual a pesquisa é relativa. A pesquisa inclui a base ou os objetos abaixo.
O ldap_filter
especifica o filtro de pesquisa.
Os valores dessas opções de configuração devem corresponder aos valores específicos do seu teste. Por exemplo, para filtrar por e-mail, especifique ldap_filter: (mail=%n)
.
Exemplo de OpenLDAP
Um arquivo de amostra do saslauthd.conf
para OpenLDAP inclui o seguinte conteúdo:
ldap_servers: ldaps://ad.example.net ldap_search_base: ou=Users,dc=example,dc=com ldap_filter: (uid=%u)
Para utilizar esta configuração OpenLDAP de amostra, crie usuários com um atributo uid
(nome de login) e posicione na unidade organizacional Users
(ou
) nos componentes de domínio (dc
) example
e com
.
Para mais informações sobre configuração saslauthd
do , consulte http://www.openldap.org/doc/admin24/guide.html#Configuringsaslauthd.
Teste a configuração do.<a class=\" \" href=\" \" title=\" \"><svg xmlns=\" \" width=\" \" height=\" \" fill=\" \" viewbox=\" \" class=\" \" role=\" \" aria-label=\" \"><path fill=\" \" d=\" \"> <path fill=\" \" d=\" \"> saslauthd
Utilize o utilitário testsaslauthd
para testar a configuração do saslauthd
. Por exemplo:
testsaslauthd -u testuser -p testpassword -f /var/run/saslauthd/mux
0: OK "Success"
indica autenticação bem-sucedida.0: NO "authentication failed"
indica um nome de usuário, senha ou erro de configuração.
Modifique o caminho do arquivo em relação à localização do diretório saslauthd
no sistema operacional do host.
Importante
O diretório pai do arquivo de soquete de domínio Unix do saslauthd
especificado para security.sasl.saslauthdSocketPath
ou --setParameter saslauthdPath
deve conceder permissões de leitura e execução (r-x
) para:
O mongod
ou mongos
não pode autenticar com sucesso via saslauthd
sem a permissão especificada no diretório saslauthd
e seu conteúdo.
Configurar MongoDB
Adicionar usuário ao MongoDB para autenticação.
Adicione o usuário ao banco de dados do $external
no MongoDB. Para especificar os privilégios do usuário, atribua funções ao usuário.
Para usar Client Sessions e Causal Consistency Guarantees com usuários de autenticação $external
(usuários Kerberos, LDAP ou x.509), os nomes de usuário não podem ter mais de 10k bytes.
Por exemplo, o seguinte adiciona um usuário com acesso somente leitura ao banco de dados do records
.
db.getSiblingDB("$external").createUser( { user : <username>, roles: [ { role: "read", db: "records" } ] } )
Adicione entidades adicionais conforme necessário. Para obter mais informações sobre como criar e gerenciar usuários, consulte Comandos de gerenciamento de usuários.
Configurar servidor MongoDB.
Para configurar o Servidor MongoDB para usar a instância do saslauthd
para autenticação proxy, inclua as seguintes opções ao iniciar o mongod
:
Opção de linha de comando do
--auth
ou configuração dosecurity.authorization
,parâmetro
authenticationMechanisms
definido comoPLAIN
, eO parâmetro
saslauthdPath
definido para o caminho do soquete de domínio Unix da instânciasaslauthd
.Importante
O diretório pai do arquivo de soquete de domínio Unix do
saslauthd
especificado parasecurity.sasl.saslauthdSocketPath
ou--setParameter saslauthdPath
deve conceder permissões de leitura e execução (r-x
) para:O
mongod
oumongos
não pode autenticar com sucesso viasaslauthd
sem a permissão especificada no diretóriosaslauthd
e seu conteúdo.
Se você utilizar a opção authorization
para impor a autenticação, você precisará de privilégios para criar um usuário.
Use o saslauthd
caminho de soquete específico.
Para caminho de soquete do /<some>/<path>/saslauthd
, configure o saslauthdPath
para /<some>/<path>/saslauthd/mux
, como no seguinte exemplo de linha de comando:
mongod --auth --setParameter saslauthdPath=/<some>/<path>/saslauthd/mux --setParameter authenticationMechanisms=PLAIN
Inclua opções adicionais, conforme necessário, para sua configuração. Por exemplo, se você deseja que clientes remotos se conectem à sua implantação ou se os membros da implantação forem executados em hosts diferentes, especifique o --bind_ip
.
Ou se estiver usando um arquivo de configuração no formato YAML, especifique as seguintes configurações no arquivo:
security: authorization: enabled setParameter: saslauthdPath: /<some>/<path>/saslauthd/mux authenticationMechanisms: PLAIN
Ou, se estiver usando o formato de arquivo de configuração mais antigo:
auth=true setParameter=saslauthdPath=/<some>/<path>/saslauthd/mux setParameter=authenticationMechanisms=PLAIN
Use o caminho de soquete de domínio Unix padrão.
Para usar o caminho de soquete de domínio Unix padrão, defina o saslauthdPath
para a string vazia ""
, como no exemplo de linha de comando a seguir:
mongod --auth --setParameter saslauthdPath="" --setParameter authenticationMechanisms=PLAIN
Inclua opções adicionais, conforme necessário, para sua configuração. Por exemplo, se você deseja que clientes remotos se conectem à sua implantação ou se os membros da implantação forem executados em hosts diferentes, especifique o --bind_ip
.
Ou se estiver usando um arquivo de configuração no formato YAML, especifique as seguintes configurações no arquivo:
security: authorization: enabled setParameter: saslauthdPath: "" authenticationMechanisms: PLAIN
Ou, se estiver usando o formato de arquivo de configuração mais antigo:
auth=true setParameter=saslauthdPath="" setParameter=authenticationMechanisms=PLAIN
Inclua opções adicionais, conforme necessário, para sua configuração. Por exemplo, se você deseja que clientes remotos se conectem à sua implantação ou se os membros da implantação forem executados em hosts diferentes, especifique a configuração net.bindIp
.
Autentique o usuário mongosh
no.
Você pode autenticar a partir da linha de comando durante a conexão ou conectar primeiro e então autenticar utilizando o método db.auth()
.
Para autenticar ao se conectar com mongosh
, execute mongosh
com as seguintes opções de linha de comando, substituindo <host>
e <user>
, e digite sua senha quando solicitado:
mongosh --host <host> --authenticationMechanism PLAIN --authenticationDatabase '$external' -u <user> -p
Como alternativa, conecte-se sem fornecer credenciais e, em seguida, chame o método db.auth()
no banco de dados $external
. Especifique o valor "PLAIN"
no campo mechanism
, o usuário e a senha nos campos user
e pwd
, respectivamente. Use o valor digestPassword
padrão (false
) pois o servidor deve receber uma senha não digerida para encaminhar para saslauthd
, como no exemplo a seguir:
Dica
Você pode usar o método passwordPrompt()
em conjunto com vários métodos e comandos de gerenciamento de autenticação de usuário para solicitar a senha em vez de especificar a senha diretamente na chamada de método ou comando. No entanto, você ainda pode especificar a senha diretamente como faria com versões anteriores do shell mongo
.
db.getSiblingDB("$external").auth( { mechanism: "PLAIN", user: <username>, pwd: passwordPrompt() // or cleartext password } )
Digite a senha quando solicitado.
O servidor encaminha a senha em texto sem formatação. Em geral, use apenas em um canal confiável (VPN, TLS/SSL, rede cabeada confiável). Consulte Considerações.