Questão Como executar o comando sudo sem senha?


Como é que ubuntu usuário nas imagens da AWS para o Ubuntu Server 12.04 tem senha sudo para todos os comandos quando não há configuração para ele em /etc/sudoers?

Estou usando o servidor Ubuntu 12.04 na Amazon. Eu quero adicionar um novo usuário que tenha o mesmo comportamento que o usuário padrão do Ubuntu. Especificamente eu quero sem senha sudo para este novo usuário.

Então, adicionei um novo usuário e fui editar /etc/sudoers (usando visudo claro). Da leitura desse arquivo parecia o padrão ubuntu usuário estava ficando sem senha sudo de ser um membro da admin grupo. Então eu adicionei meu novo usuário a isso. Que não funcionou. Então eu tentei adicionar o NOPASSWD directiva para sudoers. Que também não funcionou.

De qualquer forma, agora estou apenas curioso. Como é que ubuntu usuário obter privilégios sem senha, se eles não são definidos em /etc/sudoers. Qual é o mecanismo que permite isso?


199
2017-09-23 09:30


origem


Relacionado: Execute sudo sem senha? - Eliah Kagan


Respostas:


Ok, eu descobri a resposta, então também pode colocá-la aqui por completo. No fim de /etc/sudoers existe o que eu pensei ser apenas um comentário:

#includedir /etc/sudoers.d

No entanto, isso realmente inclui o conteúdo desse diretório. Dentro do qual é o arquivo /etc/sudoers.d/90-cloudimg-ubuntu. Qual tem o conteúdo esperado

# ubuntu user is default user in cloud-images.
# It needs passwordless sudo functionality.
ubuntu ALL=(ALL) NOPASSWD:ALL

Então é aí que reside a configuração do sudo para o usuário padrão do ubuntu.

Você deve editar este arquivo usando visudo. O comando a seguir permitirá que você edite o arquivo correto com visudo.

sudo visudo -f /etc/sudoers.d/90-cloudimg-ubuntu

E adicione uma linha como:

aychedee ALL=(ALL) NOPASSWD:ALL

No fim.


292
2017-09-23 10:27



Tenho certeza que tive que fazer uma reinicialização completa. - aychedee
novas regras sudo serão usadas para cada novo usuário logado - então você precisa fazer login no mínimo - bluszcz
'sudo service sudo restart' funciona :) - Laice
Em versões posteriores (14.04 por exemplo) o arquivo incluído é /etc/sudoers.d/90-cloud-init-users (então para editar .. sudo visudo -f /etc/sudoers.d/90-cloud-init-users). Embora seja mais limpo criar arquivos adicionais do que editar o gerado. Note que os arquivos contendo um . ou terminando em ~vai não ser incluido. - Molomby
@ Phil_1984_ Provavelmente, ele foi adicionado como um comentário para permitir a compatibilidade com outras versões (padrão?) Do sudo, que não permitem includes, mas não seriam prejudicadas por um comentário estranho. (Padrões são difíceis! ;-) - jpaugh


Descobri que a coisa mais direta a ser feita, para replicar facilmente esse comportamento em vários servidores, era a seguinte:

sudo visudo

Altere esta linha:

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

para esta linha:

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

E mova-o sob está linha:

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

Agora você deve ter isto:

# 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

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

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

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

#includedir /etc/sudoers.d

então para todo usuário que precisa de acesso ao sudo COM uma senha:

sudo adduser <user> sudo

e para todos os usuários que precisam de acesso ao sudo SEM senha:

sudo adduser <user> admin

e finalmente, execute isto:

sudo service sudo restart

E é isso!

Editar: Você pode ter que adicionar o grupo de administradores, pois não acredito que exista por padrão.

sudo groupadd admin

Você também pode adicionar o padrão AWS ubuntu usuário para o admin grupo através deste comando:

sudo usermod ubuntu -g admin

77
2018-04-03 21:45



Nota para si: é uma convenção para mover permissões menos restritivas para baixo na pilha. Mas não fazer isso não afetará a funcionalidade. - poweratom
Como jiminikiz explicou, eu tive que colocar o % admin depois de % sudo no meu Ubuntu GNOME 16.04 LTS. Além disso, o ID do grupo de administradores não é exatamente admin mas adm no meu Ubuntu. Nenhuma reinicialização foi necessária. - hata


Resposta curta sem usar nenhum editor (testado no bash, muito arriscado para executar em hosts remotos).

Configure o sudo para funcionar sem uma senha para o usuário atual:

echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers

Verifique a edição com:

sudo visudo -c

Verifique se você pode usar o sudo sem uma senha:

sudo cat /etc/sudoers | grep "$USER"

... ou simplesmente tente com:

sudo <qualquer coisa>

-1
2017-08-13 22:25



Este é um conselho muito perigoso ... copie e cole isto errado e você irá se trancar para fora do seu próprio servidor. Daí o conselho para usar visudo. Ele verifica se a sintaxe está correta antes de salvar no disco. Então, para quem quer usar isso. Não faça isso em um servidor remoto com o qual você se importa. Você pode querer incluir um aviso sobre isso em sua resposta. - aychedee
Não usar visudo é um horrível idéia. Confie em mim, eu sei. - Bailey S
IMHO, um copy-paste é mais seguro que uma edição manual. Uma pequena simplificação: echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers - theartofrain
@theartofrain - Normalmente, eu concordaria, mas visudo É particularmente bom não permitir que você quebre o arquivo sudoers, portanto, não trava você para fora da sua máquina (ou pelo menos sudo). - Jon V
@JonV Você pode perder os direitos de administrador por meio de visudo também, mas geralmente não por acidente, porque visudo salva apenas mudanças que são bem formadas de acordo com a gramática para arquivos sudoers. A maioria erros estão sintaticamente errados, então eles não causam nenhum dano visudo. E se /etc/sudoers ou um arquivo em /etc/sudoers.d  é mal formado sudo recusa-se a elevar privilégios para qualquer pessoa como medida de segurança, e é por isso que não visudo é perigoso. (Apesar as vezes pkexec pode consertar sem uma reinicialização.) - Eliah Kagan