Menu Docs

Configure o MongoDB com autenticação Kerberos no Linux

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 and 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 membro 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:

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.