
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
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:
ouPASSWD:
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).