Voltar ao blog

Configurando o Arquivo Sudoers do Linux

Configurando o Arquivo Sudoers do Linux

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:

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:

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:

Por exemplo, para atualizar seu sistema, você pode inserir o seguinte:

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:

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:

displays a list of editors

Em uma CentOS distribuição Linux, edite /etc/sudoers e adicione as linhas abaixo:

Insira o seguinte comando. Lembre-se de substituir o nome de your_editor_of_choice:

O comando adiciona a linha ao arquivo ~/.bashrc. Digite o seguinte no seu terminal para aplicar as alterações:

Com o seu visudo agora configurado, você pode abrir o arquivo em /etc/sudoers inserindo o comando:

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:

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
Esta linha é diferente das outras e especifica os privilégios do usuário root. Aqui está o que cada tag na linha indica:

  1. 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.
  2. root ALL=(ALL:ALL) ALL – O primeiro ALL especifica que a regra se aplicará a todos os hosts.
  3. 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.
  4. 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.
  5. 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:

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:

Opcionalmente, você pode usar o comando gpasswd para realizar a mesma coisa:

No CentOS, o grupo padrão com privilégios sudo é chamado de wheel, então você pode atribuir os privilégios usando o comando:

Opcionalmente, usando o comando gpasswd, você pode realizar o mesmo usando o comando:

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:

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:

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:

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:

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:

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:

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.

Para evitar tal comportamento, você pode adicionar a seguinte regra ao arquivo /etc/sudoers para restringir um determinado usuário identificado com username:

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:

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:

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:

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:

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:

screenshot

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:

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!

author

Manpreet Singh

Autor · CloudSigma

Preslav Dobrev é um designer criativo na CloudSigma, focado na construção de uma identidade empresarial consistente por meio de canais de marketing tradicionais e inovadores. Ele é hábil em combinar a visão artística com o marketing estratégico para criar narrativas de marca impactantes.

Comentários

Nenhum comentário ainda. Seja o primeiro.