Comment éviter d'être invité à saisir un mot de passe par sudo? [dupliquer]

64

Je sais que je peux devenir root (super utilisateur) via la commande su mais je dois l’autoriser après avoir entré les commandes. Y a-t-il un moyen de devenir root et d'autoriser (avec mot de passe) sur une seule ligne

    
posée Vader 22.05.2014 - 01:39
la source

6 réponses

68

La seule chose à laquelle je puisse penser est

echo 'password' | sudo -S command

L'indicateur -S fait que sudo lit le mot de passe de l'entrée standard. Comme expliqué dans man sudo :

  

-S, --stdin

     

Ecrivez l'invite à l'erreur standard et lisez le mot de passe depuis l'entrée standard    au lieu d'utiliser le terminal. Le mot de passe doit être suivi d'un caractère de nouvelle ligne.

Donc, pour exécuter ls avec les privilèges sudo , vous feriez

echo 'password' | sudo -S ls

Notez que cela produira une erreur si votre jeton sudo access est actif, si vous n'avez pas besoin de saisir votre mot de passe car vous l'avez déjà fait récemment. Pour contourner ce problème, vous pouvez utiliser -k pour réinitialiser le jeton d'accès:

echo 'password' | sudo -kS ls

Je ne connais aucun moyen de vous placer dans un shell racine réel (comme su ou sudo -i ). Cela pourrait être suffisant pour ce dont vous avez besoin.

    
réponse donnée terdon 22.05.2014 - 01:49
la source
69

Dans le terminal, exécutez la commande visudo pour modifier le fichier sudoers :

sudo visudo

et ajoutez la ligne suivante à la liste sudoers

username ALL = NOPASSWD : ALL

Remarque: remplacez nom d'utilisateur par votre véritable nom d'utilisateur dans la ligne ci-dessus.

    
réponse donnée Din 22.05.2014 - 07:41
la source
21

La solution echo 'password' | sudo -kS ls fonctionne, mais elle présente quelques inconvénients de sécurité, dont la plupart ont déjà été mentionnés dans la réponse aux commentaires de terdon. Je voudrais donc suggérer une approche différente:

S'il s'agit d'une seule commande que vous devez fréquemment exécuter, par exemple apt-get upgrade , vous pouvez configurer votre système de telle manière que sudo someCommand pas nécessite un mot de passe.

Pour ce faire, exécutez visudo et entrez quelque chose de similaire à ce qui suit:

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

Notez que si vous entrez une commande sans un argument (par exemple sans upgrade dans cet exemple), l'utilisateur sera autorisé à l'exécuter avec un argument any , donc utiliser avec précaution.

    
réponse donnée Heinzi 22.05.2014 - 07:30
la source
10

Vous pouvez aussi le faire:

sudo -S <<< "password" command
    
réponse donnée Jahid 09.06.2015 - 16:14
la source
6

Au lieu de supprimer complètement le mot de passe, vous pouvez augmenter le délai d’expiration pour ne le saisir que quelques fois par jour; dans un terminal, exécutez:

sudo visudo

À la fin du fichier, ajoutez la ligne suivante pour définir un délai d’expiration de 30 minutes (remplacez jsmith par votre nom d’utilisateur).

Defaults:jsmith timestamp_timeout=30

Vous pouvez utiliser n'importe quel numéro que vous voulez; -1 signifie pas de délai d'attente (invité uniquement la première fois) et 0 signifie délai d'attente instantané (demandé chaque fois que vous sudo ). Le délai d'attente par défaut est de 5 minutes.

    
réponse donnée ShitalShah 15.04.2016 - 10:13
la source
1

Vader, à partir de votre commentaire sur votre question initiale, vous souhaitez passer à un shell interactif fonctionnant avec des autorisations super-utilisateur, non?

Sudo a un argument spécifique pour demander un 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.

Cela évite les inconvénients de sécurité déjà mentionnés, et permet d’accéder à la racine en utilisant la commande suivante:

sudo -s

SI je dois vraiment exécuter un shell root (dans la plupart des cas, je ne le fais pas), alors je trouve très utile d’avoir la variable d’environnement HOME du shell définie pour refléter comme "root"), cela peut être fait en utilisant le drapeau "-H". Donc, la commande complète serait

sudo -s -H

Vous pouvez trouver beaucoup plus de détails dans la page de manuel de sudo .

    
réponse donnée he1ix 22.05.2014 - 11:09
la source

Lire d'autres questions sur les étiquettes