Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / / /

Autenticar usando SASL autogerenciado e LDAP com OpenLDAP

Nesta página

  • Considerações
  • Configurar saslauthd
  • Configurar MongoDB

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.

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 mecanismo SASL 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.

O suporte LDAP para autenticação de usuários requer a configuração adequada do processo do daemon saslauthd, bem como do servidor MongoDB.

1

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"
2

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.

3

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) .

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.

4

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 usuário iniciando o mongod ou mongos, ou

  • Um grupo ao qual esse usuário pertence.

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.

1

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.

2

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:

Se você utilizar a opção authorization para impor a autenticação, você precisará de privilégios para criar um usuário.

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

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.

3

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/comandos de autenticação/gerenciamento de usuário para solicitar a senha em vez de especificar a senha diretamente na chamada de método/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.

Voltar

Usar o ActiveDirectory