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
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.
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.
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.
Vous pouvez le faire aussi:
Sudo -S <<< "password" command
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 jsmith
par 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 Sudo
name__). 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 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 .