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
- Abra a aplicação de terminal.
- Obtenha acesso root com o comando
su -
. - Atualize o repositório do Debian e instale as atualizações pendentes com o comando:
apt update && apt upgrade
. - Instale o sudo usando
apt
ouapt-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:
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 é:
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
:
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:
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:
%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
:
grep '^sudo' /etc/group
Resultado:
sudo:x:27:
Para adicionar o utilizador chamado ‘joao’ ao grupo sudo
:
adduser joao sudo
Para verificar a nova associação ao grupo, use os comandos id
ou groups
:
id joao
groups joao
grep '^sudo' /etc/group
Atualize a associação ao grupo sem reiniciar ou sair da sessão do terminal com:
newgrp sudo
groups
Testando o comando sudo
Para obter um shell root, digite:
sudo -s
## OU ##
sudo -i
Se houver erros de configuração, será apresentado:
[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:
# 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:
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:
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 utilizadormaria
pode usar esta permissão a partir de qualquer terminal ou local.(root)
no lado direito significa quemaria
pode executar o comando apenas como utilizador root./bin/systemctl restart apache2.service
: Este é o comando exato que o utilizadormaria
pode executar. Note o caminho completo parasystemctl
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:
sudo
/bin/systemctl restart php8-fpm.service
Se maria
tentar executar algo fora do permitido, como:
sudo /bin/vim /etc/shadow
Receberá um erro:
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:
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:
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:
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:
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:
sudo cat /var/log/auth.log
sudo tail -f /var/log/auth.log
sudo grep 'command not allowed' /var/log/auth.log
Resultado:
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:
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:
%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):
backup ALL=(ALL) NOPASSWD:ALL
Pode visualizar o registo de comandos do sudo usando o ficheiro auth.log
ou o journalctl
:
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.