Introdução
Você já se perguntou por que deve digitar “sudo” ao tentar executar certos comandos em um ambiente de sistema operacional Linux ou Unix? Sudo é na verdade uma abreviação para “super-user do”. Quando você usa o comando sudo, pode executar programas e comandos com os privilégios de segurança de outro usuário.
Por padrão, o comando sudo permite que os usuários do sistema executem comandos com os privilégios do superusuário. Uma nova instalação de um SO Linux/Unix cria uma conta root que possui privilégios de superusuário. Ao fazer a configuração inicial do servidor de um sistema Linux/Unix, os administradores do sistema fazem login com a conta root e alocam direitos de sistema para outros usuários do sistema. Essas configurações são armazenadas em um arquivo chamado sudoers. Uma conta com privilégios de root pode editar o arquivo sudoers e alterar os privilégios de outros usuários.
Neste tutorial, discutiremos como você pode obter privilégios de root e fazer edições no arquivo sudoers.
Pré-requisitos
Este é um tutorial prático e você precisará testar os comandos para entender o tutorial completamente. Usaremos o servidor Ubuntu 20.04 neste tutorial, no entanto, você pode seguir as etapas se tiver qualquer uma das distribuições Linux modernas, como Debian e CentOS. Você pode seguir este link para configurar seu próprio servidor em nuvem Ubuntu na CloudSigma.
Obtendo privilégios de root
Você pode obter privilégios de root de três maneiras que discutiremos abaixo:
Fazer login como root
O método mais simples que a maioria das pessoas usa para obter privilégios de root é fazer login em um sistema usando as credenciais do usuário root. Se você estiver acessando sua máquina local, basta fornecer um nome de usuário e será solicitada uma senha.
Outro método que você pode usar para fazer login como root é usando o SSH – uma ferramenta de linha de comando para fazer login e realizar tarefas em um servidor. Ele requer um nome de usuário e o endereço IP do seu servidor. A sintaxe para fazer login como root é a seguinte, substitua pelo endereço IP do seu servidor:
|
1 |
ssh root@your_server_ip_or_domain_name |
Quando você inserir o comando acima em seu terminal, será solicitada a sua senha se você não tiver configurado as chaves SSH, ou será solicitada a frase secreta (passphrase) da sua chave SSH se você as tiver configurado. Depois de fornecer as credenciais corretas, você estará logado. Siga este guia para instruções passo a passo sobre como usar o SSH para se conectar a um servidor remoto no Ubuntu.
Usando su para se tornar root
Você pode fazer login em um sistema Linux usando qualquer outra conta que não seja root, o que geralmente é a maneira recomendada ao realizar tarefas não administrativas. Sempre que quiser obter privilégios de root, basta digitar su no seu terminal:
|
1 |
su |
O sistema solicitará a senha do root, após o qual você terá acesso a uma sessão de shell root. Enquanto estiver nesta sessão de shell, você poderá realizar todas as tarefas administrativas e, sempre que quiser retornar ao shell normal, basta pressionar Ctrl + D. Opcionalmente, você pode digitar exit no terminal e pressionar enter.
Usando sudo para executar comandos com privilégios de root
O comando sudo, que foi brevemente apresentado no início deste tutorial, permite executar comandos de linha única sem a necessidade de um shell com privilégios de root. Você simplesmente digita sudo seguido pelo comando a ser executado:
|
1 |
sudo execute_this_command |
Por exemplo, para atualizar seu sistema, você pode inserir o seguinte:
|
1 |
sudo apt-get update |
Será solicitada uma senha. A diferença entre o comando su e o sudo é que su solicita a senha do root, enquanto o sudo solicita a senha do usuário atual. O acesso ao sudo não é concedido aos usuários por padrão porque traz grandes implicações de segurança para o sistema. Discutiremos mais sobre isso nas seções seguintes.
Using Visudo to edit the sudoers file
Os privilégios do sudo são configurados no arquivo sudoers localizado em /etc/sudoers. Esses privilégios são necessários para que qualquer usuário obtenha acesso ao sistema Linux. Qualquer erro de sintaxe impedirá que os usuários façam login no sistema, deixando o sistema quebrado.
Visudo o comando abre o arquivo com um editor especial que verifica a sintaxe do arquivo ao salvar. Portanto, é importante que você use apenas o visudo comando para abrir o arquivo para evitar que você torne o sistema do seu servidor inutilizável. Por padrão, o visudo foi configurado para abrir o editor de texto com (vi) vim. No entanto, o Ubuntu configurou o visudo para usar o nano editor de texto. No Debian ou Ubuntu, você pode mudar para um editor diferente inserindo o seguinte comando:
|
1 |
sudo update-alternatives --config editor |
Ele exibe uma lista de editores da qual você pode escolher um editor padrão, conforme mostrado na captura de tela. Selecione o número correspondente ao editor de sua preferência:

Em uma CentOS distribuição Linux, edite /etc/sudoers e adicione as linhas abaixo:
|
1 2 |
Defaults editor = /usr/bin/vim:/usr/bin/vi:/usr/bin/nano Defaults env_keep += "EDITOR" |
Insira o seguinte comando. Lembre-se de substituir o nome de your_editor_of_choice:
|
1 |
export EDITOR=`which your_editor_of_choice` |
O comando adiciona a linha ao arquivo ~/.bashrc. Digite o seguinte no seu terminal para aplicar as alterações:
|
1 |
. ~/.bashrc |
Com o seu visudo agora configurado, você pode abrir o arquivo em /etc/sudoers inserindo o comando:
|
1 |
sudo visudo |
Editando o arquivo Sudoers
Quando você executa o comando anterior, o arquivo é aberto no seu editor principal, conforme configurado. Abaixo estão os conteúdos do arquivo:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# # Este arquivo DEVE ser editado com o comando 'visudo' como root. # # Por favor, considere adicionar conteúdo local em /etc/sudoers.d/ em vez de # modificar diretamente este arquivo. # # Veja a página de manual para detalhes sobre como escrever um arquivo sudoers. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # Especificação de alias de host # Especificação de alias de usuário # Especificação de alias de comando # Especificação de privilégio de usuário root ALL=(ALL:ALL) ALL # Membros do grupo admin podem obter privilégios de root %admin ALL=(ALL) NOPASSWD:ALL # Permitir que membros do grupo sudo executem qualquer comando %sudo ALL=(ALL) NOPASSWD:ALL # Veja sudoers(5) para mais informações sobre diretivas "#include": #includedir /etc/sudoers.d |
Os comentários são bastante descritivos, mas discutiremos o que as linhas indicam abaixo.
Linhas Defaults
- Defaults env_reset – Redefine as variáveis de ambiente do terminal para remover quaisquer variáveis de usuário. Portanto, limpa variáveis potencialmente prejudiciais de uma sessão sudo.
- Defaults mail_badpass – Instrui o sistema a enviar avisos por e-mail sobre tentativas incorretas de senha do sudo para o usuário mailto configurado, geralmente a conta root.
- Defaults secure_path – Contém os vários caminhos no sistema de arquivos que uma operação sudo procurará por aplicativos para usar ao executar, a fim de evitar o uso de outros caminhos definidos pelo usuário que possam ser perigosos para o sistema.
Linhas de Especificação de Privilégios de Usuário
|
1 |
root ALL=(ALL:ALL) ALL |
- root ALL=(ALL:ALL) ALL – O primeiro campo especifica o nome de usuário ao qual a regra se aplicará. Neste caso, é o root usuário.
- root ALL=(ALL:ALL) ALL – O primeiro ALL especifica que a regra se aplicará a todos os hosts.
- root ALL=(ALL:ALL) ALL – O segundo ALL especifica que o usuário ao qual esta regra se aplica (ou seja, root) pode executar comandos como todos os usuários.
- root ALL=(ALL:ALL) ALL – O terceiro ALL especifica que o usuário ao qual esta regra se aplica (ou seja, root) pode executar comandos como todos os grupos.
- root ALL=(ALL:ALL) ALL – O último ALL especifica que estas regras se aplicam a todos os comandos.
Pelo que esta regra indica, um usuário root pode executar qualquer comando usando sudo assim que fornecer a senha correta.
Linhas de Especificação de Privilégios de Grupo
Estas linhas especificam as regras de privilégio do sudo que se aplicam a grupos. Os campos indicam as mesmas ações que as linhas de privilégio de usuário, com uma pequena diferença. Elas começam com um % para indicar nomes de grupos.
Como você pode ver, o grupo admin pode executar qualquer comando como qualquer usuário em qualquer host. O grupo sudo tem o mesmo privilégio, com o privilégio adicional de executar comandos como qualquer grupo.
Linha Include /etc/sudoers.d
A linha #includedir /etc/sudoers.d pode parecer um comentário por causa do # no início da linha. No entanto, esta é uma diretiva de inclusão para indicar que os arquivos dentro do diretório /etc/sudoers.d devem ser carregados e usados como parte do arquivo sudoers. Os arquivos dentro deste diretório seguem as mesmas regras do arquivo sudoers.
Qualquer arquivo dentro do diretório que não tenha um ponto (.) nele e não termine em ~ é lido e anexado à configuração do arquivo sudoers. O diretório permite que os aplicativos alterem os privilégios do sudo após a instalação, colocando todas as suas regras associadas em um único arquivo dedicado no diretório /etc/sudoers.d sem alterar o arquivo sudoers padrão. Além disso, quando você deseja inspecionar ou reverter os privilégios de um aplicativo, pode facilmente verificar ou modificar os arquivos dentro do diretório /etc/sudoers.d sem modificar o arquivo /etc/sudoers diretamente.
Como regra geral, todos os arquivos dentro do diretório /etc/sudoers.d devem sempre ser editados usando o comando visudo. Abaixo está a sintaxe, lembre-se de substituir o nome do arquivo que deseja editar no comando:
|
1 |
sudo visudo -f /etc/sudoers.d/file_name_to_edit |
Atribuindo Privilégios Sudo a um Usuário
Quando você concede a um novo usuário acesso geral ao sudo, significa que você deu à conta do usuário acesso administrativo total ao sistema. Esta é uma tarefa comum que os administradores de sistema realizam ao criar outros usuários não-root com privilégios sudo.
Em sistemas como o Ubuntu 20.04 que já possuem o grupo de administração de uso geral, podemos facilmente atribuir privilégios sudo a um usuário adicionando o usuário a esse grupo. O grupo sudo, como visto no arquivo /etc/sudoers, tem privilégios administrativos totais, e podemos adicionar um nome de usuário ao grupo inserindo o seguinte comando:
|
1 |
sudo usermod -aG sudo username |
Opcionalmente, você pode usar o comando gpasswd para realizar a mesma coisa:
|
1 |
sudo gpasswd -a username sudo |
No CentOS, o grupo padrão com privilégios sudo é chamado de wheel, então você pode atribuir os privilégios usando o comando:
|
1 |
sudo usermod -aG wheel username |
Opcionalmente, usando o comando gpasswd, você pode realizar o mesmo usando o comando:
|
1 |
sudo gpasswd -a username wheel |
Em alguns casos, o wheel o grupo no CentOS pode estar comentado no arquivo /etc/sudoers. Para habilitá-lo, abra o arquivo com o visudo e descomente a linha com o nome do grupo. Você pode fazer isso removendo o # no início da linha: %wheel ALL=(ALL) ALL.
Criando Regras Personalizadas
Com o conhecimento da sintaxe geral do sudoers que você tem até este ponto, é hora de configurar algumas regras.
Criar Aliases
Os aliases permitem que você organize seu arquivo sudoers agrupando itens sob vários “aliases”. Temos três diretivas que discutiremos nesta seção: User_Alias para criar aliases de usuário/grupo, Cmnd_Alias para criar aliases de comando, e Runas_Alias para permitir que outro usuário execute como outro usuário.
Por exemplo, usando o User_Alias, dentro do seu /etc/sudoers arquivo, você pode adicionar o seguinte trecho para criar três grupos diferentes de usuários. Alguns usuários podem pertencer a mais de um grupo:
|
1 2 3 |
User_Alias GROUPONE = adelle, nikita, ellie User_Alias GROUPTWO = nikita, brenden, natalia User_Alias GROUPTHREE = brenden, walter, james |
Observe que todos os nomes de grupos começam com uma letra maiúscula. Com os aliases de grupo acima adicionados no arquivo /etc/sudoers, você pode atribuir um privilégio para atualizar o banco de dados do apt para o GROUPTWO adicionando a seguinte regra no arquivo /etc/sudoers:
|
1 |
GROUPTWO ALL = /usr/bin/apt-get update |
Observe que sem especificar o usuário/grupo para executar como, o comando sudo sempre terá como padrão o usuário root.
Aqui está um exemplo do Cmnd_Alias onde criamos um alias de comando para desligar e reiniciar o sistema. A regra é então atribuída ao GROUPTHREE. Adicionar as seguintes linhas dentro do arquivo /etc/sudoers alcança isso:
|
1 2 |
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart GROUPTHREE ALL = POWER |
No trecho acima, a primeira linha cria um alias de comando chamado POWER que inclui comandos para desligar e reiniciar. A segunda linha permite que os membros do GROUPTHREE executem este comando.
Aqui está um exemplo do Runas_Alias, onde criamos um alias que permitirá que um grupo de usuários execute como outro usuário:
|
1 2 |
Runas_Alias WEB = www-data, apache GROUPONE ALL = (WEB) ALL |
No trecho acima, a primeira linha cria um alias chamado WEB, especificando que o Alias será executado como o usuário apache ou o usuário www-data. A segunda linha atribui o alias ao GROUPONE. Agora, os membros do grupo um podem executar comandos como os usuários apache ou www-data.
Regras de Bloqueio
Nesta seção, você aprenderá as várias maneiras pelas quais pode controlar como o sudo reage a uma chamada. Alguns comandos são relativamente inofensivos em sistemas de usuário único. Nesses casos, você pode permitir que os usuários os executem com privilégios de root sem ter que digitar a senha do root. Por exemplo, você pode criar uma regra para permitir que os usuários do GROUPONE executem o comando updatedb sem digitar uma senha, adicionando o seguinte ao arquivo /etc/sudoers:
|
1 |
GROUPONE ALL = NOPASSWD: /usr/bin/updatedb |
A tag NOPASSWD implica que nenhuma senha será solicitada. A tag complementar para a tag NOPASSWD é PASSWD, que é o comportamento padrão. Isso implica que uma senha deve ser fornecida no prompt.
Uma tag se aplica a uma regra, a menos que seja anulada por sua tag complementar, por exemplo:
|
1 |
GROUPTWO ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill |
Nesta regra, os usuários do GROUPTWO podem executar o updatedb comando sem digitar uma senha. No entanto, eles devem fornecer uma senha antes de executar o comando kill.
Em alguns casos, você pode querer restringir os usuários de executar certos comandos para evitar algumas execuções perigosas. É aqui que a tag NOEXEC entra em ação. Alguns programas podem executar outros comandos de dentro de sua interface. Um exemplo de tal programa é o less. Se você digitar um comando com a seguinte sintaxe dentro da interface do less, ele será executado, causando algum comportamento inesperado.
|
1 |
!name_of_command_to_run |
Para evitar tal comportamento, você pode adicionar a seguinte regra ao arquivo /etc/sudoers para restringir um determinado usuário identificado com username:
|
1 |
username ALL = NOEXEC: /usr/bin/less |
Informações Adicionais
Nesta seção, incluímos algumas informações adicionais, diretivas e comandos que você pode achar necessários ao trabalhar com o sudo.
Se você usou o Runas_Alias na configuração, especificando que um usuário ou grupo pode rodar como outro usuário, você pode executar comandos como esses usuários usando a flag -u para o usuário e a flag -g para grupos. Aqui está a sintaxe:
|
1 2 |
sudo -u run_as_user command sudo -g run_as_group command |
Cada um dos comandos solicitará que você insira a senha associada. Por conveniência, o sudo salva a senha por algum tempo, para que você não precise ficar digitando-a toda vez que executar um comando com o sudo. Você pode querer limpar o tempo assim que terminar com os comandos privilegiados do sudo digitando o seguinte comando:
|
1 |
sudo -k |
Caso você tenha mais tarefas a realizar com privilégios do sudo e queira estender o tempo antes da solicitação de senha, ou queira evitar que o comando sudo solicite uma senha mais tarde, você pode renovar o tempo digitando o seguinte comando:
|
1 |
sudo -v |
O comando solicita uma senha e a armazena em cache para usos posteriores do sudo.
Para listar os privilégios do sudo definidos para o seu nome, você pode digitar o seguinte comando:
|
1 |
sudo -l |
O comando lista todas as regras configuradas no arquivo /etc/sudoers que se aplicam ao seu nome de usuário. A partir das regras, você pode ter uma ideia de quais tarefas seu nome de usuário pode realizar no sistema. Aqui está uma captura de tela de exemplo:

Em alguns casos, você pode executar comandos e eles falharem porque você esqueceu de precedê-los com sudo. Nesses cenários, você pode ter que redigitar o comando começando com sudo. Para evitar ter que redigitar o comando, você pode utilizar a funcionalidade do bash para “repetir o último comando”. A sintaxe é de pontos de exclamação duplos. Você pode executar o último comando que rodou no seu terminal digitando o seguinte:
|
1 |
sudo !! |
Finalmente, é importante saber que o sudo simplesmente eleva o comando a ser executado com privilégios do sudo. Para informações adicionais, você pode seguir as instruções em este link para se divertir um pouco com seus usuários.
Conclusão
Ao trabalhar com múltiplos usuários, entender como lidar com o comando sudo e o arquivo sudoers é crucial. Neste tutorial, apresentamos o básico sobre leitura e modificação do arquivo sudoers, bem como os vários métodos que você pode usar para obter privilégios de root.
Tenha sempre em mente que a separação de privilégios é o que torna os sistemas Linux seguros. Portanto, privilégios de superusuário não devem ser concedidos a usuários comuns. Atribua apenas os privilégios que são absolutamente necessários para que um determinado usuário execute suas tarefas específicas no sistema, e não todos os privilégios.
Boa Computação!
Comentários
Nenhum comentário ainda. Seja o primeiro.