Como Editar o Arquivo Sudoers

Introdução

A separação de privilégios é um dos paradigmas de segurança fundamentais implementados em sistemas operacionais Linux e Unix-like. Os usuários regulares operam com privilégios limitados para reduzir o escopo de sua influência ao seu próprio ambiente e não ao sistema operacional mais amplo.

A special user, called root, has super-user privileges. This is an administrative account without the restrictions that are present on normal users. Users can execute commands with super-user or root privileges in a number of different ways.

Neste artigo, discutiremos como obter corretamente e com segurança privilégios de root, com um foco especial na edição do arquivo /etc/sudoers.

Realizaremos essas etapas em um servidor Ubuntu 20.04, mas a maioria das distribuições Linux modernas, como Debian e CentOS, deve operar de maneira semelhante.

Este guia assume que você já concluiu a configuração inicial do servidor discutida aqui. Faça login no seu servidor como um usuário regular, não root, e continue abaixo.Observação: Este tutorial explora a escalada de privilégios e o arquivo sudoers. Se você apenas deseja adicionar privilégios sudo a um usuário, confira nossos tutoriais de início rápido sobre Como Criar um Novo Usuário com Privilégios Sudo para Ubuntu e CentOS.

Nota: Este tutorial aborda em profundidade a elevação de privilégios e o arquivo sudoers. Se você deseja apenas adicionar privilégios sudo a um usuário, confira nossos tutoriais rápidos Como Criar um Novo Usuário Habilitado para Sudo para Ubuntu e CentOS.

Como Obter Privilégios de Root

Existem três maneiras básicas de obter privilégios root, que variam em nível de sofisticação.

Fazendo Login Como Root

O método mais simples e direto de obter privilégios root é fazer login diretamente em seu servidor como o usuário root.

Se você estiver fazendo login em uma máquina local (ou usando um recurso de console fora da banda em um servidor virtual), digite root como seu nome de usuário no prompt de login e insira a senha root quando solicitado.

Se você estiver se conectando via SSH, especifique o usuário root antes do endereço IP ou nome de domínio na sua cadeia de conexão SSH:

  1. ssh root@server_domain_or_ip

Se você não configurou chaves SSH para o usuário root, digite a senha root quando solicitado.

Usando su para se tornar root

Conectar-se diretamente como root geralmente não é recomendado, porque é fácil começar a usar o sistema para tarefas não administrativas, o que é perigoso.

A próxima maneira de obter privilégios de superusuário permite que você se torne o usuário root a qualquer momento, conforme necessário.

Podemos fazer isso invocando o comando su, que significa “usuário substituto”. Para obter privilégios root, digite:

  1. su

Você será solicitado a senha do usuário root, após o que, você será redirecionado para uma sessão de shell root.

Quando você terminar as tarefas que exigem privilégios root, retorne à sua shell normal digitando:

  1. exit

Usando sudo para executar comandos como root

O último método de obtenção de privilégios root que discutiremos é com o comando sudo.

O comando sudo permite que você execute comandos únicos com privilégios root, sem a necessidade de criar um novo shell. É executado assim:

  1. sudo command_to_execute

Ao contrário do su, o comando sudo solicitará a senha do usuário atual, não a senha root.

Devido às implicações de segurança, o acesso ao sudo não é concedido aos usuários por padrão e deve ser configurado antes de funcionar corretamente. Confira nossos tutoriais rápidos de Como Criar um Novo Usuário Habilitado para Sudo para Ubuntu e CentOS para aprender a configurar um usuário habilitado para sudo.

Na seção a seguir, discutiremos como modificar a configuração do sudo com mais detalhes.

O que é Visudo?

O comando sudo é configurado por meio de um arquivo localizado em /etc/sudoers.

Aviso: Nunca edite este arquivo com um editor de texto normal! Sempre use o comando visudo em vez disso!

Porque a sintaxe imprópria no arquivo /etc/sudoers pode deixar você com um sistema quebrado onde é impossível obter privilégios elevados, é importante usar o comando visudo para editar o arquivo.

O comando visudo abre um editor de texto como normalmente, mas valida a sintaxe do arquivo ao salvar. Isso evita erros de configuração que bloqueiam operações sudo, que podem ser a sua única maneira de obter privilégios root.

Tradicionalmente, visudo abre o arquivo /etc/sudoers com o editor de texto vi. No entanto, o Ubuntu configurou visudo para usar o editor de texto nano em vez disso.

Se você gostaria de alterá-lo de volta para vi, emita o seguinte comando:

  1. sudo update-alternatives --config editor
Output
There are 4 choices for the alternative editor (providing /usr/bin/editor). Selection Path Priority Status ------------------------------------------------------------ * 0 /bin/nano 40 auto mode 1 /bin/ed -100 manual mode 2 /bin/nano 40 manual mode 3 /usr/bin/vim.basic 30 manual mode 4 /usr/bin/vim.tiny 10 manual mode Press <enter> to keep the current choice[*], or type selection number:

Selecione o número que corresponde à escolha que deseja fazer.

No CentOS, você pode alterar esse valor adicionando a seguinte linha ao seu ~/.bashrc:

  1. export EDITOR=`which name_of_editor`

Faça o source do arquivo para implementar as alterações:

  1. . ~/.bashrc

Depois de configurar o visudo, execute o comando para acessar o arquivo /etc/sudoers:

  1. sudo visudo

Como Modificar o Arquivo Sudoers

Você será apresentado com o arquivo /etc/sudoers no editor de texto selecionado.

I have copied and pasted the file from Ubuntu 20.04, with comments removed. The CentOS /etc/sudoers file has many more lines, some of which we will not discuss in this guide.

/etc/sudoers
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

root    ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

#includedir /etc/sudoers.d

Vamos dar uma olhada no que essas linhas fazem.

Linhas Padrão

A primeira linha, Defaults env_reset, reinicia o ambiente do terminal para remover quaisquer variáveis de usuário. Esta é uma medida de segurança usada para limpar variáveis ambientais potencialmente prejudiciais da sessão sudo.

A segunda linha, Defaults mail_badpass, informa ao sistema para enviar avisos de tentativas de senha sudo ruins para o usuário mailto configurado. Por padrão, este é o root conta.

A terceira linha, que começa com Defaults secure_path=..., especifica o PATH (os lugares no sistema de arquivos que o sistema operacional procurará por aplicativos) que será usado para operações sudo. Isso impede o uso de caminhos de usuário que podem ser prejudiciais.

Linhas de Privilégios do Usuário

A quarta linha, que determina os privilégios sudo do usuário root, é diferente das linhas anteriores. Vamos dar uma olhada no que os diferentes campos significam:

  • root ALL=(ALL:ALL) ALL
    O primeiro campo indica o nome de usuário ao qual a regra se aplicará (root).

  • root ALL=(ALL:ALL) ALL
    O primeiro “ALL” indica que essa regra se aplica a todos os hosts.

  • root ALL=(ALL:ALL) ALL
    Este “ALL” indica que o usuário root pode executar comandos como todos os usuários.

  • root ALL=(ALL:ALL) ALL
    Este “ALL” indica que o usuário root pode executar comandos como todos os grupos.

  • root ALL=(ALL:ALL) ALL
    O último “ALL” indica que essas regras se aplicam a todos os comandos.

Isso significa que nosso usuário root pode executar qualquer comando usando sudo, desde que forneça sua senha.

Linhas de Privilégio de Grupo

As duas linhas seguintes são semelhantes às linhas de privilégio do usuário, mas especificam regras de sudo para grupos.

Nomes que começam com um % indicam nomes de grupos.

Aqui, vemos que o grupo admin pode executar qualquer comando como qualquer usuário em qualquer host. Da mesma forma, o grupo sudo tem os mesmos privilégios, mas também pode executar como qualquer grupo.

Linha incluída em /etc/sudoers.d

A última linha pode parecer um comentário à primeira vista:

/etc/sudoers
. . .

#includedir /etc/sudoers.d

Ela realmente começa com um #, que geralmente indica um comentário. No entanto, essa linha indica que os arquivos dentro do diretório /etc/sudoers.d serão importados e aplicados também.

Os arquivos dentro desse diretório seguem as mesmas regras que o arquivo /etc/sudoers em si. Qualquer arquivo que não termine em ~ e que não tenha um . nele será lido e adicionado à configuração de sudo.

Isso é principalmente destinado a aplicativos que alteram os privilégios do sudo após a instalação. Colocar todas as regras associadas em um único arquivo no diretório /etc/sudoers.d pode facilitar a visualização de quais privilégios estão associados a quais contas e a reversão de credenciais facilmente, sem ter que tentar manipular o arquivo /etc/sudoers diretamente.

Como com o próprio arquivo /etc/sudoers, você deve sempre editar arquivos dentro do diretório /etc/sudoers.d com visudo. A sintaxe para editar esses arquivos seria:

  1. sudo visudo -f /etc/sudoers.d/file_to_edit

Como dar a um usuário privilégios sudo

A operação mais comum que os usuários desejam realizar ao gerenciar permissões do sudo é conceder a um novo usuário acesso geral ao sudo. Isso é útil se você deseja dar a uma conta acesso administrativo total ao sistema.

A maneira mais fácil de fazer isso em um sistema configurado com um grupo de administração de uso geral, como o sistema Ubuntu neste guia, é realmente adicionar o usuário em questão a esse grupo.

Por exemplo, no Ubuntu 20.04, o grupo sudo tem privilégios de administração total. Podemos conceder ao usuário esses mesmos privilégios adicionando-o ao grupo assim:

  1. sudo usermod -aG sudo username

O comando gpasswd também pode ser usado:

  1. sudo gpasswd -a username sudo

Ambos farão a mesma coisa.

No CentOS, geralmente é o grupo wheel em vez do grupo sudo:

  1. sudo usermod -aG wheel username

Ou, usando gpasswd:

  1. sudo gpasswd -a username wheel

No CentOS, se adicionar o usuário ao grupo não funcionar imediatamente, talvez seja necessário editar o arquivo /etc/sudoers para descomentar o nome do grupo:

  1. sudo visudo
/etc/sudoers
. . .
%wheel ALL=(ALL) ALL
. . .

Como Configurar Regras Personalizadas

Agora que nos familiarizamos com a sintaxe geral do arquivo, vamos criar algumas novas regras.

Como Criar Alias

O arquivo sudoers pode ser organizado de forma mais fácil agrupando coisas com vários tipos de “alias”.

Por exemplo, podemos criar três grupos diferentes de usuários, com associação sobreposta:

/etc/sudoers
. . .
User_Alias		GROUPONE = abby, brent, carl
User_Alias		GROUPTWO = brent, doris, eric,
User_Alias		GROUPTHREE = doris, felicia, grant
. . .

Os nomes de grupo devem começar com uma letra maiúscula. Podemos então permitir que os membros do GROUPTWO atualizem o banco de dados apt criando uma regra como esta:

/etc/sudoers
. . .
GROUPTWO	ALL = /usr/bin/apt-get update
. . .

Se não especificarmos um usuário/grupo para executar, como acima, sudo assume o usuário root.

Podemos permitir que os membros do GROUPTHREE desloquem e reiniciem a máquina criando um “alias de comando” e usando isso em uma regra para GROUPTHREE:

/etc/sudoers
. . .
Cmnd_Alias		POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
GROUPTHREE	ALL = POWER
. . .

Criamos um alias de comando chamado POWER que contém comandos para desligar e reiniciar a máquina. Em seguida, permitimos que os membros do GROUPTHREE executem esses comandos.

Também podemos criar aliases de “Executar como”, que podem substituir a parte da regra que especifica o usuário para executar o comando:

/etc/sudoers
. . .
Runas_Alias		WEB = www-data, apache
GROUPONE	ALL = (WEB) ALL
. . .

Isso permitirá que qualquer um que seja membro do GROUPONE execute comandos como o usuário www-data ou o usuário apache.

Lembre-se de que as regras posteriores substituirão as regras anteriores quando houver um conflito entre as duas.

Como Bloquear Regras

Existem várias maneiras de obter mais controle sobre como o sudo reage a uma chamada.

O comando updatedb associado ao pacote mlocate é relativamente inofensivo em um sistema de usuário único. Se quisermos permitir que os usuários o executem com privilégios root sem ter que digitar uma senha, podemos fazer uma regra como esta:

/etc/sudoers
. . .
GROUPONE	ALL = NOPASSWD: /usr/bin/updatedb
. . .

NOPASSWD é uma “etiqueta” que significa que nenhuma senha será solicitada. Tem um comando companheiro chamado PASSWD, que é o comportamento padrão. Uma tag é relevante para o restante da regra, a menos que seja anulado por sua “tag gêmea” mais adiante na linha.

Por exemplo, podemos ter uma linha como esta:

/etc/sudoers
. . .
GROUPTWO	ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill
. . .

Outro tag útil é NOEXEC, que pode ser usado para impedir alguns comportamentos perigosos em certos programas.

Por exemplo, alguns programas, como less, podem gerar outros comandos digitando isso a partir de dentro de sua interface:

!command_to_run

Isso basicamente executa qualquer comando que o usuário fornece com as mesmas permissões que less está executando, o que pode ser bastante perigoso.

Para restringir isso, poderíamos usar uma linha como esta:

/etc/sudoers
. . .
username	ALL = NOEXEC: /usr/bin/less
. . .

Informações Diversos

Existem algumas informações adicionais que podem ser úteis ao lidar com sudo.

Se você especificou um usuário ou grupo para “executar como” no arquivo de configuração, você pode executar comandos como esses usuários usando as bandeiras -u e -g, respectivamente:

  1. sudo -u run_as_user command
  2. sudo -g run_as_group command

Por conveniência, por padrão, sudo salvará seus detalhes de autenticação por um certo período de tempo em um terminal. Isso significa que você não terá que digitar sua senha novamente até que o temporizador expire.

Por motivos de segurança, se você deseja limpar esse temporizador quando terminar de executar comandos administrativos, pode executar:

  1. sudo -k

Se, por outro lado, você deseja “preparar” o comando sudo para que você não seja solicitado mais tarde, ou renovar sua locação sudo, sempre pode digitar:

  1. sudo -v

Você será solicitado a fornecer sua senha, que será armazenada em cache para usos posteriores de sudo até que o período de tempo do sudo expire.

Se você está simplesmente se perguntando que tipo de privilégios são definidos para seu nome de usuário, você pode digitar:

  1. sudo -l

Isso listará todas as regras no arquivo /etc/sudoers que se aplicam ao seu usuário. Isso lhe dá uma boa ideia do que você será ou não será autorizado a fazer com sudo como qualquer usuário.

Há muitas vezes em que você executará um comando e ele falhará porque você esqueceu de prefaciá-lo com sudo. Para evitar ter que reescrever o comando, você pode tirar vantagem de uma funcionalidade do bash que significa “repetir o último comando”:

  1. sudo !!

O ponto de exclamação duplo repetirá o último comando. Nós o precedemos com sudo para rapidamente mudar o comando não privilegiado para um comando privilegiado.

Para um pouco de diversão, você pode adicionar a seguinte linha ao seu arquivo /etc/sudoers com visudo:

  1. sudo visudo
/etc/sudoers
. . .
Defaults	insults
. . .

Isso fará com que sudo retorne uma insulto bobo quando um usuário digitar uma senha incorreta para sudo. Podemos usar sudo -k para limpar a senha do sudo armazenada em cache anterior para experimentá-lo:

  1. sudo -k
  2. sudo ls
Output
[sudo] password for demo: # enter an incorrect password here to see the results Your mind just hasn't been the same since the electro-shock, has it? [sudo] password for demo: My mind is going. I can feel it.

Conclusão

Você agora deve ter uma compreensão básica de como ler e modificar o arquivo sudoers, e um entendimento das várias maneiras que você pode usar para obter privilégios de root.

Lembre-se, privilégios de superusuário não são concedidos a usuários regulares por um motivo. É essencial que você entenda o que cada comando faz ao executá-lo com privilégios de root. Não leve a responsabilidade de forma leviana. Aprenda a melhor maneira de usar essas ferramentas para o seu caso de uso e restrinja qualquer funcionalidade que não seja necessária.

Source:
https://www.digitalocean.com/community/tutorials/how-to-edit-the-sudoers-file