Comment faire durer les autorisations de super-utilisateur plus longtemps que d'utiliser sudo?

25

Existe-t-il un moyen par lequel je peux faire en sorte que la sudocommande me donne des autorisations pour une période plus longue que sa durée par défaut?

Il peut être difficile de continuer à saisir le sudomot de passe, lorsqu'il nécessite l'installation de nombreux packages, donc ce serait bien s'il existe une commande ou une configuration qui peut être effectuée pour affecter sa période d'utilisation.

Dis moi pourquoi
la source
3
Alors, personne n'en utilise suplus? Déjà?
M. Lister
9
@MrLister sudo -iet vous avez une coque de racine, prête à tout le monde pour aider à se lisser dans les pieds pendant autant de temps comme ...
Rmano
1
@DevRobot, avez-vous une source pour cela? J'ai du mal à croire que Canonical supprimerait une commande aussi importante, et je ne trouve rien à ce sujet sur Google.
DJMcMayhem
9
@DevRobot a subesoin de root pour avoir un mot de passe. Par défaut, l'utilisateur root d'Ubuntu n'a pas de mot de passe. Par conséquent, vous ne pouvez pas surooter. sufonctionne comme prévu ici. Essayez avec n'importe quel utilisateur disposant d'un mot de passe.
muru
3
@muru sudo sufonctionne très bien, bien qu'un peu répétitif.
coteyr

Réponses:

27

Le comportement de sudoest configuré dans le /etc/sudoersfichier. Il y a une timestamp_timeoutoption responsable de reprompter l'utilisateur pour le mot de passe après une durée spécifique.

De l' homme sudoers

timestamp_timeout
                       Number of minutes that can elapse before sudo will ask
                       for a passwd again.  The timeout may include a frac‐
                       tional component if minute granularity is insufficient,
                       for example 2.5.  The default is 15.  Set this to 0 to
                       always prompt for a password.  If set to a value less
                       than 0 the user's time stamp will never expire.

Pour modifier ce paramètre, procédez comme suit:

  1. En exécution terminale sudo visudo. visudoest utilisé spécifiquement pour éditer le /etc/sudoersfichier et utilise par défaut l' nanoéditeur de texte.
  2. Trouvez les lignes commençant par Defaults. Ajoutez la ligne suivante

    Defaults        timestamp_timeout=x
    

    où x est le nombre de minutes que vous souhaitez entre les invites

  3. Enregistrez le fichier avec Ctrl+O

Sergiy Kolodyazhnyy
la source
12

De man sudoers:

timestamp_timeout
                       Number of minutes that can elapse before sudo will ask
                       for a passwd again.  The timeout may include a frac‐
                       tional component if minute granularity is insufficient,
                       for example 2.5.  The default is 15.  Set this to 0 to
                       always prompt for a password.  If set to a value less
                       than 0 the user's time stamp will never expire.  This
                       can be used to allow users to create or delete their
                       own time stamps via “sudo -v” and “sudo -k” respec‐
                       tively.

Comme vous pouvez le voir, le délai d'expiration par défaut sudoest de 15 minutes. Vous pouvez modifier cette valeur dans /etc/sudoers.

Vous ne modifiez pas directement /etc/sudoers, utilisez plutôt visudopour le faire.

De man visudo:

     visudo edits the sudoers file in a safe fashion, analogous to vipw(8).
     visudo locks the sudoers file against multiple simultaneous edits, pro‐
     vides basic sanity checks, and checks for parse errors.  If the sudoers
     file is currently being edited you will receive a message to try again
     later.

Alors, tapez sudo visudoun terminal, qui ouvrira le /etc/sudoersfichier dans l' nanoéditeur de texte.

Recherchez cette ligne:

Defaults    env_reset

Et ajoutez où X est le temps que vous souhaitez définir en minutes.timestamp_timeout=X

Donc, à titre d'exemple:

Defaults    env_reset,timestamp_timeout=5

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.

Une fois terminé, enregistrez et quittez.

Voir RootSudoTimeout

Ron
la source
Battez-moi de 29 secondes =)
Sergiy Kolodyazhnyy
1
Vous êtes bon -_- b Je suis sur un ordinateur portable. . . peut-être que j'ai besoin de plus de café
Sergiy Kolodyazhnyy
Vous pouvez également définir par exemple -1 sur timeout - si vous ne voulez jamais qu'une invite de mot de passe se déclenche.
Michał Żywiecki
8

Essaye ça .

  1. Exécutez la commande suivante dans un terminal:

    sudo visudo
    
  2. Faites défiler jusqu'à la ligne qui ressemble à ceci:

    Defaults        env_reset
    
  3. Changez-le par exemple:

    Defaults        env_reset,timestamp_timeout=30
    

Remplacez 30 par le temps, en minutes, que vous souhaitez qu'il attende avant qu'il ne se termine. Vous pouvez également le changer à 0 si vous voulez une invite de mot de passe à chaque fois que vous exécutez sudo, ou -1 si vous ne voulez jamais d'invite de mot de passe Appuyez sur Ctrl+ Xpour terminer la modification, Y pour enregistrer les modifications et Entrée pour quitter.

Voici la source: http://lifehacker.com/make-sudo-sessions-last-longer-in-linux-1221545774

Michał Żywiecki
la source
5

Vous pouvez éditer le /etc/sudoersfichier (avec sudo visudo: soyez prudent) et ajouter une ligne comme

Defaults:myname timestamp_timeout=15 

mynameest votre identifiant utilisateur. La valeur du délai d'attente est en minutes. Vous pouvez utiliser une valeur de -1 pour ne jamais expirer, puis taper sudo -kpour supprimer l'authentification, vous avez donc besoin à nouveau d'un mot de passe.

Ou vous pouvez ajouter une entrée pour dire qu'une commande spécifique n'a pas besoin du tout d'un mot de passe.

meuh
la source
1
+1 pour avoir mentionné sudo -kpour invalider manuellement l'authentification mise en cache.
Byte Commander
5

Je ne peux pas croire que la commande la plus simple:

sudo -s

n'est pas mentionné ici. Le commutateur "-s" vous donne une console avec des autorisations root, qui durent jusqu'à ce que vous la quittiez. Pas besoin de se déplacer avec les paramètres par défaut.

Oliver Friedrich
la source
1
Pourquoi ce vote est-il rejeté?
coteyr
3
Je n'ai pas downvote, mais cela vainc un avantage d'utiliser sudo: chaque commande est enregistrée (afin que vous puissiez voir ce que vous avez fait). Vous perdez cette journalisation lorsque vous ouvrez un shell racine.
guntbert
1
@guntbert est sûrement toutes les commandes enregistrées, mais dans l'historique de l'utilisateur root.
Oliver Friedrich
@BeowulfOF pas nécessairement - l'historique de bash est quelque chose de complètement différent du journal système.
guntbert
1
Vraiment, @guntbert, si vous utilisez le journal d'authentification comme celui-ci, vous avez différents problèmes.
Oliver Friedrich
1

Jusqu'à présent, toutes les autres réponses semblent se concentrer sur la modification du délai par défaut pendant combien de temps avant de devoir taper à nouveau votre mot de passe avec sudo. Cependant, si vous voulez simplement être en mesure d'exécuter des commandes en tant que root sans ajouter à chaque commande sudo, vous pouvez obtenir un shell root avec:

sudo -i

ou

sudo bash

ou

sudo <your preferred shell here>

Bien que tous ceux-ci ne démarrent qu'un seul processus en tant que root, le seul processus en question se trouve être un shell qui vous permettra de démarrer autant d'autres processus que vous le souhaitez en tant que root sans avoir besoin de taper sudoou de mot de passe. :)

Bien sûr, avec un grand pouvoir vient une grande responsabilité, ne faites pas de choses stupides, etc.

reirab
la source
1
SOYEZ EXTRÊMEMENT PRUDENT avec cela. En effet, vous exécuterez un shell racine.
hmayag
4
Pourquoi est-ce sous-voté?
coteyr
@hmayag Oui, si vous démarrez un shell racine, vous exécuterez en effet un root shell. D'où la raison de l'avertissement à la fin.
reirab
@coteyr Peut-être pour la même raison que la réponse de BeoWulf.
guntbert
1

Après avoir vu trop de questions des utilisateurs qui ont modifié des fichiers de configuration et qui ne savaient pas pourquoi leurs modifications ont été écrasées après une mise à niveau du package, je noterai que si vous souhaitez modifier timestamp_timeout, il est préférable de le faire en créant un fichier dans /etc/sudoers.dplutôt que modifier /etc/sudoersdirectement.

Donc tu devrais faire

sudo visudo -f /etc/sudoers.d/timeout

(le nom du fichier peut être celui que vous voulez tant qu'il ne contient pas de point ( .) ni ne se termine par un tilde ( ~)). Au lieu de s'ouvrir /etc/sudoersdans l'éditeur de votre choix, il s'ouvrira /etc/sudoers.d/timeout, normalement sous forme de fichier vide puisqu'il n'existe pas. Mettre votre

Defaults timestamp_timeout=X

en elle, et enregistrez comme d'habitude. Ensuite, si une nouvelle version de /etc/sudoerssort, vous n'avez pas à choisir entre installer la nouvelle version ou conserver vos modifications - vous aurez automatiquement les deux.

fkraiem
la source
1

Si vous recherchez une solution qui ne modifie pas le fichier de configuration , par exemple lorsque vous souhaitez que le jeton dure plus longtemps pour une session spécifique, ou qu'il s'applique uniquement après une action explicite, vous pouvez essayer ce qui suit:

# Work as is with Bash 4.1.2(1)-release and later, this might require some adaptation for other shells
(while [ true ]; do sudo -v; sleep $((60*4)); done)&

Fondamentalement, le code précédent actualise le jeton sudo toutes les 4 minutes , via un processus lancé en arrière-plan.

En effet, selon le sudomanuel: "le délai d'expiration par défaut du mot de passe pour la politique de sécurité sudoers est de 5 minutes ". Ainsi, en fonction de la stratégie spécifique du système, vous pouvez modifier la durée pendant laquelle la boucle passe en veille entre deux cycles.

psychoslave
la source