Mateus Müller - 4Fasters

Mateus é o idealizador do projeto 4Fasters.

06 Nov 2019

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:

SUDO: Guia COMPLETO do comando SUDO no LINUX

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:

  1. 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.
  2. Defaults always_set_home -> Sempre vai definir a variável ambiente $HOME para o diretório do usuário alvo (geralmente o root).
  3. 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
  1. O mateus pode executar comando de qualquer Terminal.
  2. Como qualquer grupo e usuário.
  3. Não precisa digitar a senha quando usar o sudo (NOPASSWD).
  4. 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).

SUDO: Guia COMPLETO do comando SUDO no LINUX

Agora, vamos testar usando o comando fdisk que está no grupo STORAGE:

SUDO: Guia COMPLETO do comando SUDO no LINUX

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!
comments powered by Disqus