Procedimento para permitir que usuários "não raiz" parem/iniciem/reiniciem o processo "mongod"
Avalie esse Tutorial
A segurança dos sistemas executa um papel fundamental nos aplicativos modernos de hoje. É muito importante restringir o acesso de usuários não autorizados aos recursos raiz. Com esta publicação no blog, pretendemos documentar como evitar o comprometimento dos recursos do sistema raiz, mas permitir que usuários autorizados e não raiz executem operações administrativas em processos
mongod
, como iniciar ou interromper o daemon.A metodologia é facilmente extensível a outras operações administrativas, como impedir que usuários não autorizados modifiquem os registros de auditoria
mongod
.Use este procedimento para sistemas baseados em Linux para permitir que usuários com permissões restritas parem/iniciem/reiniciem processos do
mongod
. Esses usuários são configurados em um grupo Linux não raiz. Além disso, o grupo Linux desses usuários é diferente do grupo de usuários Linux no qual o processomongod
é executado.AVISO: O procedimento requer acesso root para a configuração. Configurações incorretas podem fazer com que o sistema não responda, portanto, sempre teste em um ambiente de desenvolvimento antes de implementar em produção. Certifique-se de ter um backup atual dos seus dados.
É recomendável realizar este procedimento ao configurar um novo sistema. Se não for possível, execute o procedimento durante a janela de manutenção.
As configurações afetarão apenas um sistema local, portanto, no caso de um conjunto de réplicas ou de um cluster fragmentado, execute o procedimento de forma contínua e nunca altere todos os nós de uma vez.
- CentOS 6|7
- RHEL 6|7
- Ubuntu 18.04
- Amazon Linux 2
Isenção de responsabilidade: para outras distribuições Linux, o procedimento deve funcionar de maneira semelhante. No entanto, apenas as versões acima foram testadas enquanto este artigo era escrito.
- Adicione o usuário com permissões limitadas (substitua testuser pelo seu usuário):
1 $ adduser testuser 2 $ groupadd testgroup
- Edite as
/etc/mongod.conf
permissões do arquivo de configuração MongoDB :
1 $ sudo chown mongod:mongod /etc/mongod.conf 2 $ sudo chmod 600 /etc/mongod.conf 3 $ ls -l /etc/mongod.conf 4 -rw-------. 1 mongod mongod 330 Feb 27 18:43 /etc/mongod.conf
Com esta configuração, apenas o usuário mongod (e root) terá permissões para acessar e editar o arquivo
mongod.conf
. Nenhum outro usuário poderá ler/escrever e ter acesso ao seu conteúdo.Este procedimento funciona para CentOS 7 e RHEL 7.
1 %mongod ALL =(ALL) NOPASSWD: /bin/systemctl start mongod.service, /bin/systemctl stop mongod.service, /bin/systemctl restart mongod.service 2 %testuser ALL =(ALL) NOPASSWD: /bin/systemctl start mongod.service, /bin/systemctl stop mongod.service, /bin/systemctl restart mongod.service
Observação: a conta de usuário raiz pode se tornar não funcional se um erro de sintaxe for introduzido no arquivo sudoers.
Este procedimento funciona para CentOS 6, RHEL 6, Amazon Linux 2 e Ubuntu 18.04.
- O script init.d-mongod do MongoDB está disponível em nosso repositório aqui, caso o download manual seja necessário (certifique-se de salvá-lo no diretório /etc/init.d/ com permissões definidas como 755).
Para CentOS 6, RHEL 6 e Amazon Linux 2:
1 %mongod ALL =(ALL) NOPASSWD: /sbin/service mongod start, /sbin/service mongod stop, /sbin/service mongod restart 2 %testuser ALL =(ALL) NOPASSWD: /sbin/service mongod start, /sbin/service mongod stop, /sbin/service mongod restart
For Ubuntu 18.04:
1 %mongod ALL =(ALL) NOPASSWD: /usr/sbin/service mongod start, /usr/sbin/service mongod stop, /usr/sbin/service mongod restart 2 %testuser ALL =(ALL) NOPASSWD: /usr/sbin/service mongod start, /usr/sbin/service mongod stop, /usr/sbin/service mongod restart
Nota: A raiz pode se tornar não funcional se um erro de sintaxe for introduzido no arquivo sudoers.
Portanto, com essas configurações, o testuser não tem permissões para ler /etc/mongod.conf, mas pode iniciar e parar o serviço mongod:
1 [testuser@localhost ~]$ sudo /bin/systemctl start mongod.service 2 [testuser@localhost ~]$ sudo /bin/systemctl stop mongod.service 3 [testuser@localhost ~]$ vi /etc/mongod.conf 4 "/etc/mongod.conf" [Permission Denied] 5 [testuser@localhost ~]$ sudo vi /etc/mongod.conf 6 "/etc/mongod.conf" [Permission Denied]
Nota: A autorização é fornecida ao usar o comando
/bin/systemctl
. Com este procedimento, osudo systemctl start mongod
solicitará a senha sudo para o testuser.Use o serviço sudo mongod [start|stop|restart]:
1 [testuser@localhost ~]$ sudo service mongod start 2 Starting mongod: [ OK ] 3 [testuser@localhost ~]$ sudo service mongod stop 4 Stopping mongod: [ OK ] 5 [testuser@localhost ~]$ vi /etc/mongod.conf 6 "/etc/mongod.conf" [Permission Denied] 7 [testuser@localhost ~]$ sudo vi /etc/mongod.conf 8 [sudo] password for testuser: 9 Sorry, user testuser is not allowed to execute '/bin/vi /etc/mongod.conf' as root on localhost.
Observação: além disso, teste a reinicialização de outros serviços com o testuser com (e sem) as permissões necessárias.
É um dos requisitos críticos de segurança, não conceder privilégios de root completos a usuários não autorizados. Com esse requisito em mente, é importante que os administradores do sistema saibam que é possível conceder acesso a ações como reiniciar/parar/iniciar um processo
mongod
(ou qualquer outro processo) sem conceder privilégios de root, usando recursos de sistemas Linux .Se tiver dúvidas, acesse o site da nossa comunidade de desenvolvedores, no qual os engenheiros e a comunidade do MongoDB ajudarão você a desenvolver sua próxima grande ideia com o MongoDB.