Páginas

quarta-feira, 9 de julho de 2014

12. Sudo sem password

O comando sudo, muito comum em sistemas operacionais Unix, permite a usuários comuns obter privilégios de outro usuário, em geral o super usuário, para executar tarefas específicas dentro do sistema de maneira segura e controlável pelo administrador. O nome é uma forma abreviada de se referir a substitute user do (fazer substituição do usuário) ou super user do (fazer como super usuário).

Em qualquer operação que use sudo, é preciso digitar a senha de usuário. Aprenderemos agora a usar o sudo sem ter que digitar senha.

Este artigo foi revisado em 03/06/2023.

Atualmente, a forma correta de se fazer isso é criar um arquivo dentro da pasta /etc/sudoers.d/, isso porque o arquivo /etc/sudoers inclui uma linha que reconhece e adiciona ao sudoers os arquivos que estejam naquela pasta:

# See sudoers(5) for more information on "@include" directives:
@includedir /etc/sudoers.d

Todos os usuários

A ideia é nunca alterar esse arquivo para envitar problemas. No entanto, se você quiser que TODOS os usuários do seu sistema possa usar o sudo sem senha, então não há opção, você terá que editar o arquivo /etc/sudoers diretamente:

$ sudo visudo

Procure pelas linhas:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Altere para:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) NOPASSWD:ALL

Salve e saia. Nem precisa reiniciar.

Apenas um usuário específico (ou grupo)

No entanto, se você quiser que apenas um usuário possa usar sudo sem password, geralmente você mesmo, crie um arquivo com seu nome em /etc/sudoers.d/:

$ sudo nano /etc/sudoers.d/usuario

Onde "usuario" é seu nome de usuário. No arquivo escreva:

# Permite ao "usuario" executar qualquer comando sem digitar a senha
usuario   ALL=(ALL:ALL) NOPASSWD:ALL

Você pode desejar opções menos "livres", já que digitar senha pra sudo é uma questão de segurança que visa evitar que outros usuários "destruam" o seu sistema. Por exemplo, pode ser útil atualizar o sistema sem ter que entrar a senha, mas ainda exigindo que, para qualquer outra coisa que precise de permissões de superusuário, a senha continue sendo necessária:

# Permite ao "usuario" atualizar o sistema sem digitar a senha
usuario   ALL=NOPASSWD:/usr/bin/apt-get

Para um grupo de usuários, basta adicionar o "%" na frente do nome. Por exemplo, se seu sistema possui um grupo de usuários chamado "visitantes", você colocaria:

# Permite aos "visitantes" atualizarem o sistema sem digitar a senha
%visitantes   ALL=NOPASSWD:/usr/bin/apt-get

Pequenos esclarecimentos

Mas o que significam todos esses "ALL"?

ALL=(ALL:ALL)
|     |   |
|     |   `> grupos
|     |
|     `> usuários
|
`> host (máquina, aquele nome depois de @ no terminal)

Traduzindo: o "usuario", em "todas as máquinas" tem permissão para executar comandos como "todos os usuários" do sistema, e como "todos os grupos".

Perceba que, no segundo caso, do apt apenas, eu omiti o (ALL:ALL), isso porque quem atualiza um sistema pode fazê-lo como si mesmo, não precisa logar como outro usuário.

A página de manual do sudoers (man sudoers) descreve isso em grande detalhe. O formato geral é:

user_spec host_spec=(runas_spec) NOPASSWD:cmd_spec
  • user_spec identifica quais usuários podem usar a regra.
  • host_spec identifica em quais hosts as regras se aplicam. É opcional, e quando omitido o padrão é ALL.
  • runas_spec identifica como quais usuários os comandos podem ser executados.
  • NOPASSWD: ou PASSWD: tag que especifica se uma senha é necessária. É opcional, e quando omitido o padrão é PASSWD, a não ser que o padrão tenha sido alterado nas configurações do sudoers.
  • cmd_spec identifica para quais comandos a regra pode ser executada.

É comum usar aliases para várias especificações. Cada especificação tem uma alias predefinida ALL, que é autoexplicativa ("all" = "todos" em inglês).

Nenhum comentário:

Postar um comentário