SUDO: Guia COMPLETO do comando SUDO no LINUX
Já fazia um tempo que não escrevia um post mais completão aqui pro blog, não é mesmo? Anteriormente, ainda esse ano, fiz um post falando sobre o básico do sudo. Veja:
Entretanto, gostaria de me aprofundar um pouco mais no arquivo de configuração, e por isso decidi fazer este post. Bora lá?
O que é “sudo su”?
A primeira coisa que temos que entender é o “sudo”. O sudo é um utilitário de linha de comando para permitir usuários normais a executarem outros utilitários com permissões mais elevadas, de acordo com as suas regras. Ou seja, o sudo controla os acessos dos usuários normais ao super-usuário do sistema, também conhecido como root.
O su é apenas um comando para trocar de usuário. O “s” significa “swich” e o “u” significa “user”, isto é, “switch user” (trocar de usuário). O objetivo de colocar o “sudo” como antecedente, é porque o “su” já vai ser executado como super-usuário, trocando o usuário da sessão atual para o “root”.
- $ sudo su # Muda para o usuário root
- $ su mateus # Muda para o usuário mateus
- $ su maria # Muda para o usuário maria
Perceba que apenas para o root é diferente, pois o “sudo” já eleva a permissão.
Como funciona o sudo?
A ideia do sudo é justamente ser o antecedente de cada comando para elevar a sua permissão. Veja a diferença com sudo e sem sudo:
Como configurar o sudo?
Toda a configuração do utilitário sudo é feita no arquivo /etc/sudoers. Você pode ver o que está configurado com o comando:
$ cat /etc/sudoers
Para facilitar a visão, use essa linha de comando para remover comentários e linhas em branco:
$ egrep -v "^#|^$" /etc/sudoers
Essa é a saída do meu arquivo de configuração no CentOS 7:
Defaults !visiblepw
Defaults always_set_home
Defaults match_group_by_gid
Defaults always_query_group_plugin
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
São duas partes que você precisa prestar atenção, os Defaults e a configuração dos grupos e usuários posteriormente.
Defaults
Os Defaults definem alguns parâmetros de configuração global.
Todas as opções podem ser encontradas no manual do arquivo sudoers na seção “SUDOERS OPTIONS”.
$ man sudoers
Vamos ver algumas opções:
- Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin -> Essa opção reescreve a variável $PATH para buscar binários com o sudo. É importante para a segurança, pois um programa malicioso, na maioria das vezes, não vai estar dentro destes diretórios.
- Defaults always_set_home -> Sempre vai definir a variável ambiente $HOME para o diretório do usuário alvo (geralmente o root).
- Defaults env_keep -> As opções env_keep vão manter essas variáveis, mesmo utilizando a opção env_reset. O env_reset vai apagar todas as variáveis ambiente e deixar somente algumas homologadas.
Perceba que todas as configuração são globais e geralmente tem o foco em manter a segurança do sistema.
Restrição de grupos e usuários
- root ALL=(ALL:ALL) ALL -> Essa linha define que o usuário root pode executar qualquer comando no sistema.
O primeiro ALL permite sudo de qualquer Terminal (iterativo e não-iterativo).
O ALL:ALL permite que o comando seja rodado como qualquer usuário:grupo.
O último ALL permite qualquer comando do sistema.
- %wheel ALL=(ALL) ALL -> Essa linha faz exatamente a mesma coisa, para todos os usuários do grupo wheel. O símbolo de “%” se aplica a grupos.
Grupos de comandos
Você pode criar grupos de comandos para restringir determinados usuários e grupos, por exemplo:
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
Neste caso, o grupo chamado STORAGE foi criado com apenas alguns comandos.
Configurando um usuário no sudo
Aplicando o que vimos anteriormente, criei a seguinte linha no arquivo do sudoers:
mateus ALL=(ALL:ALL) NOPASSWD: STORAGE
- O mateus pode executar comando de qualquer Terminal.
- Como qualquer grupo e usuário.
- Não precisa digitar a senha quando usar o sudo (NOPASSWD).
- Só pode executar os comandos do grupo STORAGE.
Vamos testar? Veja a saída usando o comando cat (que não está no grupo STORAGE).
Agora, vamos testar usando o comando fdisk que está no grupo STORAGE:
Agora funcionou normalmente e não precisamos digitar nenhuma senha!
Basicamente, você vai criar os grupos de usuários (ou usuários mesmo) e definir os comandos que cada um pode executar como usuário root. Desta forma, ninguém consegue virar o root de fato, mas consegue executar alguns comandos para algumas funções específicas.
IMPORTANTE! Qualquer configuração errada nesse arquivo, até mesmo uma digitação errada, pode comprometer a autenticação do sistema e você terá que recuperar ele pelo grub ou pela imagem do sistema. Cautela!
Conclusão
O sudo é um utilitário que facilita o gerenciamento de autorizações para determinados usuários, evitando também que eles possam comprometer o sistema, tenho acesso ao usuário root como um todo.
Espero de coração que você tenha gostado deste artigo e tenha entendido um pouco como isso funciona.
Me siga no Instagram onde eu faço conteúdos da minha rotina diária.
Participe dos nossos grupos no Telegram e Facebook! 🙂
Se tiver alguma dúvida ou sugestão de conteúdo, por favor, comente!