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
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.
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.
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.
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.
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 .
Lire d'autres questions sur les étiquettes command-line sudo su