Exécuter sudo sans mot de passe?

292

Inspiré par cette question ....

Je suis la seule personne à utiliser mon système avec 12.04.
Chaque fois que je lance une sudocommande; le système demande le mot de passe de l'utilisateur (qui est correct à sa manière).
Cependant je pensais; sans activer le compte root ; comment puis-je exécuter les commandes sudo qui ne demanderont pas le mot de passe de l'utilisateur pour s'authentifier.

REMARQUE: Je souhaite exécuter la commande sudo sans authentification via un mot de passe. seulement quand ils sont exécutés via un terminal.
Je ne souhaite pas supprimer cette couche de sécurité supplémentaire d'autres fonctions, telles que l'utilisation du 'centre logiciel Ubuntu' ou l'exécution d'un script bash en faisant glisser un fichier quelque chose.sh sur le terminal.

Bhavesh Diwan
la source
2
donc vous voulez seulement qu'on vous demande le mot de passe dans le terminal et d'autres choses non, ou l'inverse?! dans les deux sens, je pense que c'est une faille de haute sécurité
Dr_Bunsen
Je veux que le système ne demande pas de mot de passe uniquement lorsque vous vous trouvez dans le terminal ... à toute autre fin, le système doit demander un mot de passe. Cette exigence est seulement temporaire, et pour être utilisée lors de la configuration de nouveaux serveurs .. lors de nouvelles installations de serveurs, cela prend vraiment des heures de configuration avec les commandes sudo .. en émettant un mot de passe toutes les 15 minutes. est le mal de tête. Je ne veux pas utiliser de compte root.
Bhavesh Diwan
Vous avez besoin de lire la discussion: askubuntu.com/questions/135428/...
david6
1
Bien sûr, vous pouvez prolonger le délai d'attente. En outre, si vous effectuez fréquemment de nouvelles configurations de serveur, vous devez envisager d'automatiser le processus. Vous n'êtes pas payé pour taper, vous êtes payé pour résoudre des problèmes et pour que votre travail soit terminé.
MauganRa

Réponses:

82

sudo -i est le chemin à suivre si vous ne voulez pas saisir un mot de passe toutes les 10 minutes tout en apportant des modifications à votre système (ou à d’autres systèmes) et que vous ne souhaitez modifier aucun fichier système.

Il vous basculera vers la racine en utilisant votre sudomot de passe utilisateur, lorsque vous fermez la console ou tapez que exitvous revenez à votre utilisateur normal.

Bruno Pereira
la source
2
Est-ce vrai que je ne saisis le mot de passe qu'une seule fois ... et jusqu'au moment où je ne quitte pas; météo 5 heures ou 15 .... le système ne demandera pas d'authentification par mot de passe lorsqu'une commande sudo est émise.
Bhavesh Diwan
2
@ Z9iT jusqu'à ce que vous tapiez exitou fermiez la fenêtre de l'émulateur de terminal.
Bruno Pereira
2
Merci .. Acceptée cette réponse car elle sert à émettre des commandes sudo sans authentification par mot de passe pendant n-heures jusqu'à l'heure à laquelle nous ne quitterons pas .. Ne pas modifier les fichiers système est un plus.
Bhavesh Diwan le
3
Cela ne répond pas vraiment à la question, car vous devez toujours entrer le mot de passe pour devenir root à ce moment-là.
Adam F
2
Pas si vous exécutez une machine virtuelle dans un environnement sécurisé et que vous voulez juste que la chose fasse quelque chose immédiatement et que vous ne vouliez pas gérer les mots de passe. Cette réponse ne répond pas à la question, alors que ce sont des informations utiles. Je suis d'accord avec Adam F
Jonathan Komar
573

Vous pouvez configurer sudopour ne jamais demander votre mot de passe.

Ouvrez une fenêtre de terminal et tapez:

sudo visudo

Au bas du fichier, ajoutez la ligne suivante:

$USER ALL=(ALL) NOPASSWD: ALL

$USERest votre nom d'utilisateur sur votre système. Enregistrez et fermez le fichier sudoers (si vous n'avez pas modifié votre éditeur de terminal par défaut (vous le saurez si vous en avez un), appuyez sur ctl + x pour quitter nanoet cela vous invitera à enregistrer).

À partir d’Ubuntu 19.04, le fichier devrait maintenant ressembler à quelque chose comme:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults    env_reset
Defaults    mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

YOUR_USERNAME_HERE ALL=(ALL) NOPASSWD: ALL

Ensuite, vous pouvez taper sudo <whatever you want>dans une fenêtre de terminal sans être invité à entrer le mot de passe.

Ceci s'applique uniquement à l'utilisation de la sudocommande dans le terminal. Vous serez toujours invité à entrer votre mot de passe si vous essayez (par exemple) d'installer un package à partir du centre de logiciel.

invite de mot de passe

Octávio Filipe Gonçalves
la source
15
Il est recommandé d'utiliser sudo visudoau lieu de le modifier directement. Changer également les permissions des sudoers peut vous bloquer. Lors de l'édition avec vim, utilisez :wq!pour écrire dans des fichiers en lecture seule et quitter l'éditeur. De cette façon, les autorisations 644 ne sont pas nécessaires.
Lekensteyn
8
Il s’agit d’un risque grave pour la sécurité. Toute personne qui prend en charge un compte disposant de droits Sudo peut prendre le contrôle de l’ensemble du système et verrouiller tout accès ultérieur à cet ordinateur, ce qui n’est pas recommandé.
Bruno Pereira
6
@ wil93 vous manquez le point: un script qui demande sudo install crapwarene demandera pas de mot de passe dans ce cas et pourrait tout gâcher, et vous n'avez pas besoin d'être physiquement à côté d'une machine pour distribuer les scripts la dernière fois que j'ai vérifié. .. C'est juste un exemple.
Bruno Pereira
12
@BrunoPereira Si vous prévoyez d'exécuter des scripts non fiables alors que est le risque pour la sécurité (même si sudo demande un mot de passe, un script malveillant peut toujours faire rm -rf ~déconner pas mal de choses). Globalement, je n’appellerais pas «risque de sécurité grave» la simple suppression du mot de passe de sudo.
wil93
5
D'accord avec @ wil93. Lorsque vous exécutez un script non approuvé, la saisie du mot de passe n’est plus qu’une chance d’annuler le processus, alors que je doute que cela soit inutile pour la plupart des gens. Le fait est que vous savez d'où vient le script et ce qu'il fait.
Tchad
36

Les délais d’exécution Root Sudo sont le moyen le plus simple et le plus sûr de le faire. Je vais exposer tous les exemples, mais sachez que cette façon de procéder est très risquée, bien qu'elle soit beaucoup plus sûre:

sudo visudo

Cela ouvre un éditeur et le pointe vers le fichier sudoers - Ubuntu utilise par défaut nano, d’autres systèmes utilisent Vi. Vous êtes maintenant un super utilisateur qui édite l'un des fichiers les plus importants de votre système. Pas de stress!

(Instructions spécifiques pour Vi notées avec (vi!) . Ignorez-les si vous utilisez nano.)

Utilisez les touches fléchées pour aller à la fin de la Defaultsligne.

(vi!) appuyez sur la touche A (majuscule "a") pour vous déplacer à la fin de la ligne en cours et passer en mode d'édition (à ajouter après le dernier caractère de la ligne).

Maintenant tapez:

,timestamp_timeout=X

où X est l'expiration du délai d'attente en minutes. Si vous spécifiez 0, le mot de passe vous sera toujours demandé. Si vous spécifiez une valeur négative, le délai d'attente n'expirera jamais. Par exemple Defaults env_reset,timestamp_timeout=5.

(vi!) appuyez sur Echap pour revenir au mode commande. Maintenant, si vous êtes satisfait de votre édition, tapez :w Enterpour écrire le fichier et :q Enterquitter vi. Si vous faites une erreur, le moyen le plus simple est peut-être de refaire depuis le début, de quitter sans sauvegarder (appuyer Escapepour passer en mode commande), puis de taper: q! Enter.

Appuyez sur Ctrl+ X, puis sur Y, puis sur Enterpour enregistrer votre fichier et quitter nano.

Vous voudrez peut-être lire les pages de manuel de sudoers et vi pour des informations supplémentaires.

man sudoers
man vi

Réinitialiser la valeur de délai en utilisant:

sudo -k

Ces instructions permettent de supprimer l'invite de mot de passe lors de l'utilisation de la commande sudo. La commande sudo devra néanmoins toujours être utilisée pour l'accès root.

Editer le fichier sudoers

Ouvrez une fenêtre de terminal. Tapez sudo visudo. Ajoutez la ligne suivante à la fin du fichier (sinon, elle peut être annulée par des entrées ultérieures):

<username> ALL=NOPASSWD: ALL

Remplacez-le <username>par votre nom d'utilisateur (sans le <>). Cela suppose qu'Ubuntu a créé un groupe portant le même nom que votre nom d'utilisateur, ce qui est typique. Vous pouvez également utiliser le groupe d'utilisateurs ou tout autre groupe de ce type. Assurez-vous simplement que vous faites partie de ce groupe. Cela peut être vérifié en allant dans Système -> Administration -> Utilisateurs et groupes.

Exemple:

michael ALL=NOPASSWD: ALL

Tapez ^ X ( Ctrl+ X) pour quitter. Cela devrait vous demander une option pour enregistrer le fichier, tapez Y pour enregistrer.

Déconnectez-vous, puis reconnectez-vous. Cela devrait maintenant vous permettre d'exécuter la commande sudo sans être invité à entrer un mot de passe.

Le compte root

Activer le compte root

L'activation du compte root est rarement nécessaire. Presque tout ce que vous devez faire en tant qu'administrateur d'un système Ubuntu peut être fait via sudo ou gksudo. Si vous avez réellement besoin d'un identifiant root persistant, la meilleure solution consiste à simuler un shell de login root à l'aide de la commande suivante:

sudo -i

Cependant, si vous devez activer les connexions root, vous pouvez le faire comme suit:

sudo passwd root

Réactiver votre compte root

Si, pour une raison quelconque, vous avez activé votre compte root et souhaitez le désactiver à nouveau, utilisez la commande suivante dans le terminal:

sudo passwd -dl root

Groupe sudo

root$ echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Déconnectez-vous, puis revenez dans.

Réinitialiser le délai d'attente sudo

Vous pouvez être sûr que sudo demandera le mot de passe la prochaine fois en lançant:

sudo -k
utilisateur209328
la source
J'ai posté ceci avant que j'ajoute, pour un moyen général de le faire et les autres lisent ici:
user209328
C’était une réponse tardive, mais c’est la plus complète en ce qui concerne les options qu’elle vous offre.
Jenming
1
Hmm, sous Ubuntu 18.04 MATE, cela fonctionne parfaitement, tout en faisant de même sous Ubuntu 18.04, GNOME m'a causé des problèmes avec le problème "le nom d'utilisateur n'est pas dans le fichier sudoers ...". Maintenant, c’est pourquoi tant de gens détestent linux - c’est rarement "causal": D Juste au cas où vous rencontriez la même chose ... Voici comment résoudre le problème: tecmint.com/…
Peter
La variable d'environnement EDITOR permet de définir l'éditeur utilisé ... par exemple sudo env EDITOR=/bin/nano visudopour une édition fiable sudoersen nano. (update-alternatives peut également être utilisé pour paramétrer l'éditeur)
Gert van den Berg
29

Le moyen préféré pour accorder des autorisations individuelles (ou de groupe) serait d’ajouter des fichiers sous /etc/sudoers.d

Cela sépare les modifications locales de la stratégie par défaut et permet de gagner du temps au cas où le fichier de distribution sudoers serait modifié.

Pour que l'utilisateur actuellement connecté devienne un sudoer et sudone lui demande pas de mot de passe, utilisez

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/$USER

cela créera un fichier appelé /etc/sudoers.d/$USER(où $USERest le nom d'utilisateur de l'utilisateur avec lequel vous étiez connecté lorsque vous avez exécuté cette commande), indiquant clairement quels utilisateurs sont autorisés.

Si vous souhaitez le faire pour un autre utilisateur, remplacez simplement les deux instances de $USERpar un autre nom d'utilisateur dans la commande ci-dessus.

echo "otheruser ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/otheruser

De même, un fichier peut être utilisé pour gérer plusieurs directives:

echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/local

Voir /etc/sudoers.d/READMEet man sudoerspour plus d'informations.

utilisateur1656671
la source
la commande echo a échoué, même si je suis root. mais, j'ai ajouté le fichier et l'ai édité directement et cela a fonctionné sur le dernier Ubuntu (alors que l'ajout de l'utilisateur aux sudoers n'a pas fonctionné directement!)
scape
1
La bonne façon est de le faire avec teecommande.
woto
1
C’est une meilleure façon de fonctionner sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)'sudo chmod 440 /etc/sudoers.d/$(logname)
:,
La sudo ... >fileredirection dans un shell est exécutée dans le shell d'origine. Elle ne peut donc fonctionner que dans un shell racine.
Konstantin Pelepelin
la méthode du tee, sans permission:echo "username ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/username
Carson Ip
7

Nice one-liner pour supprimer les invites sudo pour l'utilisateur actuel

sudo bash -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo)'
Eric Landry
la source
2
Je pense que vous pourriez simplement faire :, echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo env EDITOR="tee -a" visudon’a visudobesoin sudoque de tout (et ne envsera même pas nécessaire dans la configuration par défaut, IIRC).
Muru
il y a tellement de choses qui pourraient mal se passer ici (toutes les erreurs de l'utilisateur, bien sûr), qu'il est préférable, à mon humble avis, de modifier directement le fichier sudoer ( sudo visudo), tout en testant le résultat (avec l'éditeur toujours ouvert), pour les nouveaux utilisateurs qui pourraient être tentés d'essayer ce "one-liner".
michael
Merci pour les commentaires! J'essayais juste rapidement de script-ify la suppression de l'invite de mot de passe sudo dans mes machines virtuelles de test volatiles. N'hésitez pas à suggérer des améliorations :)
Eric Landry
Vous devez toujours sudo chmod 440 /etc/sudoers.d/$(logname)corriger les autorisations de fichier comme indiqué dans le fichier README de ce répertoire.
Parroïde
6

Bien sûr, ce que vous voulez faire n'est pas recommandé. Au bout d'un moment, bien que l'entrée sudodevienne si automatique que son utilité diminue.

Une autre approche est de laisser votre fichier sudoers tel qu'il est et, tout en faisant quelque chose de compliqué à vos trente - six cents serveurs, entrez sudo bash. Cela vous donnera un shell qui sera authentifié en tant que root jusqu'à ce que vous le quittiez.

John S Gruber
la source
12
sudo -sou sudo -isont probablement les deux meilleures idées que sudo bash, car ils assurent l'environnement est sain et les choses.
Darael
2
"Sain et les choses" ne sont généralement pas du domaine des "meilleures idées". Quelqu'un pourrait-il expliquer de manière technique pourquoi sudo -s ou sudo -i est préférable à sudo bash? (Edit: voici une question pertinente askubuntu.com/questions/376199/… )
Nuzzolilo
2
un certain nombre de sudocommandes (en pensant en particulier à sudo pip ...) nécessitent sudo -H(définissez HOME) pour que la commande s'exécute correctement. Dans d'autres cas, sudo -E(préserv env) peut être requis. L'exécution sudo bashprobablement fonctionnera dans la plupart des cas, mais pas dans tous, et quand ce ne sera pas, on ne saura pas pourquoi.
michael
1
sudo su est la méthode traditionnelle pour changer de rôle et commencer à jouer le rôle d'administrateur système.
user1656671
3

De super utilisateur vient une bonne réponse:

Utilisez le commutateur -S qui lit le mot de passe de STDIN:

echo <password> | sudo -S <command>

Remplacez <password>avec votre mot de passe.

WinEunuuchs2Unix
la source
2
Ceci n'est pas suggéré car le mot de passe reste en clair dans le fichier historique du shell. Appliquez l'une des autres solutions à la place.
HappyCactus
1
@HappyCactus pouvez-vous placer une fois l'espace devant echoafin qu'il n'apparaisse pas dans l'histoire?
WinEunuuchs2Unix
Oui, cela évitera d'exposer le mot de passe en clair au fichier historique. Mais vous souvenez-vous toujours de l'ajouter? :-)
HappyCactus
@HappyCactus J'ai tendance à ajouter un espace de tête par accident, puis à m'énerver lorsque l'histoire ne peut être rappelée :) Quoi qu'il en soit, le super-utilisateur a 129 votes positifs, alors je pense que c'est une bonne réponse de partir d'ici. Les gens liront nos commentaires et connaîtront les risques et les étapes de l'aversion pour le risque.
WinEunuuchs2Unix
Je suis entièrement d'accord. Bonne journée!
HappyCactus
2

Bon mot

sudo sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g'

upteryx
la source
2

Ceci est une solution d'une ligne qui modifie également les autorisations de fichiers comme indiqué dans /etc/sudoer.d/README:

sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)' & sudo chmod 440 /etc/sudoers.d/$(logname)
paradroque
la source
0
  • Développer l’idée de @upteryx.

  • Voici comment j'ai implémenté l'utilisateur non root et sans mot de passe dans une image Docker éphémère à utiliser dans un pipeline CICD:

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
    sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' && \
    echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id
Seth Bergman
la source