Como instalar e configurar o sudo no Debian Linux

A versão mínima do Debian Linux 12/11 não inclui o sudo por padrão. Quando se realiza uma instalação em rede do Debian, o método habitual é optar pela versão mínima, que instala apenas os pacotes essenciais. A maioria das imagens de container Linux baseadas no Debian também omite o sudo. Se o seu projeto precisar do sudo, continue a ler para saber como instalar e configurar o sudo, e conceder acesso a um utilizador numa versão Debian Linux 12/11.

Procedimento para instalar o sudo no Debian Linux

  1. Abra a aplicação de terminal.
  2. Obtenha acesso root com o comando su -.
  3. Atualize o repositório do Debian e instale as atualizações pendentes com o comando: apt update && apt upgrade.
  4. Instale o sudo usando apt ou apt-get. Digite: apt install sudo.

O comando su permite alternar para uma conta de utilizador diferente. Quando executa su a partir de uma conta comum, será solicitado a introduzir a palavra-passe da conta para a qual deseja mudar. O comando su - tenta mudar para a conta root, e deve conhecer a palavra-passe da conta root para conseguir fazê-lo.

O utilizador root

O Linux, assim como o Unix, tem um utilizador root com poderes totais sobre o sistema. Este utilizador é conhecido como superutilizador. A conta root tem a capacidade de sobrepor privilégios normais no sistema de ficheiros e é usada para gerir e administrar o sistema. Por exemplo, os utilizadores precisam de elevar os seus privilégios para root para realizar tarefas como instalar ou remover software, adicionar ou excluir utilizadores, formatar discos, adicionar ou remover impressoras, e gerir ficheiros do sistema.

Com grandes poderes vêm grandes responsabilidades

Este privilégio ilimitado vem com responsabilidades significativas. O utilizador root pode causar danos extensos ao sistema. Se a conta root for comprometida, outra pessoa terá controlo administrativo do sistema. Portanto, a melhor prática no Debian Linux é que a maioria dos administradores faça login como utilizadores sem privilégios e utilize ferramentas específicas para obter privilégios root temporariamente. Existem vários comandos para mudar de um utilizador sem privilégios para privilégios root, como:

Bash
su -

sudo -s

doas command1

runuser -u nginx -g nginx -- /bin/bash

pkexec --user foo -- /path/to/command1 --arg1

Por que usar sudo em vez de su?

O comando su requer a palavra-passe do utilizador de destino. Se estiver a mudar para a conta root, precisa da palavra-passe da conta root. Por motivos de segurança, não é aconselhável partilhar a palavra-passe root com todos os utilizadores. Em muitos casos, a conta root pode não ter uma palavra-passe válida por questões de segurança. Desta forma, os utilizadores não podem fazer login diretamente como root com uma palavra-passe, e su não oferece um shell de login interativo. Ao contrário de su, o sudo geralmente requer que os utilizadores introduzam a sua própria palavra-passe para autenticação, em vez da palavra-passe da conta de destino. Em outras palavras, quem usa sudo para executar comandos como root não precisa conhecer a palavra-passe da conta root, utilizando a sua própria palavra-passe para autenticação. O sudo também mantém um registo de todos os comandos executados.

Configuração do sudo no Debian Linux

O ficheiro de configuração principal do sudo é o /etc/sudoers, e pode adicionar a sua configuração no diretório /etc/sudoers.d/. Note que o sudo irá ler e processar todos os ficheiros no diretório /etc/sudoers.d/ que não terminem com ‘~’ ou contenham um ponto ‘.’.

/etc/sudoers

O ficheiro principal de configuração para o sudo é o /etc/sudoers.

Editar o ficheiro /etc/sudoers

A forma mais segura de editar o ficheiro /etc/sudoers é utilizar o comando visudo. Por padrão, o visudo verifica a sintaxe do ficheiro antes de o guardar, evitando que administradores ou desenvolvedores fiquem bloqueados do sistema devido a erros de sintaxe. Nunca edite o ficheiro /etc/sudoers diretamente com um editor de texto comum. Utilize sempre o comando visudo para evitar erros que possam impedir o uso do sudo, potencialmente deixando-o sem meios de obter privilégios administrativos. A sintaxe é:

Bash
visudo

Pode definir as variáveis EDITOR e VISUAL (ou SUDO_EDITOR) para alterar o editor de texto padrão. Por exemplo, para usar o editor de texto nano, defina a variável SUDO_EDITOR com o comando export:

Bash
export SUDO_EDITOR=nano
visudo

Agora pode editar o ficheiro conforme necessário. Para salvar e sair do nano, pressione CTRL+X, depois Y. Pode definir SUDO_EDITOR no ficheiro ~/.bashrc ao usar o bash:

Bash
echo 'export SUDO_EDITOR=nano' >> ~/.bashrc
Concedendo direitos administrativos completos a utilizadores no Debian

Por padrão, o comando sudo no Debian permite que os membros do grupo sudo executem qualquer comando. Assim, todos os membros do grupo sudo podem gerir completamente o sistema sem restrições. Normalmente, adicionamos pelo menos um utilizador (administrador do sistema) a este grupo. A linha seguinte no ficheiro /etc/sudoers permite esta configuração:

Bash
%sudo   ALL=(ALL:ALL) ALL

Nesta linha de configuração, %sudo refere-se ao grupo ao qual a regra se aplica. A designação % indica que se trata de um grupo, neste caso, o grupo sudo. O ALL=(ALL) ou ALL=(ALL:ALL) especifica que em qualquer host com este ficheiro, o sudo pode executar qualquer comando. O ALL final especifica que o sudo pode executar esses comandos como qualquer utilizador no sistema. Verifique se o grupo sudo existe no /etc/group usando o comando grep:

Bash
grep '^sudo' /etc/group

Resultado:

Bash
sudo:x:27:

Para adicionar o utilizador chamado ‘joao’ ao grupo sudo:

Bash
adduser joao sudo

Para verificar a nova associação ao grupo, use os comandos id ou groups:

Bash
id joao
groups joao
grep '^sudo' /etc/group

Atualize a associação ao grupo sem reiniciar ou sair da sessão do terminal com:

Bash
newgrp sudo
groups
Testando o comando sudo

Para obter um shell root, digite:

Bash
sudo -s
## OU ##
sudo -i

Se houver erros de configuração, será apresentado:

Bash
[sudo] password for joao: 
joao não está no ficheiro sudoers. Este incidente foi reportado ao administrador.

Para corrigir isso, verifique a configuração descrita anteriormente.

Como conceder acesso ao grupo ‘prod’

Crie um novo ficheiro chamado /etc/sudoers.d/1000-prod-users:

visudo /etc/sudoers.d/1000-prod-users

Adicione a configuração seguinte para executar comandos sem pedir a palavra-passe:

Bash
# Regras de utilizador para 'prod'
prod ALL=(ALL) NOPASSWD:ALL

A entrada prod ALL=(ALL) NOPASSWD:ALL concede permissões amplas a qualquer utilizador que seja membro do grupo ‘prod’. É aconselhável não conceder acesso total. Em vez disso, forneça aos utilizadores/grupo acesso limitado aos comandos que desejam executar sem precisar de palavra-passe. Por exemplo, permitir que o utilizador ‘maria’ (uma conta de desenvolvedor) reinicie o serviço Apache e PHP-fpm sem pedir a palavra-passe:

Bash
maria ALL = NOPASSWD: /bin/systemctl restart apache2.service
OU

maria ALL = NOPASSWD: /bin/systemctl restart apache2.service, /bin/systemctl restart php8-fpm.service

Pode remover o NOPASSWD para que o utilizador ‘maria’ tenha de fornecer a palavra-passe sempre que executar o comando. Por exemplo:

Bash
maria ALL = (root) /bin/systemctl restart apache2.service, /bin/systemctl restart php8-fpm.service

Onde:

  • maria: Especifica o nome do utilizador a quem a permissão é concedida.
  • ALL = (root):
  • ALL no lado esquerdo significa que o utilizador maria pode usar esta permissão a partir de qualquer terminal ou local.
  • (root) no lado direito significa que maria pode executar o comando apenas como utilizador root.
  • /bin/systemctl restart apache2.service: Este é o comando exato que o utilizador maria pode executar. Note o caminho completo para systemctl por razões de segurança, e vários comandos são separados por vírgulas.
  • /bin/systemctl restart php8-fpm.service: O mesmo que acima.

Agora maria pode executar o comando da seguinte forma:

Bash
sudo

 /bin/systemctl restart php8-fpm.service

Se maria tentar executar algo fora do permitido, como:

Bash
sudo /bin/vim /etc/shadow

Receberá um erro:

Bash
Desculpe, o utilizador maria não tem permissão para executar '/bin/vim /etc/shadow' como root em box1.

Visualização do registo de comandos do sudo

Use o comando journalctl da seguinte forma:

Bash
sudo journalctl -g sudo

Note que um “_EXE=” para o caminho binário canónico é adicionado à consulta. Se um caminho de ficheiro se referir a um script executável, um “_COMM=” para o nome do script é adicionado à consulta. Também pode usar a seguinte sintaxe:

Bash
sudo journalctl _COMM=sudo
sudo journalctl _EXE=/usr/bin/sudo

A seguinte sintaxe monitora continuamente o jornal para novas entradas do sudo em tempo real:

Bash
sudo journalctl -g sudo -f

Pode filtrar os registos do sudo para um intervalo de tempo específico. Por exemplo, de 13 de Maio a 09 de junho de 2024:

Bash
sudo journalctl -g sudo --since "2024-05-13" --until "2024-06-09"

Pode visualizar o ficheiro auth.log usando os comandos “bat,” “cat,” “less,” ou “more” da seguinte forma:

Bash
sudo cat /var/log/auth.log
sudo tail -f /var/log/auth.log
sudo grep 'command not allowed' /var/log/auth.log

Resultado:

Bash
debian sudo: maria : comando não permitido ; TTY=pts/1 ; PWD=/home/maria ; USER=root ; COMMAND=/bin/vim /etc/shadow

Resumo

Para conceder acesso total de sudo ao utilizador raj, pode criar o ficheiro /etc/sudoers.d/raj com o seguinte conteúdo:

Bash
raj ALL=(ALL) ALL

Para habilitar e conceder acesso total de sudo ao grupo engrel, pode criar o ficheiro /etc/sudoers.d/engrel com o seguinte conteúdo:

Bash
%engrel ALL=(ALL) ALL

Também é possível configurar o sudo para permitir que um utilizador execute comandos como outro utilizador sem precisar introduzir a sua palavra-passe (deve configurar cuidadosamente a conta de backup devido aos riscos de segurança evidentes ao conceder este nível de acesso a um utilizador ou grupo):

Bash
backup ALL=(ALL) NOPASSWD:ALL

Pode visualizar o registo de comandos do sudo usando o ficheiro auth.log ou o journalctl:

Bash
cat /var/log/auth.log
journalctl -g sudo

Agora sabe como instalar e configurar o sudo num sistema Debian Linux. O comando sudo oferece muitas outras opções e sintaxes de configuração.

Artigos Relacionados