Como controlar o acesso sudo no Linux

Uma janela de terminal Linux em uma área de trabalho estilo Ubuntu.
Fatmawati Achmad Zaenuri / Shutterstock

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

sudo e permissões de raiz

Todos nós já ouvimos (simplificando demais) que tudo no Linux é um arquivo. Na verdade, praticamente tudo no sistema operacional, desde processos, arquivos, diretórios, soquetes e canais, 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 do Linux e de sistemas operacionais semelhantes ao Unix seguem 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 excluí-lo. 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.

Todos que são, exceto o superusuário, são conhecidos como root. A rootconta é 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 para qualquer coisa e, praticamente, a qualquer momento.

Claro, qualquer pessoa com acesso à root'ssenha pode fazer o mesmo. Eles podem causar estragos de forma maliciosa ou acidental. Na verdade, o rootusuário pode causar estragos cometendo um erro também. Ninguém é infalível. É algo perigoso.

É por isso que agora é considerada a melhor prática não fazer o login root. Faça login com uma conta de usuário normal e use sudopara elevar seus privilégios pelo curto período de tempo necessário. Freqüentemente, isso é apenas para emitir um único comando.

A lista de sudoers

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

Quando você instala uma distro moderna, o usuário que você cria durante a instalação é adicionado a uma lista de usuários chamada sudoers . Esses são os usuários que podem usar o sudocomando. Porque você tem sudopoderes, você pode usá-los para adicionar outros usuários à lista de sudoers.

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

Recomendado:  O melhor guia para limpar seus AirPods Icky

Executando um comando como outro usuário

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

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

E, claro, como você está usando, sudosua senha será solicitada.

sudo -u mary whoami

sudo -u whoami em uma janela de terminal

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

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

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

sudo -i -u mary em uma janela de terminal

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

  • O prompt de comando muda para refletir que esta é uma sessão para a conta do usuário mary.
  • O pwdcomando testa novamente para que você esteja agora no  mary's diretório inicial .
  • whoaminos diz que você está usando uma conta de usuário mary.
  • Os arquivos do diretório pertencem à mary conta do usuário.
  • O exitcomando o leva de volta à sessão normal da conta do usuário .

Editando o arquivo sudoers

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

Se suas edições não passarem nos testes, o arquivo não foi salvo às cegas. Você tem opções. Você pode cancelar e abandonar as alterações, voltar e editar as alterações novamente ou forçar o salvamento das edições incorretas. 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 sudo.

Embora você inicie o processo de edição usando o visudocomando, visudonão é um editor. Ele chama um de seus editores existentes para realizar as edições do arquivo. No Manjaro e no Ubuntu, o visudocomando lançou o editor simples nano . No Fedora, visudolançou o mais capaz – mas menos intuitivovim.

Se preferir usar nanono Fedora, você pode fazer isso facilmente. Primeiro, instale nano:

sudo dnf install nano

sudo dnf instalar nano em uma janela de terminal

E então visudoteve que ser invocado com este comando:

sudo EDITOR = nano visudo

sudo EDITOR = nano visudo em uma janela de terminal

Parece um bom candidato para apelido . O nanoeditor é aberto com o arquivo sudoers carregado nele.

editor nano com arquivo sudoers carregado nele

Adicionando usuários ao grupo sudo

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

sudo visudo

sudo visudo em uma janela de terminal

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

Recomendado:  Microsoft copia o pior recurso da App Store para Windows

O arquivo sudoers com a linha% sudo destacada

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 %sudolinha tem um hash #no início da linha. Isso torna a linha um comentário. Se for esse o caso, remova o hash e salve o arquivo.

A %sudolinha 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.
  • Todos : os membros deste grupo podem executar todos os comandos.

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

Temos dois usuários, Tom e Mary, com contas de usuário tome maryrespectivamente. Vamos adicionar a conta do usuário tomao sudogrupo com o usermodcomando. A -Gopção (grupos) especifica o grupo ao qual iremos adicionar a tomconta. A -aopção (anexar) adiciona este grupo à lista de grupos em que a conta do usuário tomjá está. Sem essa opção, a conta do usuário tomseria colocada no novo grupo, mas removida de quaisquer outros grupos.

sudo usermod -a -G sudo tom

sudo usermod -a -G sudo tom em uma janela de terminal

Vamos verificar em quais grupos Mary está:

grupos

grupos em uma janela de terminal

A conta do usuário maryestá apenas no   mary  grupo.

Vamos verificar com Tom:

grupos

grupos em uma janela de terminal

A tomconta do usuário – e, portanto, Tom – está nos grupos tome sudo.

Vamos tentar fazer com que Mary faça algo que exija sudoprivilégios.

sudo less / etc / shadow

sudo less / etc / shadow em uma janela de terminal

Maria não consegue olhar dentro do arquivo restrito “/ etc / shadow”. Ela recebe uma bronca leve por tentar usar sudosem permissão. Vamos ver como Tom se sai:

sudo less / etc / shadow

sudo less / etc / shadow em uma janela de terminal

Assim que Tom insere sua senha, é mostrado o arquivo / etc / shadow.

o arquivo / etc / shadow em less em uma janela de terminal

Apenas por adicioná-lo ao sudogrupo, ele foi elevado à categoria de elite daqueles que podem usar  sudo. Totalmente irrestrito.

Concedendo aos usuários direitos sudo restritos

Tom recebeu todos os sudodireitos. Ele pode fazer qualquer coisa que root– ou qualquer outra pessoa do sudogrupo – possa fazer. Isso pode conceder a ele mais poder do que você gostaria de entregar. Às vezes, é necessário que um usuário execute uma função que requer rootprivilégios, mas não há um caso justificável para que ele tenha sudoacesso total . Você pode atingir esse equilíbrio adicionando-os ao arquivo sudoers e listando os comandos que eles podem usar.

Vamos conhecer Harry, dono da conta do usuário harry. Ele não está no sudogrupo e não tem sudoprivilégios.

grupos

grupos em uma janela de terminal

É útil para Harry poder instalar o software, mas não queremos que ele tenha todos os sudodireitos. OK, sem problemas. vamos acender visudo:

sudo visudo

sudo visudo em uma janela de terminal

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

Recomendado:  NVMe vs. SATA: Qual tecnologia SSD é mais rápida?

entrada do 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 é lido como uma conta de usuário harrypode usar os comandos listados em todos os hosts conectados a esta rede. Existe 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 se a linha está sintaticamente correta, podemos pedir visudopara verificar o arquivo e verificar a sintaxe para nós, usando a opção -c(verificar apenas):

sudo visudo -c

sudo visudo -c em uma janela de terminal

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

sudo apt-get install finger

sudo apt-get install finger em uma janela de terminal

Os sudodireitos apropriados foram concedidos a Harry e ele pode instalar o software.

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

sudo shutdown now

sudo shutdown now em uma janela de terminal

Harry é impedido de executar o comando. Nós concedemos a ele acesso específico e restrito. Ele pode usar o comando nomeado e nada mais.

Usando aliases de usuário sudoers

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

no arquivo sudoers, a User_Aliascontém uma lista de nomes de contas de usuário. O nome de User_Aliaspode então ser usado em uma definição para representar todas essas contas de usuário. Se você deseja alterar os privilégios para essas contas de usuário, você só tem uma linha para editar.

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

sudo visudo

sudo visudo em uma janela de terminal

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

arquivo sudoers com Users_Alias ​​adicionado

Adicione o User_Aliasdigitando:

User_Alias ​​INSTALADORES = harry, mary

Cada elemento é separado por um espaço, não por uma guia. A lógica se divide em:

  • User_Alias : indica visudoque 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.

Agora vamos editar a linha que adicionamos anteriormente para a conta do 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 “INSTALADORES” User_Alias  podem executar o apt-getcomando. Podemos testar isso com Mary, que agora deve conseguir instalar o software.

sudo apt-get install colordiff

sudo apt-get install colordiff em uma janela de terminal

Mary pode instalar o software porque ela está nos “INSTALADORES” User_Alias, e que User_Aliaspossui esses direitos.

Três truques rápidos de sudo

Quando você esquecer de adicionar sudoa um comando, digite

sudo !!

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

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

sudo -k

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

menos /var/log/auth.log

O arquivo /var/log/auth.log em uma janela de terminal

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

Com grande poder …

… Vem a capacidade de delegar partes dela a outras pessoas. Agora você sabe como capacitar outros usuários seletivamente.