31.01.2025

Direitos de superusuário do Debian (sudo, visudo)

Informações gerais

Os sistemas operacionais Linux implementam o princípio de diferenciação de privilégios de usuário, o que significa que diferentes contas têm diferentes quantidades de direitos de acesso a diretórios, arquivos e programas. Os direitos máximos são concedidos à conta raiz incorporada. As contas de usuário recém-criadas geralmente sofrem restrições significativas no acesso a arquivos de configuração do sistema, no gerenciamento de serviços e na instalação e exclusão de pacotes de software. Entretanto, não é recomendável trabalhar no sistema operacional com a conta raiz, principalmente por motivos de segurança. Nesse caso, o utilitário de linha de comando sudo vem em socorro.

O comando sudo permite executar comandos individuais com privilégios maiores (por padrão, com direitos de root) usando uma conta sem privilégios. Vamos ver o que é necessário para que esse utilitário funcione.

Instalação e configuração

No sistema operacional Ubuntu, o sudo está ativado por padrão e, no Debian, se o pacote correspondente não tiver sido selecionado durante o processo de instalação, a imagem a seguir provavelmente estará:

sudo
#Output
-bash: sudo: command not found

Portanto, você precisa instalar o pacote que está faltando. Atualize as informações do repositório e instale o sudo:

apt-get update
apt-get install sudo

Estamos aguardando o fim do processo:

Após uma instalação bem-sucedida, será necessário configurar o sudo para determinar quais usuários ou grupos poderão usar o escalonamento de privilégios e até que ponto. Todas essas configurações são armazenadas no arquivo de configuração /etc/sudoers; no entanto, é altamente desaconselhável fazer alterações diretamente nele. Para esses fins, é usado um comando especial:

visudo

que inicia um editor de texto com um arquivo de configuração:

Duas linhas são responsáveis pela concessão de direitos:

root    ALL=(ALL:ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

A primeira linha define os direitos para a conta root, a segunda define os direitos para os membros do grupo sudo que foi criado quando o pacote foi instalado (o sinal % na frente do nome significa que o nome pertence a um grupo de usuários).

Dessa forma, temos duas maneiras principais de conceder à conta de usuário o direito de usar o sudo:

Adicionar uma conta de usuário (por exemplo, usuário) ao grupo sudo no servidor:

usermod –a –G sudo user

Depois de alterar a associação do grupo, você precisará fazer login novamente nessa conta para aplicar a nova configuração. Esse método é recomendado nos casos em que o usuário precisa ter direitos totais.

Crie uma nova entrada no arquivo, por exemplo, para a conta de usuário. Adicionamos uma linha semelhante a root:

user ALL=(ALL:ALL) ALL

A adição de uma nova entrada é recomendada nos casos em que a lista de privilégios será ajustada (mais sobre isso adiante). Se tivermos feito alterações no arquivo, precisaremos salvá-las pressionando o atalho de teclado Ctrl-O e sair do editor - Ctrl-X.

Agora você pode verificar a operação correta:

sudo cat /etc/sudoers

O comando sudo solicita a senha do usuário atual (neste caso, usuário) - digite-a e, se tudo for feito corretamente, veremos o conteúdo do arquivo de configuração do sistema.

Ajuste fino

Assim, um usuário comum pode executar comandos com os direitos da conta root sem saber a senha dela. Isso é muito conveniente, mas pode ser inseguro - é possível limitar o intervalo de comandos que podem ser executados usando o sudo? Sim, e o mesmo arquivo de configuração nos ajudará com isso. Iniciamos o visudo novamente e entendemos melhor. Estamos interessados nos parâmetros especificados após o nome de usuário:

Vamos analisá-los em mais detalhes:

Com base no exposto acima, se necessário, determine a lista de comandos permitidos, substitua o último parâmetro ALL pelo que precisamos, listando os comandos separados por vírgulas. Por exemplo, a linha:

user    ALL=(ALL:ALL) /sbin/shutdown -r, /bin/cat

dá ao usuário o direito de usar o sudo para reiniciar o servidor com sudo /sbin/shutdown -r e visualizar arquivos usando sudo /bin/cat. Outros comandos por meio do sudo não serão executados. Por exemplo, ao tentar desligar um servidor com um comando:

sudo /sbin/shutdown -h

Obtenha a resposta:

Sorry, user user is not allowed to execute '/sbin/shutdown -h' as root on debian10.

Útil

Você pode ver a lista de privilégios executando sudo -l (a lista do usuário atual será exibida) ou sudo -l -U user (a lista de privilégios do usuário será exibida):

A composição do sudo inclui o comando sudoedit, que inicia um editor de texto com o arquivo especificado imediatamente com privilégios elevados, ou seja, em vez do comando:

sudo nano /etc/network/interfaces

Pode ser executado:

sudoedit /etc/network/interfaces

Se precisar trabalhar no modo de privilégio elevado por um longo período e for inconveniente digitar sudo para cada comando, você poderá executar uma instância do interpretador de comandos por meio do sudo:

sudo bash

Se você continuar a trabalhar nele, todos os comandos serão executados com direitos elevados. Quando terminar, saia do interpretador com o comando:

exit