Como controlar o acesso sudo no Linux
Publicados: 2022-01-29 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.
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
.
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 inicialmary's
. -
whoami
nos diz que você está usando a conta de usuáriomary
. - 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.
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.
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 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
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
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.
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.
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á umUser_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:
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
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.