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

Configure o MongoDB com autenticação Kerberos no Linux

Nesta página

  • Visão geral
  • Pré-requisitos
  • Procedimento
  • Considerações adicionais
  • Teste e verificação

O MongoDB Enterprise oferece suporte à autenticação usando um serviço Kerberos. O Kerberos é um protocolo de autenticação padrão do setor para grandes sistemas de cliente/ servidor . O MongoDB Enterprise oferece suporte apenas à implementação do MIT de Kerberos.

Para verificar que você está utilizando o MongoDB Enterprise, passe a opção de linha de comando --version para mongod ou mongos:

mongod --version

Na saída deste comando, procure a string modules: subscription ou modules: enterprise para confirmar que você está usando os binários MongoDB Enterprise.

Para conjuntos de réplicas e clusters fragmentados, verifique se sua configuração usa nomes de domínio totalmente qualificados (FQDN) em vez de endereços IP ou nomes de host não qualificados. Você deve usar o FQDN para GSSAPI para resolver corretamente os domínios Kerberos e permitir que você se conecte.

A instalação e a configuração de uma implantação do Kerberos estão além do escopo deste documento. Consulte a documentação do MIT Kerberos ou a documentação do seu sistema operacional para obter informações sobre como configurar uma implantação do Kerberos.

Para usar o MongoDB com Kerberos, uma entidade de serviço do Kerberos para cada instância do mongod e mongos em sua implantação do MongoDB deve ser adicionado ao banco de dados do Kerberos. Você pode adicionar a entidade de serviço executando um comando semelhante ao seguinte em seu KDC:

kadmin.local addprinc mongodb/m1.example.com@EXAMPLE.COM

Em cada sistema que estiver executando mongod ou mongos, deverá ser criado um arquivo keytab para a respectiva entidade de serviço. Você pode criar o arquivo keytab executando um comando semelhante ao seguinte no sistema que está executando mongod ou mongos:

kadmin.local ktadd mongodb/m1.example.com@EXAMPLE.COM

O procedimento abaixo descreve as etapas para adicionar uma entidade de usuário do Kerberos no MongoDB, configurar uma instância do mongod autônoma para compatibilidade com Kerberos e conectar utilizando o mongosh e autenticar a entidade de usuário.

1

Para a adição inicial de usuários Kerberos, inicie o mongod sem suporte Kerberos.

Se um usuário Kerberos já estiver no MongoDB e tiver os privilégios exigidos para criar um usuário, você poderá iniciar o mongod com suporte Kerberos.

Inclua configurações adicionais conforme apropriado para seu sistema.

Observação

mongod e mongos se vinculam ao localhost por padrão. Se os membros do sistema forem executados em hosts diferentes, ou se você desejar que os clientes remotos se conectem ao sistema, especifique --bind_ip ou net.bindIp.

2

Conecte mongosh à instância mongod. Se mongod tiver --auth ativado, verifique se você se conecta com os privilégios necessários para criar um usuário.

3

Adicione um principal Kerberos, <username>@<KERBEROS REALM> ou <username>/<instance>@<KERBEROS REALM>, ao MongoDB no banco de dados do $external. Especifique o domínio Kerberos em todas as letras maiúsculas. O banco de dados do $external permite ao mongod executar queries de uma origem externa (por exemplo, Kerberos) para autenticar. 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.

O seguinte exemplo adiciona o principal application/reporting@EXAMPLE.NET Kerberos com acesso somente leitura ao banco de dados records:

use $external
db.createUser(
{
user: "application/reporting@EXAMPLE.NET",
roles: [ { role: "read", db: "records" } ]
}
)

Adicione entidades adicionais conforme necessário. Para cada usuário que você deseja autenticar usando Kerberos, você deve criar um usuário correspondente no MongoDB. Para obter mais informações sobre como criar e gerenciar usuários, consulte Comandos de gerenciamento de usuários.

4

Para iniciar com suporte a Kerberos, defina a variável de mongod ambiente KRB5_KTNAME para o caminho do arquivo keytab e o mongod parâmetro authenticationMechanisms para GSSAPI da seguinte forma:

env KRB5_KTNAME=<path to keytab file> \
mongod \
--setParameter authenticationMechanisms=GSSAPI \
<additional mongod options>

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.

Por exemplo, o seguinte inicia uma instância do mongod independente com suporte Kerberos:

env KRB5_KTNAME=/opt/mongodb/mongod.keytab \
/opt/mongodb/bin/mongod --auth \
--setParameter authenticationMechanisms=GSSAPI \
--dbpath /opt/mongodb/data --bind_ip localhost,<hostname(s)|ip address(es)>

O caminho para o mongod bem como o arquivo keytab pode ser diferente. O arquivo keytab deve estar acessível apenas ao proprietário do processo mongod.

Com os pacotes oficiais do .deb ou .rpm, você pode definir o KRB5_KTNAME em um arquivo de configurações de ambiente. Consulte KRB5_KTNAME para obter detalhes.

5

Conecte o cliente mongosh como o principal do Kerberos application/reporting@EXAMPLE.NET. Antes de conectar, é necessário ter usado o programa kinit do Kerberos para obter as credenciais de application/reporting@EXAMPLE.NET.

Você pode conectar e autenticar a partir da linha de comando.

mongosh --host hostname.example.net --authenticationMechanism=GSSAPI --authenticationDatabase='$external' --username application/reporting@EXAMPLE.NET

Se você estiver conectando a um sistema cujo nome de host corresponda ao nome Kerberos, especifique o nome de domínio totalmente qualificado (FQDN) para a opção --host, em vez de um endereço IP ou nome de host não qualificado.

Se estiver se conectando a um sistema cujo nome de host não corresponda ao nome do Kerberos, primeiro conecte mongosh ao mongod e, em seguida, no mongosh, use o método db.auth() para se autenticar no banco de dados $external.

use $external
db.auth( { mechanism: "GSSAPI", user: "application/reporting@EXAMPLE.NET" } )

Se você instalou o MongoDB Enterprise usando um dos pacotes oficiais de .deb ou .rpm e usa os scripts init/upstart incluídos para controlar a instânciamongod, poderá definir a variável KRB5_KTNAME no arquivo de configurações de ambiente padrão em vez de definir a variável todas as vezes.

Versões recentes de sistemas baseados em Red Hat e Debian usam systemd. As versões mais antigas usam init para inicialização do sistema. Siga as instruções apropriadas para configurar a variável KRB5_KTNAME para seu sistema.

systemd armazena a configuração em arquivos unitários. Atualize o arquivo unitário para definir a variável KRB5_KTNAME.

1
sudo systemctl cat mongod

O comando systemctl retorna o local do arquivo e exibe seu conteúdo.

2

Para configurar a variável KRB5_KTNAME, edite a seguinte linha para refletir a localização do seu arquivo keytab:

Environment="KRB5_KTNAME=<path-to-your-mongod.keytab-file>"
3

Adicione a linha editada ao arquivo unitário. O arquivo da unidade editado se assemelhará a:

[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
Documentation=https://docs.mongodb.org/manual
[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod --config /etc/mongod.conf
Environment="KRB5_KTNAME=/etc/mongod.keytab"
PIDFile=/var/run/mongodb/mongod.pid
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings
[Install]
WantedBy=multi-user.target
4
sudo systemctl daemon-reload
5
sudo systemctl restart mongod

Para instalações do .rpm, o arquivo de configurações de ambiente padrão é /etc/sysconfig/mongod.

Para instalações do .deb, o arquivo é /etc/default/mongodb.

Defina o valor KRB5_KTNAME adicionando uma linha como a seguinte:

KRB5_KTNAME="<path to keytab>"

Para iniciar mongos com suporte do Kerberos, defina a variável de ambiente KRB5_KTNAME para o caminho do arquivo keytab e o parâmetro mongos authenticationMechanisms para GSSAPI da seguinte forma:

env KRB5_KTNAME=<path to keytab file> \
mongos \
--setParameter authenticationMechanisms=GSSAPI \
<additional mongos options>

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.

Por exemplo, o seguinte inicia uma instância do mongos com suporte Kerberos:

env KRB5_KTNAME=/opt/mongodb/mongos.keytab \
mongos \
--setParameter authenticationMechanisms=GSSAPI \
--configdb shard0.example.net, shard1.example.net,shard2.example.net \
--keyFile /opt/mongodb/mongos.keyfile \
--bind_ip localhost,<hostname(s)|ip address(es)>

O caminho para o mongos bem como o arquivo keytab pode ser diferente. O arquivo keytab deve estar acessível apenas ao proprietário do processo mongos.

Modifique ou inclua quaisquer opções adicionais do mongos conforme exigido para sua configuração. Por exemplo, em vez de usar --keyFile para autenticação interna de membros fragmentados do cluster, você pode usar a autenticação de membros x.509.

Para configurar o mongod ou mongos para suporte Kerberos utilizando um arquivo de configuração, especifique a configuração do authenticationMechanisms no arquivo de configuração.

Se estiver a utilizar o formato de ficheiro de configuração YAML:

setParameter:
authenticationMechanisms: GSSAPI

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.

Por exemplo, se o /opt/mongodb/mongod.conf tiver as seguintes definições de configuração para um mongod independente:

security:
authorization: enabled
setParameter:
authenticationMechanisms: GSSAPI
storage:
dbPath: /opt/mongodb/data
net:
bindIp: localhost,<hostname(s)|ip address(es)>

Para iniciar o mongod com suporte Kerberos, utilize o seguinte formulário:

env KRB5_KTNAME=/opt/mongodb/mongod.keytab \
/opt/mongodb/bin/mongod --config /opt/mongodb/mongod.conf

O caminho para seu mongod, arquivo keytab e arquivo de configuração pode ser diferente. O arquivo keytab deve ser acessível apenas ao proprietário do processo mongod.

Se você encontrar problemas ao iniciar o mongod ou mongos com autenticação Kerberos, consulte Solução de problemas de autenticação Kerberos autogerenciada.

A autenticação Kerberos (GSSAPI (Kerberos)) pode funcionar ao lado de:

  • Mecanismo de autenticação SCRAM do MongoDB:

  • Mecanismo de autenticação do MongoDB para LDAP:

  • Mecanismo de autenticação do MongoDB para x.509:

Especifique os mecanismos da seguinte maneira:

--setParameter authenticationMechanisms=GSSAPI,SCRAM-SHA-256

Adicione apenas os outros mecanismos se estiver em uso. Esta configuração de parâmetro não afeta a autenticação interna do MongoDB dos membros do cluster.

Após completar as etapas de configuração, você pode validar sua configuração com a ferramenta mongokerberos.

mongokerberos fornece um método prático para verificar a configuração Kerberos da sua plataforma para uso com o MongoDB e para testar se a autenticação Kerberos de um cliente MongoDB funciona conforme esperado. Consulte a documentação do mongokerberos para saber mais informações.

mongokerberos está disponível apenas no MongoDB Enterprise.

Voltar

Kerberos