Solucionar problemas de autenticação Kerberos autogerenciada
Nesta página
mongokerberos
Ferramenta de Validação
O programa mongokerberos
fornece um método conveniente para verificar a configuração do Kerberos de sua plataforma para uso com o MongoDB e para testar se a autenticação Kerberos de um cliente MongoDB funciona conforme o esperado.
A ferramenta mongokerberos
pode ajudar a diagnosticar problemas comuns de configuração e é o local recomendado para começar ao solucionar problemas de configuração do Kerberos. Consulte a documentação do mongokerberos
para mais informações.
mongokerberos
está disponível apenas no MongoDB Enterprise.
Estratégias de depuração de configuração Kerberos
Se você tiver dificuldade em iniciar ou autenticar mongod
ou mongos
com Kerberos, considere o seguinte:
Certifique-se de que você está executando o MongoDB Enterprise, não o MongoDB Community Edition. A autenticação Kerberos é uma funcionalidade do MongoDB Enterprise e não funcionará com binários da MongoDB Community Edition.
Para verificar se você está usando o MongoDB Enterprise, passe a opção de linha de comando
--version
paramongod
oumongos
:mongod --version Na saída deste comando, procure a string
modules: subscription
oumodules: enterprise
para confirmar que você está usando os binários MongoDB Enterprise.Certifique-se de que o nome de host do sistema canônico da instância do
mongod
oumongos
seja um nome de domínio totalmente qualificado e resolvível.No Linux, você pode verificar a resolução do nome de host do sistema com o comando
hostname -f
no prompt do sistema.No Linux, certifique-se de que o componente primário do nome principal do serviço (SPN) do SPN é
mongodb
. Se o componente primário do SPN não formongodb
, você deverá especificar o componente primário usando--setParameter saslServiceName
.
No Linux, certifique-se de que o componente de instância do nome principal do serviço (SPN) no arquivo keytab corresponde ao nome de host do sistema canônico da
mongod
instânciamongos
ou . Se o nome de host do sistema da instânciamongod
oumongos
não estiver no arquivo keytab, a autenticação falhará com uma mensagem de erroGSSAPI error acquiring credentials.
.Se o nome do host da sua instância
mongod
oumongos
conforme retornado porhostname -f
não for totalmente qualificado, use--setParameter saslHostName
para definir o nome de domínio totalmente qualificado da instância ao iniciar omongod
oumongos
.Certifique-se de que cada host que executa uma instância
mongod
oumongos
tenha registros DNSA
ePTR
para fornecer pesquisa de DNS direta e reversa. O registroA
deve ser mapeado para o FQDN domongod
oumongos
.Certifique-se de que os relógios nos servidores que hospedam suas instâncias do MongoDB e na infraestrutura do Kerberos estejam dentro do desvio de tempo máximo: 5 minutos por padrão. Diferenças de tempo maiores que a enviesamento de tempo máximo impedem a autenticação bem-sucedida.
Certifique-se de que os keytabs do Linux KRB5 contenham nomes principais que terminem em
@<KERBEROS REALM>
. Para validar os SPNs, execute osetspn -Q <spn>
no Active Directory. Se configurado corretamente, este comando retorna um Nome Distinto para a conta anexada ao SPN. Se você executarklist -k <keytab>
no Linux,<spn>@<KERBEROS REALM>
aparecerá no keytab.Se você usar o Active Directory como um KDC, certifique-se de que a conta de serviço do MongoDB seja uma conta de usuário, não uma conta de máquina.
Se você usar a criptografia AES com o Active Directory, habilite o AES na conta de serviço do MongoDB com a propriedade
msDS-SupportedEncryptionTypes
ou a configuração de política "Segurança de rede: configurar tipos de criptografia permitidos para Kerberos".O Kerberos salva seus algoritmos de geração de chaves para garantir que dois usuários com a mesma senha resultem em chaves distintas.
ktutil
no Linux e Active Directory (AD) não usam o mesmo processo para gerar sais. Essa discrepância pode resultar em falhas de autenticação ao trabalhar em ambientes Linux e Windows. Para atenuar esse problema, você pode:Gere o arquivo keytab no servidor AD e mova o arquivo resultante para o servidor Linux.
ktpass /out <outfile.keytab> /princ <spn>@<KERBEROS REALM> /mapuser <current userPrincipalName> /crypto ALL /ptype KRB5_NT_PRINCIPAL +rndpass Observação
Isso mudará
userPrincipalName
para o valor em/princ
.Use
ktutil
no Linux e force-o a usar o sal correto. Para forçarktutil
a usar o sal correto:Gere uma entrada keytab que utilize
userPrincipalName
como o nome principal.ktutil: add_entry -password -p <userPrincipalName>@<KERBEROS REALM> -e aes256-cts-hmac-sha1-96 -k <KVNO> Password for <userPrincipalName>@<KERBEROS REALM>: ktutil: list -k slot KVNO Principal Hexdump a chave.
Crie uma nova entrada keytab, usando
<spn>@<KERBEROS REALM>
como o nome principal e use a chave hexadecimal.1 <KVNO> <userPrincipalName>@<KERBEROS REALM>(0x<HEXDUMP>) ktutil: add_entry -key -p <spn>@<KERBEROS REALM> -e aes256-cts-hmac-sha1-96 -k <KVNO> Key for <spn>@<KERBEROS REALM> (hex): <HEXDUMP> ktutil: write_kt mongodb_ad.keytab
Use RC4-HMAC, que não utiliza sais, embora isso não seja recomendado.
Registro de rastreamento Kerberos no Linux
O MIT Kerberos fornece a variável de ambiente KRB5_TRACE
para a saída do log de rastreamento. Se você estiver tendo problemas constantes com o MIT Kerberos no Linux, poderá definir KRB5_TRACE
ao iniciar suas instâncias mongod
, mongos
ou mongosh
para gerar um log detalhado.
Por exemplo, o comando a seguir inicia um mongod
autônomo cujo arquivo keytab está no caminho /etc/krb5.keytab
padrão e define KRB5_TRACE
para gravar em /logs/mongodb-kerberos.log
:
env KRB5_KTNAME=/etc/krb5.keytab \ KRB5_TRACE=/logs/mongodb-kerberos.log \ mongod --dbpath /data/db --logpath /data/db/mongodb.log \ --auth --setParameter authenticationMechanisms=GSSAPI \ --bind_ip localhost,<hostname(s)|ip address(es)> --fork
Mensagens de erro comuns
Em algumas situações, o MongoDB retornará mensagens de erro da interface GSSAPI se houver um problema com o serviço Kerberos. Algumas mensagens de erro comuns são:
GSSAPI error in client while negotiating security context.
Esse erro ocorre no cliente e reflete credenciais insuficientes ou uma tentativa maliciosa de autenticação.
Se você receber esse erro, verifique se está usando as credenciais corretas e o nome de domínio totalmente qualificado correto ao se conectar ao host.
GSSAPI error acquiring credentials.
- Esse erro ocorre durante o início do
mongod
oumongos
e reflete a configuração incorreta do nome de host do sistema ou um arquivo keytab ausente ou configurado incorretamente.