Como Tomar Controle da Segurança do seu MongoDB

Hackers estão se tornando mais sofisticados e sabem como explorar vulnerabilidades. Se você tiver dados sensíveis em seu banco de dados MongoDB, é crucial levar a segurança a sério. Mas como? Não se preocupe! Este tutorial tem tudo o que você precisa!

Neste tutorial, você aprenderá a proteger seus bancos de dados MongoDB e afastar hackers configurando medidas de segurança.

Continue lendo e comece a tomar controle da segurança do seu MongoDB!

Pré-requisitos

  • Este tutorial será uma demonstração prática. Para acompanhar, certifique-se de ter o seguinte:
  • A non-root user with sudo privileges.

Criando um Usuário Administrativo Dedicado

O MongoDB não possui nenhum sistema de autenticação integrado. Por padrão, qualquer pessoa com acesso ao banco de dados possui privilégios administrativos completos — muito perigoso! Como proteger seu banco de dados? Você criará um usuário com privilégios administrativos e restringirá os bancos de dados a esse usuário administrativo.

Esta configuração permite que você forneça um único ponto de acesso de usuário com privilégios administrativos, enquanto restringe o que cada usuário pode fazer dentro do banco de dados. Por exemplo, os desenvolvedores devem ter acesso somente leitura aos bancos de dados, enquanto os administradores podem criar e editar dados.

1. Abra seu terminal e execute o comando mongo abaixo sem nenhum argumento. Este comando permite que você se conecte ao seu shell MongoDB como o usuário administrador padrão.

Este usuário administrador é poderoso, pois tem acesso total de leitura/escrita a todos os bancos de dados no servidor, e é melhor evitar usar este usuário para o trabalho diário.

mongo

Você receberá um aviso que diz O controle de acesso não está ativado…, como mostrado abaixo.

Este aviso indica que qualquer pessoa que possa acessar o servidor MongoDB pode executar as ações que desejam nos bancos de dados. Essas ações incluem, mas não estão limitadas a, excluir, descartar, atualizar bancos de dados.

Esse aviso aparece porque você ainda não ativou o controle de acesso. Não se preocupe com isso, por enquanto. Você aprenderá como ativar o controle de acesso na próxima seção.

Connecting to your MongoDB shell

2. Em seguida, execute o comando show dbs para mostrar todos os bancos de dados no servidor, incluindo os bancos de dados admin que um usuário normal não deveria ver.

show dbs
Showing all databases on the server

3. Execute o comando use admin abaixo para mudar para o banco de dados de administração, já que seu foco está em criar um usuário administrativo dedicado. Este comando altera o contexto do seu banco de dados atual para usar o banco de dados de administração, como mostrado abaixo.

O MongoDB utiliza o banco de dados de administração para armazenar regras de controle de acesso e fornecer autenticação incorporada, nomes de usuário e senha para usuários e suas funções. Você não pode excluir ou renomear o banco de dados de administração porque ele é essencial para a funcionalidade do banco de dados.

use admin
Switching to the admin database

4. Agora, copie e cole o código abaixo no shell do mongo e pressione Enter. Este código cria um usuário chamado AdminATA, com a senha LDWbPf6Fy9Ezs3Mv, mas você pode usar credenciais diferentes, se preferir.

Esse novo usuário tem acesso de leitura/gravação (readWriteAnyDatabase) a todos os bancos de dados e acesso de administração a todas as coleções. No entanto, este usuário não tem privilégios para excluir ou renomear bancos de dados e não pode excluir ou alterar privilégios de outros usuários.

Após executar o comando e se você receber um erro, verifique seu código e tente novamente.

# O método db.createUser() cria um novo usuário no banco de dados atual, com os privilégios especificados pelas funções.
db.createUser(
{
# Especificando o nome de usuário AdminATA, mas você pode inserir qualquer nome de usuário que desejar.
user: "AdminATA",
# O método passwordPrompt() é uma função auxiliar universal
# que instrui o shell do MongoDB a solicitar uma senha para o usuário AdminATA.
pwd: passwordPrompt(),
# Especificando os privilégios que deseja que seu usuário AdminATA tenha.
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)

5. Forneça uma senha segura quando solicitado, como mostrado abaixo, e pressione Enter.

Providing a secure password

Abaixo, você pode ver uma mensagem de Usuário adicionado com sucesso. Esta saída confirma que você criou com sucesso um usuário com privilégios administrativos e os restringiu aos privilégios mínimos necessários.

Neste ponto, você já tem um usuário administrativo chamado AdminATA que pode fazer tudo o que você precisa no banco de dados sem dar acesso a todos.

Verifying Successful Admin User Creation in MongoDB

6. Por fim, execute o comando exit para sair do shell do mongo.

exit
Leaving the mongo shell

Adicionando Segurança Habilitando Autenticação

Agora que você tem um usuário administrativo, você adicionará outra camada de segurança habilitando autenticação. Fazendo isso, concede acesso ao banco de dados apenas aos usuários com as credenciais corretas.

Autenticação refere-se ao processo de validar uma conexão, geralmente fornecendo um nome de usuário e senha ou usando um token de autenticação. A autenticação garante que você é quem diz ser e não um impostor tentando acessar recursos.

1. Habilite a autenticação editando o arquivo de configuração do MongoDB com o seguinte e salve as alterações:

  • Abra o arquivo /etc/mongod.conf no seu editor de texto favorito. O arquivo /etc/mongod.conf contém a configuração do seu cluster MongoDB.
  • Procure e descomente a diretiva #security removendo o símbolo # na frente da diretiva, como mostrado abaixo. Essa diretiva indica ao MongoDB para procurar as configurações de segurança no arquivo de configuração.
  • Adicione uma nova linha abaixo da diretiva security que diz authorization: enabled. Observe que a linha authorization: enabled é indentada (tem dois espaços no início), como mostrado abaixo.
Adding the authorization parameter

2. Em seguida, execute o seguinte comando systemctl para reiniciar o servidor MongoDB para que as alterações tenham efeito.

sudo systemctl restart mongod

3. Por fim, execute o comando abaixo para visualizar o status do seu serviço MongoDB.

sudo systemctl status mongod

Abaixo, você pode ver uma linha que diz Ativo: ativo (executando) em texto verde, o que indica que seu servidor MongoDB está em execução e pronto para aceitar conexões.

Viewing MongoDB Service Status

Testando se a Autenticação Funciona

Você acabou de habilitar a autenticação, mas como saber se funciona? Você vai fazer login no usuário administrativo para testar e garantir que sua autenticação funcione visualizando bancos de dados.

1. Execute os seguintes comandos para acessar o shell mongo como você fez na seção “Criando um Usuário Administrativo Dedicado” (passo um).

mongo

Como você pode ver abaixo, você não recebe mais o aviso O controle de acesso não está habilitado… sobre a habilitação da autenticação. Em vez disso, você receberá uma mensagem que informa a versão do seu servidor MongoDB e do shell MongoDB.

Connecting to the MongoDB Shell

2. Em seguida, execute novamente o comando show dbs para verificar se ainda consegue acessar o banco de dados.

show dbs

O comando deve mostrar todos os bancos de dados, até mesmo o banco de dados admin. Mas como você pode ver abaixo, nada aparece. Por quê? Visualizar a lista de bancos de dados é um privilégio reservado apenas para usuários administrativos.

Você não autenticou seu shell mongo para usar a função Admin, então não está autorizado a visualizar a lista de bancos de dados.

Listing All Databases (empty)

Com a autenticação habilitada, a conexão falhará se alguém tentar acessar o banco de dados usando uma string de conexão que não contenha as credenciais corretas.

A autenticação de strings de conexão é uma parte fundamental da segurança do MongoDB, e você deve implementar autenticação em todas as camadas da aplicação. Todas as conexões com o MongoDB devem usar uma string de autenticação consistindo em credenciais. Essas credenciais incluem o nome de usuário correto e a senha.

3. Execute o comando exit para sair do shell do MongoDB.

exit

4. Agora, execute o comando abaixo para fazer login no shell do MongoDB com o nome de usuário (-u) e senha (-p) do usuário administrativo que você acabou de criar. Substitua AdminATA pelo nome de usuário que você criou na seção “Criando um Usuário Administrativo Dedicado” (passo quatro).

O parâmetro --authenticationDatabase indica ao shell do MongoDB para autenticar contra o banco de dados admin.

mongo -u AdminATA -p --authenticationDatabase admin

5. Forneça sua senha para o usuário administrativo quando solicitado.

Providing administrative password
logging into the MongoDB shell as an administrator

6. Por fim, execute novamente o comando show dbs para tentar ver se você pode visualizar todos os bancos de dados.

show dbs

Desta vez, como você pode ver abaixo, a lista de bancos de dados é exibida, já que você é um usuário administrador.

Listing all databases as admin user

Conclusão

Neste tutorial, você aprendeu como se conectar para criar um usuário administrativo e habilitar a autenticação. Você aprendeu a assumir o controle da segurança do seu MongoDB e impor restrições sobre quem pode acessar os bancos de dados em seu servidor.

Neste ponto, você decide quem pode acessar o quê. E então, o que vem a seguir para você? Talvez aprender como usar um contêiner MongoDB de forma segura?

Source:
https://adamtheautomator.com/mongodb-security/