Exécuter sudo sans mot de passe?

Inspiré par ceci question....

Je suis la seule personne à utiliser mon système avec 12.04.
Chaque fois que j'émets un sudo commande; le système demande le mot de passe de l'utilisateur (ce qui est bon à sa manière).
Cependant, je pensais; sans activer le racine compte; 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 m'authentifier via un mot de passe; uniquement lorsqu'ils sont exécutés via un terminal.
Je ne veux pas supprimer cette couche de sécurité supplémentaire d'autres fonctions, par exemple en utilisant 'Ubuntu software center' ou en exécutant un script bash par glisser-déposer something.sh fichier vers le terminal.

Vous pouvez configurer sudo pour 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

$USER est votre nom d'utilisateur sur votre système.Enregistrez et fermez le fichier sudoers (si vous n'avez pas changé votre éditeur de terminal par défaut (vous saurez si c'est le cas), appuyez sur Ctl + x quitter nano et 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_resetDefaults    mail_badpassDefaults    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 specificationroot    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.dYOUR_USERNAME_HERE ALL=(ALL) NOPASSWD: ALL

Après cela, 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 du sudo commande dans le terminal. Vous serez toujours invité à entrer votre mot de passe si vous essayez (par exemple) d'installer un package à partir du centre logiciel

sudo -i c'est la voie à suivre si vous ne voulez pas taper 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 fera passer à la racine en utilisant votre sudo mot de passe utilisateur, lorsque vous fermez la console ou tapez exit vous êtes de retour à votre utilisateur normal.

La manière préférée d'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 en cas de modification du fichier sudoers de la distribution.

Pour faire de l'utilisateur actuellement connecté un sudoer et faire sudo ne leur demandez pas un 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ù $USER est le nom d'utilisateur de l'utilisateur sous 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 utilisateur différent, remplacez simplement les deux instances de $USER avec 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/README et man sudoers pour plus d'informations.

Les délais d'expiration root sudo sont le moyen le plus simple et le plus sûr de le faire. Je vais donner tous les exemples, mais soyez averti que c'est très risqué de toute façon, bien que cette façon soit beaucoup plus sûre:

sudo visudo

Cela ouvre un éditeur et le pointe vers le fichier sudoers -- Ubuntu est par défaut nano, les 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!

(Vi instructions spécifiques notées avec (IV!). Ignorez-les si vous utilisez nano.)

Utilisez les touches fléchées pour vous déplacer vers la fin de la Defaults ligne.

(IV!) appuyez sur la touche A (majuscule "a") pour vous déplacer à la fin de la ligne en cours et entrer en mode é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'expiration n'expirera jamais. E. g. Defaults env_reset,timestamp_timeout=5.

(IV!) appuyez sur Echapper pour revenir en mode commande. Maintenant, si vous êtes satisfait de votre édition, tapez :w Enter pour écrire le fichier et :q Enter pour quitter vi. Si vous avez fait une erreur, le moyen le plus simple est peut-être de refaire à partir du début, pour quitter sans enregistrer (appuyez sur Escape pour entrer en mode commande), puis tapez: q! Enter.

Frapper Ctrl+X, puis Y, puis Enter pour enregistrer votre fichier et quitter nano.

Vous voudrez peut-être lire les pages de manuel sudoers et vi pour plus d'informations.

man sudoersman vi

Réinitialiser la valeur du délai d'attente en utilisant:

sudo -k

Ces instructions consistent à supprimer l'invite de mot de passe lors de l'utilisation de la commande sudo. Cependant, la commande sudo devra toujours être utilisée pour l'accès root.

Modifier le fichier sudoers

Ouvrez une fenêtre de terminal. Entrez sudo visudo. Ajoutez la ligne suivante à la FIN du fichier (si elle n'est pas à la fin, elle peut être annulée par des entrées ultérieures):

<username> ALL=NOPASSWD: ALL

Remplacer <username> avec 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 alternativement utiliser le groupe utilisateurs ou tout autre groupe de ce type dans lequel vous vous trouvez. Assurez-vous simplement que vous êtes dans ce groupe. Cela peut être vérifié en allant dans Système - & gt; Administration - & gt; Utilisateurs et groupes.

Exemple:

michael ALL=NOPASSWD: ALL

Tapez ^X (Ctrl+X) 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 racine

Activation du 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 vraiment besoin d'une connexion root persistante, la meilleure alternative est de simuler un shell de connexion Root en utilisant la commande suivante:

sudo -i

Cependant, si vous devoir activez les connexions root, vous pouvez le faire comme ceci:

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 à l'échelle du système

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

Déconnectez-vous, puis reconnectez-vous.

Réinitialiser le délai d'expiration de sudo

Vous pouvez vous assurer que sudo demande le mot de passe la prochaine fois en exécutant:

sudo -k

Bien sûr, ce que vous voulez faire n'est pas recommandé. Au bout d'un moment, cependant. sudo devient tellement automatique que son utilité diminue.

Une autre approche consiste à laisser votre fichier sudoers tel quel et, tout en faisant quelque chose de compliqué sur vos centaines de serveurs, entrez sudo bash . Cela vous donnera un shell qui sera authentifié en tant que root jusqu'à ce que vous le quittiez.

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

sudo bash -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" | (EDITOR="tee -a" visudo)'

Il s'agit d'une solution en une ligne qui modifie également les autorisations des fichiers comme indiqué dans /etc/sudoers.d/README:

sudo sh -c 'echo "$(logname) ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$(logname)' && sudo chmod 440 /etc/sudoers.d/$(logname)

Un liner

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

De superutilisateur vient une bonne réponse:

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

echo <password> | sudo -S <command>

Remplacer <password> avec votre mot de passe.

  • 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

donc, vous voulez seulement qu’on vous demande le mot de passe dans le terminal et pour d’autres choses non, ou l’inverse?! dans les deux sens, je pense que c’est une faille de haute sécurité

Bien sûr, vous pouvez prolonger le délai d’attente. De plus, si vous effectuez fréquemment de nouvelles configurations de serveur, vous devriez penser à automatiser le processus. Vous n’êtes pas payé pour taper, vous êtes payé pour résoudre des problèmes et faire des conneries.

Je veux que le système ne demande pas le mot de passe uniquement dans le terminal… pour toute autre fin, le système doit demander un mot de passe.

Cette exigence n’est que temporaire et doit être utilisée lors de la configuration et de l’installation de nouveaux serveurs… lors de nouvelles installations de serveur, il faut vraiment des heures de configuration avec les commandes sudo… émission du mot de passe toutes les 15 minutes. c’est un mal de tête. Je ne veux pas utiliser de compte root.

Vous devez lire la discussion dans: root - What are the benefits of sudo over su? - Ask Ubuntu

Connexes: Comment exécuter la commande sudo sans mot de passe?