Executar sudo sem senha?

292

Inspirado por esta pergunta ....

Eu sou a única pessoa que usa meu sistema com a versão 12.04.
Toda vez que eu emito um sudocomando; o sistema solicita a senha do usuário (o que é bom à sua maneira).
No entanto, eu estava pensando; sem ativar a conta raiz ; como posso executar os comandos sudo que não solicitarão a senha do usuário para autenticação.

NOTA: Desejo executar o comando sudo sem autenticar via senha; somente quando eles são executados via terminal.
Não quero remover essa camada extra de segurança de outras funções, enquanto estiver usando o 'Ubuntu software center' ou executando um script bash arrastando e soltando o arquivo something.sh no terminal.

Bhavesh Diwan
fonte
2
então você só quer ser solicitada a senha no terminal e para outras coisas não, ou o contrário? em ambos os sentidos, eu acho que é uma violação de alta segurança
Dr_Bunsen
Eu quero que o sistema não possa pedir senha apenas quando estiver no terminal ... para qualquer outra finalidade, o sistema deve solicitar uma senha. Esse requisito é apenas temporário e deve ser usado durante a configuração de n servidores novos .. durante instalações novas do servidor, são necessárias muitas horas de configuração com os comandos sudo .. a emissão de senha a cada 15 minutos. é dor de cabeça. Eu não quero usar a conta root.
Bhavesh Diwan
Você precisa ler a discussão em: askubuntu.com/questions/135428/…
david6
1
Com certeza você pode prolongar o tempo limite. Além disso, se você estiver fazendo frequentemente novas configurações de servidor, pense em automatizar o processo. Você não é pago para digitar, é pago para resolver problemas e realizar tarefas *.
MauganRa

Respostas:

82

sudo -i é o caminho a percorrer, se você não quiser digitar uma senha a cada 10 minutos enquanto faz modificações no sistema (ou em outros sistemas) e não deseja modificar nenhum arquivo do sistema.

Isso fará com que você faça o root usando sua sudosenha de usuário. Quando você fecha o console ou digita exitque está de volta ao seu usuário normal.

Bruno Pereira
fonte
2
Será verdade que digito a senha apenas uma vez ... e até o momento em que não saio; tempo 5 hrs. ou 15 .... o sistema não solicitará autenticação por senha quando qualquer comando sudo for emitido.
Bhavesh Diwan
2
@ Z9iT até você digitar exitou até fechar a janela do emulador de terminal.
Bruno Pereira
2
Obrigado .. Aceitou esta resposta porque ele serve o objetivo de emitir comandos sudo sem autenticação de senha por n horas até o momento em que não sairemos. Não modificar arquivos do sistema é uma vantagem.
Bhavesh Diwan
3
Isso realmente não responde à pergunta, porque você ainda precisa digitar a senha para se tornar root nesse ponto.
Adam F
2
Não, se você estiver executando uma máquina virtual em um ambiente seguro e quiser que algo seja feito imediatamente e não queira lidar com senhas. Esta resposta não responde à pergunta, embora seja uma informação sem dúvida útil. Eu concordo com Adam F
Jonathan Komar
573

Você pode configurar sudopara nunca solicitar sua senha.

Abra uma janela do Terminal e digite:

sudo visudo

Na parte inferior do arquivo, adicione a seguinte linha:

$USER ALL=(ALL) NOPASSWD: ALL

Onde $USERestá o seu nome de usuário no seu sistema. Salve e feche o arquivo sudoers (se você não alterou o editor de terminal padrão (você saberá se tem), pressione ctl + x para sair nanoe solicitará que você salve).

A partir do Ubuntu 19.04, o arquivo agora deve parecer algo como

#
# 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:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) 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

YOUR_USERNAME_HERE ALL=(ALL) NOPASSWD: ALL

Depois disso, você pode digitar sudo <whatever you want>uma janela do Terminal sem ser solicitada a senha.

Isso se aplica apenas ao uso do sudocomando no terminal. Sua senha ainda será solicitada se você (por exemplo) tentar instalar um pacote a partir do centro de software

prompt de senha da GUI

Octávio Filipe Gonçalves
fonte
15
É recomendável usar em sudo visudovez de editá-lo diretamente. A alteração das permissões dos sudoers também pode ser bloqueada. Ao editar com vim, use :wq!para gravar em arquivos somente leitura e saia do editor. Dessa forma, as permissões 644 não são necessárias.
Lekensteyn
8
Esse é um sério risco à segurança, qualquer pessoa que esteja assumindo uma conta com direitos sudo pode assumir o controle de todo o sistema e bloquear qualquer acesso adicional a este computador, não sendo recomendado seriamente.
Bruno Pereira
6
@ wil93 você está perdendo o objetivo: um script que sudo install crapwaresolicite não solicitará uma senha nesse caso e poderá atrapalhar tudo o que você possui, e você não precisa estar fisicamente próximo a uma máquina para distribuir scripts da última vez que verifiquei. .. Este é apenas um exemplo.
Bruno Pereira
12
@BrunoPereira Se você planeja executar scripts não confiáveis, esse é o risco à segurança (mesmo que o sudo solicite uma senha, um script malicioso sempre pode rm -rf ~atrapalhar algumas coisas). No geral, eu não chamaria de «grave risco de segurança» a simples remoção do prompt de senha do sudo.
wil93
5
Concorde com @ wil93. Ao executar um script não confiável, inserir senha não é mais que uma chance de cancelar o processo, enquanto duvido que seja inútil para a maioria das pessoas. O ponto é que você sabe de onde o script é e o que ele faz.
Chad
36

Os tempos limite do sudo raiz são a maneira mais fácil e segura de fazer isso. Apresentarei todos os exemplos, mas esteja avisado de que é muito arriscado qualquer maneira de fazer isso, embora seja muito mais seguro:

sudo visudo

Isso abre um editor e aponta para o arquivo sudoers - o Ubuntu usa como padrão nano, outros sistemas usam o Vi. Agora você é um superusuário editando um dos arquivos mais importantes do seu sistema. Sem estresse!

(Vi instruções específicas anotadas com (vi!) . Ignore-as se estiver usando o nano.)

Use as setas do teclado para ir para o final da Defaultslinha.

(vi!) pressione a tecla A (maiúscula "a") para mover-se no final da linha atual e entrar no modo de edição (acrescente o último caractere na linha).

Agora digite:

,timestamp_timeout=X

onde X é a expiração do tempo limite em minutos. Se você especificar 0, sempre será solicitada a senha. Se você especificar um valor negativo, o tempo limite nunca expirará. Por exemplo Defaults env_reset,timestamp_timeout=5.

(vi!) pressione Escape para retornar ao modo de comando. Agora, se você estiver satisfeito com sua edição, digite :w Enterpara escrever o arquivo e :q Entersair do vi. Se você cometeu um erro, talvez a maneira mais fácil seja refazer desde o início, sair sem salvar (pressione Escapepara entrar no modo de comando) e digite: q! Enter.

Pressione Ctrl+ e X, em seguida Y, Enterpara salvar seu arquivo e sair do nano.

Você pode querer ler as páginas de manual do sudoers e vi para obter informações adicionais.

man sudoers
man vi

Redefina o valor do tempo limite usando:

sudo -k

Estas instruções são para remover a solicitação de senha ao usar o comando sudo. O comando sudo ainda precisará ser usado para acesso root.

Edite o arquivo sudoers

Abra uma janela do terminal. Digite sudo visudo. Adicione a seguinte linha ao END do arquivo (se não estiver no final, pode ser anulado por entradas posteriores):

<username> ALL=NOPASSWD: ALL

Substitua <username>pelo seu nome de usuário (sem o <>). Isso pressupõe que o Ubuntu tenha criado um grupo com o mesmo nome que o seu nome de usuário, o que é típico. Você pode usar alternadamente os usuários do grupo ou qualquer outro grupo em que você esteja. Apenas verifique se você está nesse grupo. Isso pode ser verificado em Sistema -> Administração -> Usuários e Grupos.

Exemplo:

michael ALL=NOPASSWD: ALL

Digite ^ X ( Ctrl+ X) para sair. Isso deve solicitar uma opção para salvar o arquivo, digite Y para salvar.

Efetue logout e, em seguida, efetue login novamente. Agora, você deve executar o comando sudo sem ser solicitada uma senha.

A conta raiz

Ativando a conta raiz

Habilitar a conta raiz raramente é necessário. Quase tudo que você precisa fazer como administrador de um sistema Ubuntu pode ser feito via sudo ou gksudo. Se você realmente precisa de um logon root persistente, a melhor alternativa é simular um shell de logon root usando o seguinte comando:

sudo -i

No entanto, se você deve habilitar logins raiz, pode fazê-lo assim:

sudo passwd root

Desativando sua conta root

Se, por algum motivo, você ativou sua conta root e deseja desativá-la novamente, use o seguinte comando no terminal:

sudo passwd -dl root

Sudo do grupo em todo o sistema

root$ echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Faça logoff e, em seguida, volte.

Redefinir o tempo limite do sudo

Você pode garantir que o sudo solicite a senha da próxima vez executando:

sudo -k
user209328
fonte
Eu postei isso antes de eu adicionei, para uma grande maneira sistema de fazer isso e outros lêem aqui:
user209328
Essa foi uma resposta tardia, mas é a mais abrangente em termos de opções que ela oferece.
21417 jenming
1
Hmm, no Ubuntu 18.04 MATE isso funciona perfeitamente, ao fazer o mesmo no Ubuntu 18.04 GNOME me causou rugas com o problema "o nome de usuário não está no arquivo sudoers ...". Agora, é por isso que tantas pessoas simplesmente odeiam o linux - porque raramente é "causal": D Apenas no caso de você encontrar o mesmo ... É assim que você resolve o problema: tecmint.com/…
Peter
A variável de ambiente EDITOR pode definir o editor usado ... por exemplo, sudo env EDITOR=/bin/nano visudopara editar de forma confiável sudoersno nano. (update-alternatives pode ser usado para definir o editor também)
Gert van den Berg
29

A maneira preferida de conceder permissões individuais (ou em grupo) seria adicionar arquivos em /etc/sudoers.d

Isso separa as alterações locais da política padrão e economiza tempo, caso o arquivo dos sudoers de distribuição seja alterado.

Para tornar o usuário conectado no momento um sudoer e sudonão solicitar uma senha, use

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

isso criará um arquivo chamado /etc/sudoers.d/$USER(onde $USERestá o nome de usuário do usuário em que você efetuou login como quando executou esse comando), deixando claro quais usuários recebem permissão.

Se você quiser fazer isso para um usuário diferente, substitua as duas instâncias $USERpor outro nome de usuário no comando acima.

echo "otheruser ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/otheruser

Da mesma forma, um arquivo pode ser usado para gerenciar várias diretivas:

echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/local

Veja /etc/sudoers.d/READMEe man sudoerspara mais informações.

user1656671
fonte
o comando echo falhou, embora eu seja root. mas, eu adicionei o arquivo e editado diretamente e isso funcionou na mais recente ubuntu (enquanto acrescentando ao usuário as sudoers diretamente não!)
scape
1
O caminho certo é fazê-lo com teecomando.
Wo
1
Esta é a maneira melhor que funciona sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)'sudo chmod 440 /etc/sudoers.d/$(logname)
:,
No sudo ... >fileshell, o redirecionamento é executado no shell original, portanto, poderia funcionar apenas no shell raiz.
Konstantin Pelepelin
o método tee, sem problemas de permissão:echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/username
Carson Ip 27/11
7

Nice one-liner para remover as instruções do sudo para o usuário atual

sudo bash -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo)'
Eric Landry
fonte
2
Eu acho que você poderia simplesmente fazer:, echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo env EDITOR="tee -a" visudovisudoprecisa sudoafinal de contas (e nem envserá necessário na configuração padrão, IIRC).
Muru
há tantas coisas que podem dar errado aqui (todas, erro do usuário, é claro), que é preferível, na minha humilde opinião, editar o arquivo sudoer diretamente ( sudo visudo), enquanto testa o resultado (com o editor ainda aberto), para os novos usuários que podem ficar tentados a experimentar esse "one-liner".
22616 Michael
Obrigado pelo feedback! Eu estava tentando rapidamente executar o script da remoção do prompt da senha sudo nas minhas VMs de teste voláteis. Sinta-se livre para sugerir melhorias :)
Eric Landry
Você ainda precisa sudo chmod 440 /etc/sudoers.d/$(logname)corrigir as permissões de arquivo, conforme indicado no README desse diretório.
#
6

Claro que o que você quer fazer não é recomendado. Depois de um tempo, embora a entrada sudose torne tão automática que sua utilidade diminua.

Outra abordagem é deixar o arquivo sudoers como está e, enquanto faz algo complicado para os seus centenas de servidores, entre sudo bash. Isso fornecerá um shell que será autenticado como root até você sair dele.

John S Gruber
fonte
12
sudo -sou sudo -iprovavelmente são idéias melhores do que sudo bash, porque garantem que o ambiente seja saudável e outras coisas.
Darael
2
"sanidade e coisas" geralmente não estão no campo das "melhores idéias", alguém poderia dar uma explicação técnica sobre por que o sudo -s ou o sudo -i é melhor do que o sudo bash? (Edit: Aqui está uma questão relevante askubuntu.com/questions/376199/... )
Nuzzolilo
2
vários sudocomandos (especialmente pensando em sudo pip ...) requerem sudo -H(defina HOME) para que o comando seja executado corretamente. Em outros casos, sudo -E(preservar env) pode ser necessário. A execução sudo bashprovavelmente funcionará na maioria dos casos, mas não em todos, e quando não funcionar, não ficará claro o porquê.
22616 Michael
1
sudo su é a maneira tradicional de alternar funções e começar a atuar como administrador de sistemas.
precisa saber é o seguinte
3

Do Superusuário vem uma boa resposta:

Use a opção -S que lê a senha de STDIN:

echo <password> | sudo -S <command>

Substitua <password>por sua senha.

WinEunuuchs2Unix
fonte
2
Isso não é sugerido, porque a senha permanece em cleartype no arquivo de histórico do shell. Aplique qualquer outra solução.
HappyCactus
1
@HappyCactus você pode colocar uma vez o espaço na frente echopara que não apareça na história?
WinEunuuchs2Unix
Sim, isso evitará expor a senha de texto não criptografado ao arquivo de histórico. Mas você sempre se lembra de adicioná-lo? :-)
HappyCactus 5/11
@HappyCactus Eu costumo adicionar espaço de liderança por acidente e depois fico irritado quando a história não pode ser lembrada :) De qualquer forma, o Super Usuário tem 129 votos positivos, então eu acho que é uma boa resposta para sair daqui. As pessoas lerão nossos comentários e conhecerão os riscos e as etapas de aversão ao risco.
WinEunuuchs2Unix
Eu concordo totalmente. Tenha um bom dia!
21918 HappyCactus
2

Um forro

sudo sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g'

upteryx
fonte
2

Esta é uma solução de uma linha que também altera as permissões de arquivos, conforme indicado em /etc/sudoer.d/README:

sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)' & sudo chmod 440 /etc/sudoers.d/$(logname)
paradroid
fonte
0
  • Expandindo a ideia @upteryx.

  • Foi assim que implementei o usuário não raiz e sem senha em uma imagem efêmera do Docker para uso em um pipeline do CICD:

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
    sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' && \
    echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id
Seth Bergman
fonte