Como controlar o acesso sudo no Linux

O comando sudo permite que você execute comandos no Linux como se você fosse outra pessoa, como o root. sudo também permite controlar quem pode acessar os recursos do root, 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 root

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 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 a qualquer coisa e, praticamente, a qualquer momento.

Claro, qualquer pessoa com acesso à senha do root pode fazer o mesmo. Eles podem causar estragos de forma maliciosa ou acidental. Na verdade, o usuário root 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 efetuar login como root de forma alguma. Faça login com uma conta de usuário normal e use sudo para eleve seus privilégios por um curto período você precisa deles. Freqüentemente, isso é apenas para emitir um único comando.

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 é surpresa. sudo existe 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 comando sudo. Como você tem poderes de sudo, 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 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.

  Como usar o comando xargs no Linux

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 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 faz”.

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

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 do usuário que está executando o comando é Maria.

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
whoami
ls -hl
exit

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 esta é uma sessão para a conta do usuário mary.
O pwdcommand reproteia que você está agora na casa de Maria diretório home.
whoami nos disse que você está usando a conta de usuário mary.
Os arquivos no diretório pertencem à conta de usuário mary.
O comando de saída leva você de volta para sua sessão normal de conta de usuário.

Editando o arquivo sudoers

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

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 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 foi lançado o editor simples nano. No Fedora, o visudo lançou o mais capaz—mas menos intuitivo—Vim.

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

sudo dnf install nano

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

sudo EDITOR=nano visudo

Parece um bom candidato para apelido. O editor nano é aberto com o 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.

  As 5 melhores ferramentas de informação de hardware para Linux

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. Nesse 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.
(TODOS: TODOS): 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 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 usar o 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 do Tom. A opção -a (anexar) adiciona este grupo à lista de grupos em que a conta do usuário já está. Sem esta opção, a conta do usuário tom seria colocada no novo grupo, mas removida de quaisquer outros grupos.

sudo usermod -a -G sudo tom

Vamos verificar em quais grupos Mary está:

groups

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

Vamos verificar com o Tom:

groups

A conta do 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 less /etc/shadow

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

sudo less /etc/shadow

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

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

Dando aos usuários direitos sudo restritos

Tom recebeu direitos totais de 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ê gostaria de entregar. Às vezes, é necessário que um usuário execute uma função que exija privilégios de root, mas não há um caso justificável para que ele tenha acesso total ao sudo. 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 de usuário harry. Ele não está no grupo sudo e não tem privilégios de sudo.

groups

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

sudo visudo

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.

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

harry    ALL=/usr/bin/apt-get

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

  Como jogar Subnautica no Linux

Isso é lido como uma conta de usuário que 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 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 (verificar apenas):

sudo visudo -c

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

sudo apt-get install finger

Os direitos de sudo 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

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 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ário. 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

Scroll down in the file until you come to the User_Alias specification line.


Adicione o User_Alias ​​digitando:

User_Alias INSTALLERS = harry, mary

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

User_Alias: diz ao visudo que 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 de usuário harry:

harry    ALL=/usr/bin/apt-get

Altere-o para que leia:

INSTALLERS    ALL=/usr/bin/apt-get

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

sudo apt-get install colordiff

Maria pode instalar o software porque ela está em “INSTALADORES” User_Alias, e esse User_Alias ​​recebeu esses direitos.

Três truques rápidos de sudo

Quando você se 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 se 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

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

less /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 desligamento como usuário “root”.

Com grande poder …

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