Como evitar que uma senha seja solicitada pelo sudo? [duplicado]

61

Eu sei que posso me tornar root (super usuário) através do comando su , mas tenho que autorizá-lo depois de inserir os comandos. Existe uma maneira de me tornar root e autorizar (com senha) em uma linha

    
por Vader 22.05.2014 / 01:39

6 respostas

65

Bem, a única coisa em que consigo pensar é

echo 'password' | sudo -S command

A -S flag faz sudo ler a senha da entrada padrão. Conforme explicado em man sudo :

  

-S, --stdin

     

Escreva o aviso para o erro padrão e leia a senha da entrada padrão    em vez de usar o dispositivo terminal. A senha deve ser seguida por um caractere de nova linha.

Portanto, para executar ls com sudo privileges, você faria

echo 'password' | sudo -S ls

Observe que isso produzirá um erro se o seu token de acesso sudo estiver ativo, se você não precisar inserir sua senha porque já fez isso recentemente. Para contornar isso, você pode usar -k para redefinir o token de acesso:

echo 'password' | sudo -kS ls

Não conheço nenhuma maneira de colocar você em um shell raiz real (como su ou sudo -i ). Isso pode ser suficiente para o que você precisa embora.

    
por terdon 22.05.2014 / 01:49
66

No terminal, execute o comando visudo para editar o sudoers file:

sudo visudo

e adicione a seguinte linha à lista sudoers

username ALL = NOPASSWD : ALL

Nota: Substitua username pelo seu UserName real na linha acima.

    
por Din 22.05.2014 / 07:41
20

A solução echo 'password' | sudo -kS ls funciona, mas tem algumas desvantagens de segurança, a maioria das quais já foi mencionada nos comentários para a resposta de terdon. Assim, gostaria de sugerir uma abordagem diferente:

Se for apenas um comando que você precisa executar com frequência, por exemplo, apt-get upgrade , você pode configurar seu sistema de forma que sudo someCommand não não exija uma senha.

Para isso, execute visudo e insira algo semelhante ao seguinte:

myusername ALL=(ALL) NOPASSWD: /usr/bin/apt-get upgrade

Note que se você digitar um comando sem um argumento (por exemplo, sem upgrade neste exemplo), o usuário poderá executá-lo com o argumento any , então use com cuidado.

    
por Heinzi 22.05.2014 / 07:30
8

Você também pode fazer isso:

sudo -S <<< "password" command
    
por Jahid 09.06.2015 / 16:14
5

Em vez de remover a senha completamente, você pode aumentar o tempo limite para que você precise digitá-la apenas algumas vezes por dia. em um terminal, execute:

sudo visudo

No final do arquivo, adicione a seguinte linha para definir um tempo limite de 30 minutos (substitua jsmith pelo seu nome de usuário).

Defaults:jsmith timestamp_timeout=30

Você pode usar qualquer número que quiser; -1 significa que não há tempo limite (solicitado apenas na primeira vez) e 0 significa tempo limite instantâneo (solicitado toda vez que você sudo ). O tempo limite padrão é de 5 minutos.

    
por ShitalShah 15.04.2016 / 10:13
1

Vader, do seu comentário sobre sua pergunta original, você gostaria de mudar para um shell interativo com permissões de superusuário, certo?

O Sudo tem um argumento específico para solicitar um shell:

-s [command]
The -s (shell) option runs the shell specified by the SHELL environment variable if
it is set or the shell as specified in the password database. If a command is
specified, it is passed to the shell for execution via the shell's -c option. If no 
command is specified, an interactive shell is executed.

Isso evita as desvantagens de segurança já mencionadas e permite "ir root" usando o seguinte comando:

sudo -s

SE Eu realmente tenho que executar um shell de root (na maioria dos casos eu não tenho), então eu acho muito útil ter a variável de ambiente HOME do shell definida (para refletir a execução como "root"), isso pode ser feito usando o sinalizador "-H". Então o comando completo seria

sudo -s -H

Você pode encontrar muito mais detalhes na página de manual do sudo .

    
por he1ix 22.05.2014 / 11:09