Como controlar o acesso sudo no Linux

Publicados: 2022-01-29
Uma janela de terminal Linux em uma área de trabalho no estilo Ubuntu.
Fatmawati Achmad Zaenuri/Shutterstock

O comando sudo permite executar comandos no Linux como se você fosse outra pessoa, como root . sudo também permite controlar quem pode acessar os recursos root's , com granularidade. Dê aos usuários acesso total ou permita que eles usem um pequeno subconjunto de comandos. Nós mostramos-lhe como.

sudo e permissões de root

Todos nós já ouvimos (a simplificação exagerada) que tudo no Linux é um arquivo. Na verdade, praticamente tudo no sistema operacional, desde processos, arquivos, diretórios, soquetes e pipes, se comunica com o kernel por meio de um descritor de arquivo. Portanto, embora nem tudo seja um arquivo, a maioria dos objetos do sistema operacional são tratados como se fossem. Sempre que possível, o design de sistemas operacionais Linux e do tipo Unix segue esse princípio.

O conceito de “tudo é um arquivo” é abrangente no Linux. É fácil ver, então, como as permissões de arquivo no Linux se tornaram um dos pilares dos privilégios e direitos do usuário. Se você possui um arquivo ou diretório (um tipo especial de arquivo), pode fazer o que quiser com ele, incluindo editar, renomear, mover e deletar. Você também pode definir as permissões no arquivo para que outros usuários ou grupos de usuários possam ler, modificar ou executar o arquivo. Todos são regidos por essas permissões.

Todo mundo que é, exceto o superusuário, conhecido como root . A conta root é uma conta especialmente privilegiada. Ele não está vinculado às permissões de nenhum dos objetos do sistema operacional. O usuário root pode fazer qualquer coisa com qualquer coisa e, praticamente, a qualquer momento.

Propaganda

Claro, qualquer pessoa com acesso à senha root's pode fazer o mesmo. Eles podem causar estragos maliciosamente ou acidentalmente. Na verdade, o usuário root pode causar estragos cometendo um erro também. Ninguém é infalível. É uma coisa perigosa.

É por isso que agora é considerado uma prática recomendada não fazer login como root . Faça login com uma conta de usuário comum e use o sudo para elevar seus privilégios pelo curto período de tempo que você precisar. Muitas vezes isso é apenas para emitir um único comando.

RELACIONADO: O que significa "Tudo é um arquivo" no Linux?

A lista de sudoers

sudo já foi instalado nos computadores Ubuntu 18.04.3, Manjaro 18.1.0 e Fedora 31 usados ​​para pesquisar este artigo. Isso não é uma surpresa. O sudo existe desde o início dos anos 80 e se tornou o meio padrão de operação de superusuário para quase todas as distribuições.

Quando você instala uma distribuição moderna, o usuário criado durante a instalação é adicionado a uma lista de usuários chamada sudoers . Esses são os usuários que podem usar o comando sudo . Como você tem poderes sudo , você pode usá-los para adicionar outros usuários à lista de sudoers.

Claro, é imprudente distribuir status de superusuário completo, quer ou não, ou para qualquer pessoa que tenha apenas uma necessidade parcial ou específica. A lista de sudoers permite especificar com quais comandos os vários usuários têm permissão para usar o sudo . Dessa forma, você não dá a eles as chaves do reino, mas eles ainda podem realizar o que precisam fazer.

Executando um comando como outro usuário

Originalmente, era chamado de “superusuário do”, porque você poderia fazer coisas como superusuário. Seu escopo foi ampliado agora e você pode usar o sudo para executar um comando como se fosse qualquer usuário. Ele foi renomeado para refletir essa nova funcionalidade. Agora é chamado de “usuário substituto do”.

Para usar o sudo para executar um comando como outro usuário, precisamos usar a opção -u (usuário). Aqui, vamos executar o comando whoami como o usuário mary . Se você usar o comando sudo sem a opção -u , você executará o comando como root .

Propaganda

E, claro, como você está usando o sudo , sua senha será solicitada.

 sudo -u mary whoami 

A resposta de whoami nos diz que a conta de usuário que está executando o comando é mary .

Você pode usar o comando sudo para fazer login como outro usuário sem saber sua senha. Você será solicitado a fornecer sua própria senha. Precisamos usar a opção -i (login).

 sudo -i -u mary
 pwd
 Quem sou eu
 ls -hl
 saída 

Você está logado como mary . Os arquivos “.bashrc”, “.bash_aliases” e “.profile” para a conta de usuário mary são processados ​​exatamente como se o proprietário da conta de usuário mary tivesse feito login.

  • O prompt de comando muda para refletir que esta é uma sessão para a conta de usuário mary .
  • O comando pwd reproduz que você está agora no diretório inicial mary's .
  • whoami nos diz que você está usando a conta de usuário mary .
  • Os arquivos no diretório pertencem à conta de usuário mary .
  • O comando exit retorna você à sua sessão de conta de usuário normal.

Editando o arquivo sudoers

Para adicionar usuários à lista de pessoas que podem usar sudo , você precisa editar o arquivo sudoers . É de vital importância que você só faça isso usando o comando visudo . O comando visudo impede que várias pessoas tentem editar o arquivo sudoers de uma só vez. Ele também executa a verificação de sintaxe e a análise do conteúdo do arquivo à medida que você os salva.

Propaganda

Se suas edições não passarem nos testes, o arquivo não será salvo cegamente. Você obtém opções. Você pode cancelar e abandonar as alterações, voltar e editar as alterações novamente ou forçar que as edições incorretas sejam salvas. A última opção é uma péssima ideia. Não fique tentado a fazer isso. Você pode se encontrar em uma situação em que todos são acidentalmente impedidos de usar o sudo .

Embora você inicie o processo de edição usando o comando visudo , visudo não é um editor. Ele chama um de seus editores existentes para realizar as edições do arquivo. No Manjaro e no Ubuntu, o comando visudo lançou o editor simples nano . No Fedora, o visudo lançou o vim .

RELACIONADO: Como sair do editor Vi ou Vim

Se você preferir usar o nano no Fedora, pode fazê-lo facilmente. Primeiro, instale nano :

sudo dnf instalar nano

E então o visudo teve que ser invocado com este comando:

 sudo EDITOR=nano visudo 

Isso parece ser um bom candidato para um alias. O editor nano é aberto com o arquivo sudoers carregado nele.

editor nano com arquivo sudoers carregado nele

Adicionando usuários ao grupo sudo

Use visudo para abrir o arquivo sudoers. Use este comando ou o descrito acima para especificar o editor de sua escolha:

 sudo visudo 

Percorra o arquivo sudoers até ver a definição da entrada %sudo .

O arquivo sudoers com a linha %sudo destacada

Propaganda

O sinal de porcentagem indica que esta é uma definição de grupo e não uma definição de usuário. Em algumas distribuições, a linha %sudo tem um hash # no início da linha. Isso torna a linha um comentário. Se este for o caso, remova o hash e salve o arquivo.

A linha %sudo se divide assim:

  • %sudo : O nome do grupo.
  • ALL= : Esta regra se aplica a todos os hosts nesta rede.
  • (ALL:ALL) : os membros deste grupo podem executar comandos como todos os usuários e todos os grupos.
  • All : os membros deste grupo podem executar todos os comandos.

Para reformular um pouco, os membros deste grupo podem executar qualquer comando, como qualquer usuário ou qualquer grupo, neste computador ou em qualquer outro host desta rede. Portanto, uma maneira simples de conceder privilégios de root a alguém e a capacidade de usar sudo , é adicioná-lo ao grupo sudo .

Temos dois usuários, Tom e Mary, com contas de usuário tom e mary , respectivamente. Adicionaremos a conta de usuário tom ao grupo sudo com o comando usermod . A opção -G (grupos) especifica o grupo ao qual vamos adicionar a conta tom . A opção -a (anexar) adiciona este grupo à lista de grupos em que o tom da conta de usuário já está. Sem essa opção, o tom da conta de usuário seria colocado no novo grupo, mas removido de quaisquer outros grupos.

 sudo usermod -a -G sudo tom 

Vamos verificar em quais grupos Mary está:

 grupos 

A conta de usuário mary está apenas no grupo mary .

Vamos verificar com Tom:

 grupos 

A conta de usuário tom —e, portanto, Tom—está nos grupos tom e sudo .

Vamos tentar fazer com que Mary faça algo que exija privilégios de sudo .

 sudo menos /etc/shadow 

Propaganda

Mary não pode olhar dentro do arquivo restrito “/etc/shadow”. Ela recebe uma leve repreensão por tentar usar sudo sem permissão. Vamos como Tom se sai:

 sudo menos /etc/shadow 

Assim que Tom digitar sua senha, ele verá o arquivo /etc/shadow.

Apenas ao adicioná-lo ao grupo sudo , ele foi elevado às fileiras de elite daqueles que podem usar sudo . Completamente irrestrito.

Dando aos usuários direitos restritos de sudo

Tom recebeu todos os direitos sudo . Ele pode fazer qualquer coisa que o root — ou qualquer outra pessoa do grupo sudo — possa fazer. Isso pode conceder a ele mais poder do que você está feliz em entregar. Às vezes, há um requisito para um usuário executar uma função que requer privilégios de root , mas não há um caso justificável para que ele tenha acesso completo ao sudo . Você pode alcançar esse equilíbrio adicionando-os ao arquivo sudoers e listando os comandos que eles podem usar.

Vamos conhecer Harry, dono da conta de usuário harry . Ele não está no grupo sudo e não tem privilégios sudo .

 grupos 

É útil para Harry poder instalar software, mas não queremos que ele tenha direitos totais de sudo . OK, sem problemas. vamos iniciar o visudo :

 sudo visudo 

Propaganda

Role para baixo pelo arquivo até passar pelas definições de grupo. Vamos adicionar uma linha para Harry. Como esta é uma definição de usuário e não de grupo, não precisamos iniciar a linha com um sinal de porcentagem.

entrada de arquivo sudoer para harry

A entrada para a conta de usuário harry é:

 harry ALL=/usr/bin/apt-get

Observe que há uma guia entre “harry” e “ALL=”.

Isso lê como conta de usuário harry pode usar os comandos listados em todos os hosts conectados a esta rede. Há um comando listado, que é “/usr/bin/apt-get”. Podemos conceder a Harry acesso a mais de um comando adicionando-os à lista de comandos, separados por vírgulas.

Adicione a linha ao arquivo sudoers e salve o arquivo. Se você quiser verificar novamente se a linha está sintaticamente correta, podemos pedir ao visudo para verificar o arquivo e verificar a sintaxe para nós, usando a opção -c (somente verificação):

 sudo visudo -c 

As verificações acontecem e o visudo informa que está tudo bem. Harry agora deve poder usar apt-get para instalar o software, mas deve ser recusado se ele tentar usar qualquer outro comando que exija sudo .

 sudo apt-get install finger 

Os direitos de sudo apropriados foram concedidos a Harry e ele pode instalar o software.

Propaganda

O que acontece se Harry tentar usar um comando diferente que exija sudo ?

 sudo desligar agora 

Harry é impedido de executar o comando. Nós lhe concedemos com sucesso acesso específico e restrito. Ele pode usar o comando indicado e nada mais.

Usando alias de usuário sudoers

Se quisermos dar a Mary os mesmos privilégios, podemos adicionar uma linha no arquivo sudoers para a conta de usuário mary exatamente da mesma maneira que fizemos com Harry. Outra maneira mais simples de conseguir a mesma coisa é usar um User_Alias .

no arquivo sudoers, um User_Alias contém uma lista de nomes de contas de usuários. O nome do User_Alias pode então ser usado em uma definição para representar todas essas contas de usuário. Se você quiser alterar os privilégios dessas contas de usuário, terá apenas uma linha para editar.

Vamos criar um User_Alias e usá-lo em nosso arquivo sudoers.

 sudo visudo 

 Role para baixo no arquivo até chegar à linha de especificação User_Alias.

Adicione o User_Alias digitando:

 User_Alias ​​INSTALLERS = harry, mary

Cada elemento é separado por um espaço, não por uma tabulação. A lógica se decompõe como:

  • User_Alias : Isso diz ao visudo que este será um User_Alias .
  • INSTALADORES : Este é um nome arbitrário para este alias.
  • = harry, mary : A lista de usuários a serem incluídos neste alias.
Propaganda

Agora vamos editar a linha que adicionamos anteriormente para a conta de usuário harry :

 harry ALL=/usr/bin/apt-get

Altere-o para que leia:

 INSTALADORES TODOS=/usr/bin/apt-get

Isso diz que todas as contas de usuário contidas na definição de “INSTALLERS” User_Alias podem executar o comando apt-get . Podemos testar isso com Mary, que agora deve ser capaz de instalar o software.

 sudo apt-get install colordiff 

Mary pode instalar o software porque ela está no User_Alias “INSTALLERS” e esse User_Alias recebeu esses direitos.

Três truques rápidos de sudo

Quando você esquecer de adicionar sudo a um comando, digite

 sudo!!

E o último comando será repetido com sudo adicionado ao início da linha.

Depois de usar o sudo e autenticar com sua senha, você não precisará usar sua senha com outros comandos sudo por 15 minutos. Se você quiser que sua autenticação seja esquecida imediatamente, use:

 sudo -k
Propaganda

Você já se perguntou onde você pode ver tentativas fracassadas de comando sudo ? Eles vão para o arquivo “/var/log/auth.log”. Você pode visualizá-lo com:

 menos /var/log/auth.log 

Podemos ver a entrada para a conta de usuário mary que estava logada em TTY pts/1 quando tentou executar o comando de shutdown como usuário “root”.

Com grande poder…

… vem a capacidade de delegar partes dele para os outros. Agora você sabe como capacitar outros usuários seletivamente.