(Publié à l'origine sur Stack Overflow. Ils m'ont suggéré d'essayer ici à la place. Voici le message d'origine: /programming/3858208/sudo-is-there-a-command-to-check-if-i-have -sudo-et-ou-combien-de-temps-reste )
Voir titre. Je veux une commande qui me permet d'interroger sudo. Idéalement, cela retournerait le succès si j'avais encore sudo et false si sudo avait expiré. Obtenir le temps restant pourrait également être utile (bien que si j'étais inquiet, je pouvais simplement faire sudo -v pour revalider.) Oh et il ne devrait pas avoir à demander un mot de passe.
La chose la plus proche que j'ai trouvée est "sudo -n true", mais l'option -n n'est présente que sur ma machine Centos 5 au travail. -n échoue s'il doit demander un mot de passe. Existe-t-il un autre moyen d'obtenir cette fonctionnalité? Supposons que je n'ai pas vraiment de racine sur toutes les machines avec lesquelles je travaille, donc je ne peux pas installer de nouvelles versions de sudo à mon goût.
Pour ce que ça vaut, je fais cela afin que je puisse obtenir mon invite pour indiquer le statut sudo. J'aime savoir quels terminaux sont activement sudo-capables. J'ai également une invite qui change de couleur lorsque je suis root, mais je n'utilise pas la racine très souvent, c'est donc d'une utilité limitée.
Je sais que c'est une très vieille question, mais voici ce que j'ai fait dans un script aujourd'hui:
la source
La commande ci-dessous affichera une indication colorée que vous avez accordé à sudo, donc n'oubliez pas de faire un
sudo -k
avant de vous éloigner de la machine. Il est également utile sur les terminaux non colorés.Comme nous pouvons avoir sudo actif et inactif sur différentes sessions de terminal, j'ai créé ceci que vous pouvez mettre à la fin de votre ~ / .bashrc
Au type de terminal
bash
pour le tester. Il ajoutera également une ligne entière chaque fois que vous exécutez une commande, qui contient les informations sur l'heure de fin de la dernière commande, afin que vous puissiez aller déjeuner et savoir quand la dernière commande s'est terminée :).Vous pouvez jouer avec ce code pour répondre à vos besoins. Il y a aussi la variable PS1 (c'est-à-dire la petite ligne simple réelle), mais je pense qu'il vaut mieux ne pas jouer avec.
PS .: pour OS-X, recherchez le commentaire ci-dessous par @nwinkler.
la source
sudo -n
ne semble pas fonctionner sous OS X. Voir ma question ici: superuser.com/questions/902826/…sudo -n
, pensez-vous qu'il pourrait y avoir un autre test qui pourrait être utilisé pour déterminer si l'utilisateur a un accès sudo actif? ou peut-être que OS-X nécessite une mise à jour? Je n'ai jamais utilisé OS-X btw.sudo -n
sur BSD (sur lequel OS X est basé) ait un comportement différent de la version GNU. Je viens d'ajouter mon commentaire pour que les gens sachent que cette version du chèque ne semble pas fonctionner sous OS X. J'ai utilisé un chèque d'une autre réponse (sudo -n uptime 2>&1|grep "load"|wc -l
), et cela semble bien fonctionner sous OS X. Ce n'est pas aussi élégant, mais ça marche.sudo -n
devient buggy dans sudo -V 1.7.9Pour simplifier la réponse donnée par @ wags007
Cependant, si vous avez dans votre configuration https://www.sudo.ws/man/1.8.15/sudoers.man.html ,
defaults mail_badpass
un courrier électronique sera envoyé pour chaque test qui aboutit à faux (cela aurait été demandé). Pour éviter une telle nuisance, changez cette partie de votre fichier sudoers enPar conséquent, des e-mails d'alerte de sécurité sont envoyés pour toutes les commandes, à l'exception de / bin / true. Eh bien oui, quelqu'un pourrait maintenant essayer de forcer un mot de passe en appelant
sudo true
un nombre illimité de fois sans qu'aucun message d'alerte de sécurité ne soit envoyé.Remarque: utilisez toujours à la
visudo
place de votre éditeur préféré pour modifier le fichier sudoers. Sinon, vous risquez d'être exclu.la source
Selon le manuel sudo, la session sudo est déterminée en fonction du fichier d'horodatage (
/usr/lib/sudo/<username>
), de sorte que vous pouvez déterminer le temps restant en vérifiant la date / heure du fichier d'horodatage. Cependant, dans mon système, le fichier d'horodatage est en fait un répertoire, et il y a trois fichiers avec un contenu cryptique (et aussi des/usr/lib/sudo/<username>
horodatages étranges, mais semblait avoir un horodatage qui coïncidait avec le moment où j'ai donné à sudo mon mot de passe . - Je pense qu’elle/usr/lib/sudo/<username>/0
a l’horodatage de la dernièresudo
exécution.la source
Attention
Selon Bugzilla sudo Bug ID = 590, l'appel à
sudo -n true 2&>/dev/null ; echo $?
deviendra buggysudo -V 1.7.10
Lisez Bugzilla [ici] ( http://bugzilla.sudo.ws/show_bug.cgi?id=590 "Bug ID = 590")
la source
Au moins sur sudo 1.8.21p2, cette approche fonctionne bien:
la source
C'est probablement une exagération extrême par rapport à la plupart des gens, mais voici la fonction (posixly correcte) que j'utilise pour vérifier si elle
sudo
est déverrouillée (la fonction ne perdra pas son temps si l'utilisateur l'exécuteroot
, car il n'est pas nécessaire de la déverrouillersudo
):la source
réponse simple ...
la source
Que diriez-vous de la page de manuel
Listez vos commandes disponibles:
sudo lui-même n'a pas de limite de temps ou de date ... voir:
la source