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


Cette question a déjà une réponse ici:

Je sais que je peux devenir root (super utilisateur) via le su commande 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


68
2018-05-21 23:39


origine


Pourriez-vous donner un exemple de ce que vous voulez dire? Vous ne cherchez pas seulement sudo command es-tu? - terdon♦
@terdon non je ne suis pas. Je voudrais pouvoir aller super utilisateur en une seule commande sans avoir à faire su -> entrez le mot de passe. Il n'aime pas regarder ceci est une commande valide: su -password - Vader
Cela pourrait être une solution Comment exécuter des commandes sudo spécifiques sans mot de passe? - TuKsn
Cela semblerait être un énorme risque pour la sécurité. Je ne pourrais certainement pas recommander ce plan d'action. - Elder Geek


Réponses:


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

echo 'password' | sudo -S command

le -S le drapeau fait sudo lire le mot de passe de l'entrée standard. Comme expliqué dans man sudo:

-S, --stdin

Écrivez l'invite à 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 courir ls avec sudo privilèges, vous feriez

echo 'password' | sudo -S ls

Notez que cela produira une erreur si votre sudo Le jeton d'accès 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 cela, vous pouvez utiliser -k pour réinitialiser le jeton d'accès:

echo 'password' | sudo -kS ls

Je ne connais aucun moyen de vous faire entrer dans un shell root (comme su ou sudo -i) faire. Cela pourrait être suffisant pour ce dont vous avez besoin.


69
2018-05-21 23:49



Il convient de noter également que cette méthode doit être considérée comme extrêmement peu sûre, car votre mot de passe est écrit dans votre historique et peut également être visible par d'autres utilisateurs via une liste de processus. Je ne suis pas sûr de la taille de la transaction pour un système de bureau mono-utilisateur. - jkt123
La seule utilisation que je peux voir est d'écrire un script qui inclut une commande qui requiert des privilèges root. C'est très mauvais, car le mot de passe est en clair dans le script. - Marc
@Marc et tout le monde, ne raconte pas moi. Je ne l'utilisais jamais et je n'ai aucune idée de la raison pour laquelle l'OP voudrait le faire. Il est extrêmement peu sûr et encombrant et jouer avec les paramètres de timeout des jetons d’accès est bien meilleur. Si vous souhaitez suggérer à l'OP qu'il ne le fait pas, veuillez laisser un commentaire sous la question. Je viens de répondre à la chose, je ne l'accepte pas. - terdon♦
Si vous ne voulez pas que quelque chose soit sauvegardé dans l'historique, ajoutez-le avec un espace. Cela (par défaut) empêchera son enregistrement. - Oli♦
Pour ceux qui lisent cette réponse: s'il te plait ne fais pas ça. Vous n'automatisez pas la saisie du mot de passe - vous éviter la nécessité de mots de passe pour des situations spécifiques. Comme l'autre réponse dit. - mgarciaisaia


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

sudo visudo

et ajouter la ligne suivante à la liste des sudoers

username ALL = NOPASSWD : ALL

Remarque: remplacer Nom d'utilisateur avec ton vrai Nom d'utilisateur dans la ligne ci-dessus.


73
2018-05-22 05:41



Cela semblerait être un énorme risque pour la sécurité. Je ne pourrais certainement pas recommander ce plan d'action. - Elder Geek
@ElderGeek pourquoi? Outre le fait de risquer quelqu'un assis devant votre ordinateur et de faire quelque chose de mal, y a-t-il d'autres implications de sécurité liées à l'ajout username ALL = NOPASSWD : ALL? - brillout
Note: Je devais me déconnecter et me reconnecter avant que la demande de mot de passe ne disparaisse en utilisant cette technique (Mint 17.3) - Cela devrait aussi être placé à la fin de la liste des sudoers ou être bloqué par d’autres paramètres traité ligne par ligne. Aussi, soyez prudent avec ceci sur les systèmes de production (voir le fil 'sudo evil' ci-dessus :) - RyanNerd
Oublier de mettre cette ligne LAST dans sudoers me brûle à chaque fois. METTEZ-LE À LA FIN. - moodboom
Je considérerais l'approche jiminikiz ici une approche plus sûre et plus réfléchie. askubuntu.com/questions/192050/… - Elder Geek


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

Si vous ne devez exécuter qu'une seule commande, par exemple apt-get upgrade, vous pouvez configurer votre système de telle sorte que sudo someCommand Est-ce que ne pas nécessite un mot de passe.

Pour ce faire, lancez 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 pour autant un argument (par exemple sans upgrade dans cet exemple), l'utilisateur sera autorisé à l'exécuter avec tout argument, donc utilisez avec soin.


21
2018-05-22 05:30



Pour plus de sécurité: utilisez cette méthode pour accorder des autorisations à un script de shell en lecture seule. De cette façon, vous pouvez exécuter les commandes dont vous avez besoin uniquement dans le contexte dont vous avez besoin. - Adrian Lopez
Cela semble être la meilleure réponse ici! Je vous remercie - Lockszmith


Vous pouvez le faire aussi:

sudo -S <<< "password" command

10
2018-06-09 14:14



Qu'est ce que <<< signifier? - Ren
@Ren: C'est ce qu'on appelle Ici String - Jahid


Au lieu de supprimer complètement le mot de passe, vous pouvez augmenter le délai d'expiration afin de 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 (remplacer jsmith avec votre nom d'utilisateur).

Defaults:jsmith timestamp_timeout=30

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


6
2018-04-15 08:13





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 de "passer à 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 l’exécution en tant que "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.


1
2018-05-22 09:09