Comment puis-je forcer sudo à toujours demander un mot de passe après s'être réveillé de la suspension?

15

Supposons que j'exécute une commande avec sudo, puis si j'utilise sudodans les 15/5 minutes suivantes ( je ne sais pas combien de temps il se souvient de moi), il ne me demandera pas de mot de passe. Cela ne m'invitera à nouveau que si je ne l'ai pas utilisé pendant au moins aussi longtemps.

Cependant, si je suspends ma machine, la réveille et me connecte avant la fin de cette période, je peux simplement exécuter à sudonouveau une commande et elle ne me demandera pas mon mot de passe car je ne l'ai pas laissé pour un certain montant de temps.

Alors, comment puis-je faire en sorte que, quelle que soit la durée pendant laquelle je n'ai pas utilisé sudo, il me demandera certainement un mot de passe après la suspension une fois que je me suis reconnecté, même si je suis encore dans ce laps de temps où le 15/5 minutes de non utilisation sudone se sont pas encore écoulées?

La chose la plus probable qui fonctionnera est de lui faire exécuter une commande pour supprimer tous les caches d'identité sudolors de l'exécution d'une certaine commande qui est exécutée au réveil.

J'utilise Ubuntu GNOME 15.10 avec GNOME 3.18.


la source
1
bonne question, mais pourquoi êtes-vous paranoïaque? car si une personne autre que vous connaît votre mot de passe de connexion ne peut pas être empêché d'utilisersudo
Edward Torvalds
Si vous venez de quitter cette fenêtre de terminal, vous devrez retaper votre mot de passe lorsque vous ouvrirez une nouvelle fenêtre de terminal, quelle que soit la rapidité avec laquelle vous le faites. Si vous exécutez quelque chose dans une fenêtre de terminal, ajoutez `; exit` et la fenêtre se fermera à la fin de la commande.
Marc
@Marc: Je sais, mais ce n'est pas toujours pratique de sortir, ni de faire manuellement la sudodemande la prochaine fois. Une solution automatique serait préférable.
@edwardtorvalds: Eh bien, je pourrais me connecter à nouveau, puis m'en aller (pas que je le fais très souvent), et quand quelqu'un viendrait, ce serait mauvais s'ils pouvaient simplement utiliser sudo. Je sais que cela semble un peu étrange pour mon propre ordinateur, mais j'aurais pu effectuer des travaux de maintenance sur un autre ordinateur Ubuntu, puis lorsque je reconnecte l'utilisateur, il peut être gênant de fermer Terminal, mais je ne le fais pas veulent qu'ils aient des sudodroits.
1
Ajouter `; exit` (sept touches) me semble assez facile. De quels types d'entretien vous éloignez-vous, parce que je ne pense pas à grand-chose que je tenterais de suspendre au milieu de.
Marc

Réponses:

19

De man sudo:

     -K, --remove-timestamp
                 Similar to the -k option, except that it removes the user's
                 cached credentials entirely and may not be used in conjunc‐
                 tion with a command or other option.  This option does not
                 require a password.  Not all security policies support cre‐
                 dential caching.

Donc, ce que vous voulez, c'est que votre utilisateur s'exécute sudo -Kchaque fois que le système se bloque.

Ubuntu 15.04+ (systemd)

Cela peut être fait sur Ubuntu 15.04+ en plaçant un script dans /lib/systemd/system-sleep/.

  1. Exécuter sudo nano /lib/systemd/system-sleep/disable_sudo_user(remplacer userpar le nom d'utilisateur de votre utilisateur pour plus de commodité);
  2. Collez le script suivant (remplacez-le userpar le nom d'utilisateur de votre utilisateur):
#!/bin/sh
case $1/$2 in
    pre/suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. Hit CTRL+ O, ENTERet CTRL+ X;

  2. Run sudo chmod o+x /lib/systemd/system-sleep/disable_sudo_user;


Pour l'activer également pour l'hibernation / veille hybride, utilisez plutôt ce script:

#!/bin/sh
case $1 in
    pre)
        su user -c 'sudo -K'
        ;;
esac

Versions précédentes d'Ubuntu (Upstart)

Cela peut être fait sur les versions précédentes d'Ubuntu en plaçant un script dans /etc/pm/sleep.d/.

  1. Exécuter sudo nano /etc/pm/sleep.d/disable_sudo_user(remplacer userpar le nom d'utilisateur de votre utilisateur pour plus de commodité);
  2. Collez le script suivant (remplacez-le userpar le nom d'utilisateur de votre utilisateur):
#!/bin/sh
case $1 in
    suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. Hit CTRL+ O, ENTERet CTRL+ X;

  2. Run sudo chmod o+x /etc/pm/sleep.d/disable_sudo_user;


Pour l'activer également pour l'hibernation, utilisez plutôt ce script:

#!/bin/sh
case $1 in
    suspend|hybernate)
        su user -c 'sudo -K'
        ;;
esac
kos
la source
2
Cela aurait été plus drôle si vous l'aviez utilisé sudo -u user sudo -k. : D
muru
@muru Pensait la même chose mais pour une raison quelconque, cela semblait un peu idiot: D
kos
Désolé, je n'ai pas écrit de code shell depuis un moment, qu'est-ce pre/*)que cela fait exactement ? :)
@ParanoidPanda C'est parti, voir la mise à jour. Voir ici (Description, deuxième paragraphe): systemd-suspend.serviceappelle les scripts en /lib/systemd/system-sleep/passant deux arguments; $1c'est soit prepour les événements avant le sommeil , soit pour les événements postaprès le sommeil, et $2c'est soit suspend, hybernatesoit hybrid-sleep; pre/*était censé capturer toutes les combinaisons de pre/et n'importe laquelle suspend, hybernateou hybrid-sleep, mais comme vous avez demandé explicitement une suspension, je l'ai changé en pre/suspend.
kos
1
Il convient de noter que vous pouvez également le faire dans les anciens ubuntu, c'est juste le mécanisme qui est différent, c'est-à-dire en utilisant des /etc/pm/sleep.dscripts.
Hobbs
3

Seulement si tu es ce paranoïaque! Vous pouvez utiliser l' -Koption de sudo.

-K, --reset-timestamp
       When used without a command, invalidates the user's cached credentials.  
       In other words, the next time sudo is run a password will be required.  
       This option does not require a password and was added to allow a user to revoke
       sudo permissions from a .logout file.

       When used in conjunction with a command or an option that may require a 
       password, this option will cause sudo to ignore the user's cached credentials.  
       As a result, sudo will prompt for a password (if one is required by the 
       security policy) and will not update the user's cached credentials.

       Not all security policies support credential caching.

par exemple,

sudo -K <command>

Ou vous pouvez simplement laisser votre ordinateur dans une boîte métallique gardée par des robots :)

Edward Torvalds
la source
Hmm ... Pas exactement comme je le souhaite, n'y a-t-il aucun moyen d'automatiser cela? Parce que cela suggère que je sais définitivement que je suis sur le point de suspendre, que se passe-t-il si une commande est en cours d'exécution sudoet que je dois aller quelque part, alors je suspend la machine, puis quand je reviens et que je suspends la machine, je devrai attendre pour la commande ou le temps de terminer avant que je puisse faire me demander un mot de passe la prochaine fois? Il serait beaucoup plus utile pour de nombreuses raisons (y compris le fait que lorsque je l'exécute avec une interface graphique sur un niveau d'exécution différent, il ne demande pas de mot de passe après la suspension) qu'il soit automatisé.
Aussi, je pense que tu veux dire -Ket non -k.
Eh bien, cela pourrait être plus utile de toute façon.
1

Encore une autre méthode

Tapez «sudo visudo»

Allez à la ligne qui dit: 'Defaults env_reset'

et changez pour:

'Par défaut env_reset, timestamp_timeout = 0

Enregistrez ensuite le fichier.

En définissant le délai d'expiration sur 0, le système vous demandera le mot de passe à chaque fois.

Edgar Naser
la source
Bien que cela accomplisse (techniquement parlant) ce que le PO demande, c'est excessif pour la plupart des situations. Cela dit, si vous êtes vraiment paranoïaque (ou si vous voulez juste une étape supplémentaire pour faire une pause et contempler chaque fois que vous faites quelque chose de potentiellement dangereux), cela pourrait être une alternative viable.
un CVn le