Como Assumir o Controle da Segurança do Seu MongoDB

Hackers estão se tornando mais sofisticados e sabem como explorar vulnerabilidades. Se você tem dados sensíveis em seu banco de dados MongoDB, é crucial levar a segurança a sério. Mas como fazer isso? 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ê irá criar um usuário com privilégios administrativos e restringir os bancos de dados para esse usuário administrativo.

Esse setup permite que você forneça um único ponto de acesso ao usuário com privilégios administrativos, ao mesmo tempo em que restringe o que cada usuário pode fazer dentro do banco de dados. Por exemplo, os desenvolvedores devem ter apenas acesso de leitura às bases 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 shell do MongoDB como o usuário admin padrão.

Este usuário admin é poderoso, pois possui acesso total de leitura/escrita a todas as bases de dados no servidor, e é melhor evitar o uso desse 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 realizar as ações desejadas com as bases de dados. Essas ações incluem, mas não estão limitadas a, excluir, descartar, atualizar bases 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 todas as bases de dados no servidor, incluindo as bases 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 admin, uma vez que seu foco é criar um usuário administrativo dedicado. Este comando altera o contexto do banco de dados atual para usar o banco de dados admin, como mostrado abaixo.

O MongoDB utiliza o banco de dados admin para armazenar regras de controle de acesso e fornecer autenticação integrada, nomes de usuário e senha para os usuários e suas funções. Você não pode excluir ou renomear o banco de dados admin 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 uma senha de LDWbPf6Fy9Ezs3Mv, mas você pode usar credenciais diferentes, se preferir.

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

Após executar o comando e 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 indica ao shell do MongoDB para solicitar uma senha para o usuário AdminATA.
pwd: passwordPrompt(),
# Especificando as funções que você 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 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 a autenticação. Fazendo isso, você concede acesso ao banco de dados apenas a 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 configuração do seu cluster MongoDB.
  • Procure e remova o comentário da diretiva #security removendo o símbolo # na frente da diretiva, como mostrado abaixo. Essa diretiva informa ao MongoDB para procurar a configuração de segurança no arquivo de configuração.
  • Adicione uma nova linha abaixo da diretiva security que diz autorização: habilitada. Note que a linha autorização: habilitada é 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 ela está funcionando? Você vai fazer login no usuário administrativo para testar e garantir que a autenticação esteja funcionando, visualizando bancos de dados.

1. Execute os seguintes comandos para acessar o shell mongo como 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 ativaçã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 você ainda pode acessar o banco de dados.

show dbs

O comando deve mostrar todos os bancos de dados, incluindo o banco de dados admin. Mas, como você pode ver abaixo, nada é exibido. 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 você 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 cadeia de conexão que não contenha as credenciais corretas.

Autenticar 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 de credenciais. Essas credenciais incluem o nome de usuário e senha corretos.

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 recém-criado. 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 diz 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 aparece, já que você é um usuário administrativo.

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 colocar restrições sobre quem pode acessar bancos de dados no seu servidor.

Neste ponto, você decide quem pode acessar o quê. Então, qual é o próximo passo para você? Talvez aprender como usar um contêiner MongoDB de forma segura?

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