MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como configurar o AppArmor para conjuntos de réplicas do MongoDB?

Existem muitas seções e camadas de segurança se estivermos falando sobre o fortalecimento de bancos de dados. Ele começa a partir da criptografia do disco de armazenamento subjacente, privilégios de acesso ao banco de dados, autenticação, controle de acesso à rede, dados em transmissão usando SSL/TLS e também fortalecendo o próprio sistema operacional.

O hardening dos sistemas operacionais também pode ter muitas listas de verificação, como desabilitar ou remover serviços de servidor que não serão usados ​​e utilizados, desabilitar o login root SSH, habilitar rsyslog, restringir o acesso usando conta root de o console, habilitando a auditoria do sistema e habilitando o SELinux.


Outra parte das listas de verificação de segurança é o serviço AppArmor. Apparmor é um sistema de controle de acesso obrigatório (MAC) para fins de segurança que, por padrão, está incluído em sistemas operacionais baseados em Ubuntu e Debian, também é semelhante ao SELinux em sistemas operacionais baseados em Redhat ou CentOS. O objetivo do AppArmor é bloquear o processo vulnerável no sistema operacional e restringir os danos das vulnerabilidades de segurança.

Por exemplo, se o banco de dados MongoDB for publicado acidentalmente na Internet e houver algum  malware que infectou o servidor de banco de dados e acionou algum código malicioso que o MongoDB pretende executar, o AppArmor impedirá tal execução como o perfil do MongoDB já está configurado para ler, executar e gravar apenas em arquivos específicos do MongoDB.

 Neste blog, discutiremos a implementação do AppArmor para conjuntos de réplicas do MongoDB.

Implantação de banco de dados

Se você estiver implantando conjuntos de réplicas do MongoDB, o ClusterControl pode facilitar sua vida. Só precisamos passar por duas páginas de implantação e o ClusterControl estará pronto para implantar o conjunto de réplicas do MongoDB. Existem opções para desabilitar o SELinux/AppArmor durante a implantação, como você pode ver abaixo:

Podemos desabilitar a opção para AppArmor/SELinux. E, em seguida, preencha o endereço IP dos nós do banco de dados, a senha do administrador e a versão do MongoDB que queremos implantar.

Depois que o conjunto de réplicas do MongoDB for implantado, podemos pular para cada servidor de nó para configuração do AppArmor.

Configurações do AppArmor

Todo processo é restrito por perfis no AppArmor. Existem duas opções onde o perfil pode ser executado, que é o modo de imposição e o modo de reclamação. Quando o modo de imposição está em uso, ele impede que o aplicativo execute ações restritas, enquanto para o modo de reclamação, ele permite que o aplicativo execute ações restritas e crie a entrada de log. Cada perfil é armazenado no diretório /etc/apparmor.d

Podemos verificar o status do serviço AppArmor executando o seguinte comando:

[email protected]:/etc/apparmor.d# apparmor_status
apparmor module is loaded.
15 profiles are loaded.
15 profiles are in enforce mode.
   /sbin/dhclient
   /usr/bin/lxc-start
   /usr/bin/man
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/lib/NetworkManager/nm-dhcp-helper
   /usr/lib/connman/scripts/dhclient-script
   /usr/lib/snapd/snap-confine
   /usr/lib/snapd/snap-confine//mount-namespace-capture-helper
   /usr/sbin/tcpdump
   lxc-container-default
   lxc-container-default-cgns
   lxc-container-default-with-mounting
   lxc-container-default-with-nesting
   man_filter
   man_groff
0 profiles are in complain mode.
0 processes have profiles defined.
0 processes are in enforce mode.
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.

Dá a você informações sobre a lista de perfis que estão carregados, quantos perfis e processos estão no modo de reclamação e no modo de imposição. Podemos usar o comando apparmor_parser para carregar o perfil no kernel:

[email protected]: cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a

E para desabilitar o perfil, basta criar um link simbólico para o diretório /etc/apparmor.d/disable.

[email protected]: ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable

Para reativar o perfil, basta remover o link simbólico e recarregar novamente o perfil.

[email protected]:  rm /etc/apparmor.d/disable/profile.name cat /etc/apparmor.d/profile.name | apparmor_parser -a

Habilitando AppArmor para conjuntos de réplicas do MongoDB

Antes de usarmos o AppArmor em nossos conjuntos de réplicas do MongoDB, precisamos definir o perfil para o MongoDB, registrar o serviço binário do mongodb, os diretórios de dados e os arquivos de log e permitir algum acesso à rede e ao sistema operacional. Também podemos definir a permissão para cada diretório, binário e os arquivos. Abaixo está um exemplo de perfil do serviço MongoDB:

#include <tunables/global>

/usr/sbin/mongod {
  #include <abstractions/base>
  #include <abstractions/nameservice>
  #include <abstractions/user-tmp>
  #include <abstractions/winbind>

# Allow system resource access
  /sys/devices/system/cpu/ r,
  /sys/devices/system/node/ r,
  /sys/devices/system/node/** r,
  /proc/*/status r,
  capability sys_resource,
  capability dac_override,
  capability setuid,
  capability setgid,
  capability sys_nice,

# Allow network access
  network tcp,
  /etc/hosts.allow r,
  /etc/hosts.deny r,

# Allow config access
  /etc/mongod.conf r,

# Allow pid, socket, socket lock file access
  /var/run/mongod.pid rw,

# Allow systemd notify messages
  /{,var/}run/systemd/notify w,


# Allow execution of server binary
  /usr/sbin/mongo mr,
  /usr/sbin/mongod mr,
  /usr/sbin/mongos mr,
  /usr/sbin/mongotop mr,
  /usr/sbin/mongorestore mr,
  /usr/sbin/mongoimport mr,
  /usr/sbin/mongofiles mr,
  /usr/sbin/mongodump mr,

# Allow data files dir access
  /var/lib/mongodb/ r,
  /var/lib/mongodb/** rwk,

# Allow log file access
  /var/log/mongodb/ r,
  /var/log/mongodb/** rw,

# Allow access to openssl config
  /etc/mongo-cluster.key r,

  # Site-specific additions and overrides. See local/README for details.
}

Podemos colocar o perfil MongoDB acima no arquivo /etc/apparmor.d/usr.bin.mongod e então executar o apparmor_parser para carregar o perfil.

[email protected]: cat /etc/apparmor.d/usr.bin.mongod | sudo apparmor_parser -a

Se verificarmos usando o apparmor_status, ele fornecerá informações sobre o perfil do MongoDB que foi carregado:


[email protected]:/etc/apparmor.d# apparmor_status
apparmor module is loaded.

57 profiles are loaded.
19 profiles are in enforce mode.
   /sbin/dhclient
   /usr/bin/lxc-start
   /usr/bin/man
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/lib/NetworkManager/nm-dhcp-helper
   /usr/lib/chromium-browser/chromium-browser//browser_java
   /usr/lib/chromium-browser/chromium-browser//browser_openjdk
   /usr/lib/chromium-browser/chromium-browser//sanitized_helper
   /usr/lib/connman/scripts/dhclient-script
   /usr/lib/snapd/snap-confine
   /usr/lib/snapd/snap-confine//mount-namespace-capture-helper
   /usr/sbin/mongod
   /usr/sbin/tcpdump
   lxc-container-default
   lxc-container-default-cgns
   lxc-container-default-with-mounting
   lxc-container-default-with-nesting
   man_filter
   man_groff
38 profiles are in complain mode.
   /usr/bin/mongod
   /usr/lib/chromium-browser/chromium-browser
   /usr/lib/chromium-browser/chromium-browser//chromium_browser_sandbox
   /usr/lib/chromium-browser/chromium-browser//lsb_release
   /usr/lib/chromium-browser/chromium-browser//xdgsettings


Agora podemos repetir as etapas descritas acima em cada nó do nosso conjunto de réplicas do MongoDB para tornar o processo do MongoDB restrito e protegido pelo AppArmor.