Question Sudo - existe-t-il une commande pour vérifier si j'ai sudo et / ou combien de temps reste-t-il?


(Initialement publié sur Stack Overflow. Ils ont suggéré d’essayer ici à la place. Voici le message original: https://stackoverflow.com/questions/3858208/sudo-is-there-a-command-to-check-if-i-have-sudo-and-or-how-much-time-is-left)

Voir le titre. Je veux une commande qui me permet d'interroger sudo. Idéalement, cela donnerait un succès si j'ai encore sudo et false si sudo a expiré. Il serait peut-être utile de gagner du temps (même si je craignais de ne pouvoir revalider que sudo -v). Oh, il ne devrait pas être nécessaire de 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. Y a-t-il un autre moyen d'obtenir cette fonctionnalité? Supposons que je ne dispose pas de root 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 cela vaut la peine de le faire, je peux obtenir mon invite pour indiquer le statut sudo. J'aime savoir quels terminaux sont activement utilisables. J'ai également une invite qui change de couleur lorsque je suis root, mais je n'utilise pas très souvent root, ce qui est peu utile.


23
2017-10-04 19:22


origine




Réponses:


le -n L'option est disponible dans les nouvelles versions de sudo, mais comme vous l'avez indiqué, ce n'est pas une option. Il n'y a pas vraiment de moyen de faire ce que vous cherchez en essayant simplement d'essayer sudo et de voir si cela revient avec une invite pour un mot de passe. Si votre problème est que vous voulez une indication visuelle, pourquoi ne pas démarrer sudo / bin / bash pour démarrer une session root bash? Notez que cela n'est pas sûr, mais que cela n'est pas non plus sûr si quelqu'un réalise vos changements rapides sur sudo.


10
2017-10-04 19:45



+1 pour les ramifications de sécurité d'un indicateur visuel! - Dennis Williamson
Cette partie ne m'était pas venue à l'esprit. Ce que je souhaite, c'est que l'indicateur me rappelle de lancer sudo -K, au lieu d'oublier que j'ai laissé sudo active et de laisser des terminaux potentiellement dangereux ouverts. Non pas que j'oublie souvent de verrouiller mon écran, mais j'aime l'assurance supplémentaire. - valadil
En ce moment, je me penche sur la vérification de sudo -V et si elle est suffisamment nouvelle pour avoir -n, vérifier -n pour obtenir la notification. On dirait qu'il ne devrait rien casser nulle part. - valadil
@valadil: Il me semble qu'un indicateur subtil ne créerait pas trop de risques pour la sécurité. Activez le soulignement du nom d'utilisateur dans l'invite, par exemple. - Dennis Williamson
@ Dennis: Exactement. Je n'allais pas changer mon invite en "OMG_YOU_HAVE_SUDO_NOW! _User @ host" ou quelque chose comme ça. Je changerais probablement un peu la couleur. Je ne m'attends pas à ce que quelqu'un sache ce que cela signifie à moins qu'ils s'assoient et deviennent intimes avec mon .bashrc. - valadil


Je sais que c'est une très vieille question mais voici ce que j'ai fait dans un script aujourd'hui:

CAN_I_RUN_SUDO = $ (sudo -n uptime 2> & 1 | grep "load" | wc -l)
if [$ {CAN_I_RUN_SUDO} -gt 0]
puis
    echo "Je peux exécuter la commande sudo"
autre
    echo "Je ne peux pas exécuter la commande Sudo"
Fi

26
2017-10-11 15:41



Parfait, merci beaucoup! - SeriousM
Ce fragment de code est exactement ce que je cherchais. Merci. - David Medinets
Parfait! Merci! - Karl Wilbur


La commande ci-dessous affichera une indication de couleur que vous avez accordée à sudo, donc vous vous rappelez de faire une sudo -k avant de quitter 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

function FUNCpromptCommand () { 
    sudo -n uptime 2>/dev/null 1>/dev/null
  local bSudoOn=`if(($?==0));then echo true; else echo false; fi`

    history -a; # append to history at each command issued!!!
    local width=`tput cols`;
    local half=$((width/2))
    local dt="[EndAt:`date +"%Y/%m/%d-%H:%M:%S.%N"`]";
  if $bSudoOn; then dt="!!!SUDO!!!$dt"; fi
    local sizeDtHalf=$((${#dt}/2))
    #printf "%-${width}s" $dt |sed 's" "="g'; 
    echo
    output=`printf "%*s%*s" $((half+sizeDtHalf)) "$dt" $((half-sizeDtHalf)) "" |sed 's" "="g';`

    local colorLightRed="\e[1;31m"
  local colorNoColor="\e[0m"
    if $bSudoOn; then
        echo -e "${colorLightRed}${output}${colorNoColor}"
    else
        echo -e "${output}"
    fi
}
export PROMPT_COMMAND=FUNCpromptCommand

Au type terminal bash pour le tester. Il ajoutera également une ligne entière à chaque fois que vous exécuterez une commande, avec les informations sur l'heure à laquelle la dernière commande s'est terminée, pour 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 de l'invite), mais je pense qu'il est préférable de ne pas s'en préoccuper.

PS .: pour OS-X, cherchez le commentaire ci-dessous par @nwinkler.


1
2018-04-26 03:58



Vérification du code de sortie de sudo -n ne semble pas fonctionner sur OS X. Voir ma question ici: superuser.com/questions/902826/... - nwinkler
eh bien, le test que je propose est sudo -n, croyez-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 OS-X nécessite une mise à jour? Je n'ai jamais utilisé OS-X btw. - Aquarius Power
J'utilise la dernière version d'OS X. Il est possible que sudo -n sur BSD (sur lequel OS X est basé) a 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 sur OS X. J'ai utilisé un chèque provenant d'une autre réponse (sudo -n uptime 2>&1|grep "load"|wc -l), et cela semble bien fonctionner sur OS X. Ce n'est pas aussi élégant, mais ça marche. - nwinkler
@ nwinkler oh, cela dépend en fait de la sortie qu'il génère (pas la valeur de retour), solution intéressante - Aquarius Power
@nwinkler mais c'est aussi proche que possible. Ou même mieux parce que sudo -n devient bogué dans sudo -V 1.7.9 - Marco M. von Hagen


Selon le manuel sudo, la session sudo est déterminée en fonction du fichier d'horodatage (/usr/lib/sudo/<username>), vous pourrez peut-être déterminer combien de temps il vous reste en vérifiant la date et l’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 horodatages étranges, mais /usr/lib/sudo/<username>semblait avoir un horodatage qui a coïncidé avec le moment où j'ai donné mon mot de passe à sudo. je pense /usr/lib/sudo/<username>/0 a l'horodatage de la plus récente sudo exécution.


0
2017-10-04 20:50



Sur mon système, les fichiers d'horodatage se trouvent dans un répertoire qui ne peut pas être lu sans utiliser sudo, qui demande un mot de passe et ne fonctionnerait donc pas pour les besoins de l'OP. - Dennis Williamson
Bon point. Je n'ai pas vérifié la propriété de ces fichiers. Vous avez raison, ce serait inutile. - Dysaster


Attention

Selon Bugzilla sudo ID de bogue = 590 l'appel à sudo -n true 2&>/dev/null ; echo $? deviendra buggy autour sudo -V 1.7.10

Lire Bugzilla [ici] (http://bugzilla.sudo.ws/show_bug.cgi?id=590"ID de bogue = 590")


0
2018-06-11 21:57





Pour simplifier la réponse donnée par @ wags007

if sudo -n true
then
  sudo id
else
  echo "sorry, but did not want to bother you"
fi

Cependant, si dans votre https://www.sudo.ws/man/1.8.15/sudoers.man.html configuration que vous avez defaults mail_badpass il y aura un courrier envoyé pour chaque test qui se traduit par faux (aurait demandé). Pour éviter de telles nuisances, remplacez cette partie de votre fichier sudoers par

Defaults       mail_badpass
Defaults!      /bin/true !mail_badpass

Par conséquent, les messages d'alerte de sécurité sont envoyés pour toutes les commandes, sauf / 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 aucun courrier d'alerte de sécurité envoyé.

Note: Toujours utiliser visudo au lieu de votre éditeur préféré pour éditer le fichier sudoers. À défaut de le faire, vous risquez d’être en lock-out.


0
2018-03-23 12:56





Au moins sur sudo 1.8.21p2, cette approche fonctionne bien:

if sudo -vn 2> /dev/null; then
    echo "You have an active sudo session"
fi

0
2017-07-16 17:06





Ceci est probablement excessif par rapport au standard de la plupart des gens, mais voici la fonction (correctement correcte) que j'utilise pour vérifier si sudo est déverrouillé (la fonction ne perdra pas son temps si l'utilisateur qui l'exécute est root, comme il n'y a pas besoin de débloquer sudo):

#!/bin/sh

_unlock_sudo() {
    if [ "$USER" != 'root' ]; then
        if ! sudo -n -- true 2>/dev/null; then
            printf '\n'
            printf 'Enter password for sudo user "%s":\n' "$USER"
            while ! sudo -- true; do
                printf '\n'
                while true; do
                    printf 'Slow your roll. Try to enter password again? [Y/n]: '
                    read -r answer
                    case "$answer" in
                        ''|y|Y|yes|Yes|YES)
                            printf '\n'
                            printf 'Enter password for sudo user "%s":\n' "$USER"
                            break
                            ;;
                        n|N|no|No|NO)
                            printf '\n'
                            printf 'OK. Exiting...\n'
                            exit 1
                            ;;
                        *)
                            printf 'Please enter a valid option...\n'
                            printf '\n'
                            ;;
                    esac
                done
            done
        fi
    fi
}

_unlock_sudo

0
2017-07-27 02:12