Tux Zine banner
Article Thumbnail

Sudo sem password

📅 Qua, 9 jul 2014, 14:13 👤 Nerun


O comando sudo, muito comum em sistemas operacionais do tipo 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.

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 possam 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/:

$ sudoedit /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

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

🔝