web-dev-qa-db-fra.com

Comment éviter de se voir demander un mot de passe par sudo?

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

78
Vader

Eh bien, la seule chose à laquelle je peux penser est

echo 'password' | Sudo -S command

L'indicateur -S permet à Sudo de lire le mot de passe à partir de l'entrée standard. Comme expliqué dans man Sudo:

-S, --stdin

Écrivez l'invite sur l'erreur standard et lisez le mot de passe à partir de 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 d'accès Sudo est actif, si vous n'avez pas besoin de saisir votre mot de passe car vous l'avez déjà fait récemment. Pour résoudre 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 suffire à vos besoins.

76
terdon

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 le nom d'utilisateur par votre nom d'utilisateur réel dans la ligne ci-dessus.

82
Din

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

S'il ne s'agit que d'une commande à exécuter fréquemment, par exemple apt-get upgrade, vous pouvez configurer votre système pour que Sudo someCommand ne pas nécessite un mot de passe.

Pour ce faire, exécutez visudo et entrez quelque chose de similaire au suivant:

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 l'argument tout, utilisez-le donc avec précaution.

25
Heinzi

Vous pouvez le faire aussi:

Sudo -S <<< "password" command
12
Jahid

Au lieu de supprimer complètement le mot de passe, vous pouvez augmenter le délai d’attente de sorte que vous n’ayez à le taper que quelques fois par jour; dans un terminal, lancez:

Sudo visudo

À la fin du fichier, ajoutez la ligne suivante pour définir un délai d'attente de 30 minutes (remplacez jsmithpar votre nom d'utilisateur).

Defaults:jsmith timestamp_timeout=30

Vous pouvez utiliser le nombre que vous voulez; -1 signifie pas de délai d'attente (invité seulement la première fois), et 0 signifie délai immédiat (invité à chaque fois que vous Sudoname__). Le délai d'attente par défaut est de 5 minutes.

7
Shital Shah

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

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 de "passer à la racine" en utilisant la commande suivante:

Sudo -s

SI Je dois vraiment exécuter un shell racine (dans la plupart des cas, ce n'est pas le cas), alors je trouve très utile d'avoir l'environnement HOME variable du shell définie en conséquence (pour refléter l'exécution en tant que "racine"), vous pouvez le faire 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 man de Sudo .

1
he1ix