[Segurança no Linux] - SUDO: aprecie com muita moderação!! - CooperaTI
[Segurança no Linux] – SUDO: aprecie com muita moderação!!
Vinicius Mozart 02/07/2012 5 comentários Dica, Linux, Segurança
E aí pessoal??!! Tudo show??!!
Outro dia um aluno me perguntou o seguinte: "o Linux é mais seguro do que o Windows?". Prontamente eu respondi:"depende muito de quem está no comando e das práticas adotadas!", e é verdade mesmo pessoal!! Muitos especialistas em segurança preferem utilizar sistemas operacionais Open Source, como FreeBSD, OpenBSD, Debian, CentOS ou até RHEL por conta da diversidade de ferramentas estáveis de Firewall, Proxy e IDS disponíveis. O simples fato de estas ferramentas existirem não credencia o servidor como intransponível ou infalível. Toda a infra deve ser verificada antes de pôr o servidor em produção, inclusive sua política de usuários e grupos, e é sobre isso que vamos falar neste primeiro instante.
Esta ferramenta existe para que usuários comuns possam ter permissão de executar alguns aplicativos que são permitidos apenas para o super usuário (no caso do Linux, o root). A configuração deste recurso fica a cargo do arquivo /etc/sudoers.
Na figura acima, eu destaco a linha %admin ALL=(ALL) ALL, que significa que todo e qualquer usuário do sistema incluído no grupo admin poderá executar qualquer comando de root fornecendo apenas sua própria senha. Legal, só tem um problema: na instalação do Ubuntu (apenas um exemplo), o usuário que é criado na instalação é inserido no grupo admin, o que quer dizer que ele pode sim executar toda e qualquer tarefa como root. A prova está no resultado do comando id <usuário>, como abaixo:
Como exemplo, vamos tentar executar o firewall iptables com o usuário bruno :
$sudo iptables -nvL
Uma senha foi solicitada, só que foi a senha do próprio usuário bruno. Conclusão: o usuário padrão que é criado na instalação do Ubuntu, por exemplo, conseguiria excluir, criar ou consultar qualquer regra no Firewall Iptables. Para um sistema operacional de um Desktop não seria um grande transtorno mas para um servidor seria inadmissível!!
Agora vamos considerar que exista a necessidade de um determinado grupo de usuários ter acesso a alguns comandos administrativos, como por exemplo analistas de segurança responsáveis pelo firewall, em um servidor Linux. O que seria feito?? Seria criado um novo usuário com UID 0 (mesmo ID do root)?? Daria permissão de SUID para cada comando administrativo??? Nem uma solução, nem outra!! Vou explicar o porquê:
Quando você cria um usuário com UID 0 você está replicando a conta do root!! Para o sistema, não interessa o login do usuário, mas sim o UID dele, e se ele tem UID 0 ele é o próprio root. Por outro lado, dar permissão SUID para cada comando administrativo iria dar um trabalhão desnecessário e ainda iria dar permissão a TODO E QUALQUER USUÁRIO de executar estes comandos.
A solução mais sensata seria o uso do SUDO. Sim, ele mesmo!! Só que configurado de forma correta agora.
Vamos criar um grupo chamado security para agregar estes usuários:
#groupadd security
Vamos criar 2 usuários neste grupo:
#useradd -m -d /home/analista1 -s /bin/bash -g security analista1
#useradd -m -d /home/analista2 -s /bin/bash -g security analista2
#passwd analista1
#passwd analista2
Agora, vamos configurar o SUDO para que os usuários do grupo security possam executar os seguintes comandos administrativos:/sbin/iptables, /sbin/route e /sbin/ifconfig.
%security ALL=NOPASSWD: /sbin/iptables,/sbin/route,/sbin/ifconfig
A opção NOPASSWD: indica que os usuários do grupo não precisarão fornecer as suas próprias senhas para executar os comandos.
Vamos testar agora:
analista1$sudo iptables -nvL
Perceba que outros comandos administrativos não podem ser executados:
analista1$sudo fdisk -l
analista1$sudo su root
Nota: o comando su, quando executado como root, permite ao usuário fazer login em qualquer outra conta sem pedir senha da mesma, portanto, deixar o comando su liberado no sudo de um servidor pode ser nocivo demais!! Não faça isso nunca pois desta forma o usuário com permissão no sudo pode fazer login como root sem que a sua senha seja solicitada.
Outra tática interessante seria, ao invés de liberar manualmente cada comando administrativo que o usuário vai executar, liberar tudo e excluir alguns comandos. Vamos lá?
%security ALL=NOPASSWD: ALL,!/sbin/fdisk,!/bin/su,!/sbin/mkfs
Neste caso, os usuários do grupo security poderão executar qualquer comando administrativo, com exceção de fdisk, su e mkfs.