Arquivo Sudoers, habilite NOPASSWD para usuário, todos os comandos

142

Prefácio

Essa é uma pergunta bastante complexa relacionada ao arquivo Sudoers e ao comando sudo em geral.

NOTA: Fiz essas alterações em uma máquina dedicada executando o Ubuntu Desktop 13.04, que utilizo apenas para fins de aprendizado. Entendo que é um enorme risco de segurança habilitar o NOPASSWD sudo.

Pergunta, questão

Inicialmente, minha única alteração no arquivo sudoers (/ etc / sudoers) foi uma linha, uma especificação do usuário que deveria ter habilitado 'nicholsonjf' para executar todos os comandos com sudo sem precisar digitar uma senha (consulte a linha que começa com 'nicholsonjf '):

# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
nicholsonjf    ALL=NOPASSWD: ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

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

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

No entanto, isso não funcionou, e eu ainda solicitava minha senha toda vez que executava um comando como 'nicholsonjf'. Eu só consegui começar a executar comandos sudo como 'nicholsonjf' depois que removi 'nicholsonjf' dos grupos sudo e admin.

Alguém pode explicar por que isso funcionou?

É porque o usuário 'nicholsonjf' estava herdando os direitos sudo das duas especificações de grupo de 'admin' e 'sudo' (vistos abaixo no arquivo sudoers), que estavam substituindo a especificação do usuário 'nicholsonjf' porque estavam mais abaixo no arquivo de configuração?

James Nicholson
fonte
7
Nota: Todos = NOPASSWD: ALL tem que ser ALL = (ALL) NOPASSWD: ALL ou então ele não funciona ...
André Verwijs

Respostas:

164

A linha que você adicionou foi substituída. De man sudoers:

Quando várias entradas correspondem a um usuário, elas são aplicadas em ordem. Onde há várias correspondências, a última correspondência é usada (que não é necessariamente a correspondência mais específica).

No seu caso, nicholsonjfera um membro do grupo, sudoentão para ele essa linha se aplicava:

%sudo   ALL=(ALL:ALL) ALL

Se você deseja substituir as entradas, /etc/sudoersbasta colocar as novas entradas após elas.

A nova entrada deve se parecer com

myuser ALL=(ALL) NOPASSWD: ALL para um único usuário ou

%sudo ALL=(ALL) NOPASSWD: ALL para um grupo.

pabouk
fonte
6
Para uma solução completa que eu gostaria de ver algo sobre NOPASSWDnessa resposta ...
Daniel Alder
22
Eu acho que a solução deve ser:%sudo ALL=(ALL) NOPASSWD:ALL
Daniel Alder
3
@ DanielAlder: A linha de especificação da pergunta nicholsonjf ALL=NOPASSWD: ALLestá correta. Estava no lugar errado, como expliquei na resposta. ------ A Runasespecificação - no seu caso (ALL)- é opcional. Se você omitir a especificação, poderá executar os comandos roote não poderá usar -ue -gopções de sudo.
Pabouk
Esse é um risco de segurança pior, pois oferece a vários usuários acesso sem senha. Se é o seu PC pessoal, isso não é significativo - talvez. Eu apenas mudaria a linha pessoal, para durar.
Mark Williams
4
Uma adição, em vez de correção, se você estiver usando algo baseado no debian / ubuntu (geralmente pode ser aplicado, não visto em outros lugares). Sua aposta de melhores práticas absoluta é adicionar comandos personalizados a um arquivo em /etc/sudoers.d/ e deixar sudoers próprio para ser gerenciado pelo gerenciador de pacotes.
Aquarion
120

Para um único usuário, adicione esta linha no final do seu sudoersarquivo usandosudo visudo

superuser ALL=(ALL) NOPASSWD: ALL

Para um grupo

%supergroup  ALL=(ALL) NOPASSWD: ALL
Fedir RYKHTIK
fonte
8
Antes de ler esta resposta, eu fiz %sudo ALL=NOPASSWD: ALLe funciona. Eu sou o único que acha realmente difícil a Forma Estendida de Backus-Naur?
Vince
4
@Vince Quando usado seu comando, não posso sudosem senha como usuário sem privilégios de sudo. Por exemplo sudo -u root -i, funciona, mas sudo -u git -inão.
NeverEndingQueue
Essa é uma resposta consideravelmente mais útil do que a aceita, que, embora responda à pergunta do OP, provavelmente não é o que a maioria das pessoas acessa esta página pelo Google.
Mahmoud Al-Qudsi
3

Nunca solicitará que o usuário atual para uma senha quando o usuário utiliza sudofazer

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/dont-prompt-$USER-for-password

isso criará um arquivo chamado /etc/sudoers.d/dont-prompt-<YOUR USERNAME>-for-sudo-passworde significará que o usuário que você executou esse comando como não será solicitado a fornecer sua senha ao executar o sudocomando. Você ainda será solicitada a senha em outros contextos, como a instalação de itens do aplicativo gráfico do Ubuntu Software .

As vantagens de fazê-lo desta maneira em relação à adição da linha no echocomando ao /etc/sudoersuso sudo visudo(conforme sugerido pelas outras respostas) são

  1. /etc/sudoersàs vezes é modificado por atualizações do sistema, enquanto os arquivos /etc/sudoers.dnão são
  2. o sudo visudométodo é propenso a erros (como evidenciado por essa pergunta), enquanto copiar / colar um comando é muito mais difícil de atrapalhar

De acordo com sudo cat /etc/sudoers.d/READMEesse recurso (de colocar arquivos extras do sudoer /etc/sudoers.d) foi ativado por padrão desde o Debian 1.7.2p1-1, lançado no final dos anos 90 (o Ubuntu é baseado no Debian ).

Boris
fonte
(fique à vontade para editar minha resposta, se puder criar um nome de arquivo melhor)
Boris
0

Como Vince foi mencionado em um comentário , você pode usar esta linha:

%sudo ALL=NOPASSWD: ALL

(Isso é diferente das linhas mostradas nessas respostas e resolveu o problema para mim.)

E. Fortes
fonte
@ Eliah, isso não é tão diferente das outras respostas. Tudo o que faz é substituir o espaço reservado supergroupna resposta da Fedir por sudo. A seguir, outro usuário do grupo wheel? Ou qualquer outro grupo que o usuário esteja usando?
Muru
11
@muru "Tudo o que faz é substituir o espaço reservado supergroupna resposta do Fedir por sudo". O que? Substituir supergrouppor sudona linha %supergroup ALL=(ALL) NOPASSWD:ALLproduz %sudo ALL=(ALL) NOPASSWD:ALL, não %sudo ALL=NOPASSWD: ALL.
Eliah Kagan 04/10/19
O que é sem dúvida pior, já que agora o NOPASSWD é apenas para root como o usuário de destino. Portanto, nem sequer responde à pergunta corretamente!
Muru
@ muru O que não é nem discutível , no entanto, é uma substituição de supergroupwith sudo. Esta é a sua própria resposta, não um post de agradecimento ou uma cópia de outra resposta. Mas sim, eu concordo: a menos que eles pretendam isso , isso não será tão bom para a maioria dos usuários quanto os métodos nas outras respostas. (Mas, especialmente considerando a pergunta diz: "todos os comandos," não "a todos os usuários-alvo," Eu não acho que isso está em vigor nem mesmo a tentativa de responder à pergunta que foi feita.)
Elias Kagan
Isso funcionou para mim e eu queria compartilhar com outros usuários :) (remova meu comentário, se desejar).
E. Fortes