(Initialement posté sur Stack Overflow. Ils m'ont suggéré d'essayer ici. Voici l'article original: https://stackoverflow.com/questions/3858208/Sudo-is-there-a-command- à-vérifier-si-j'ai-Sudo-et-ou-combien-de-temps-est-à-gauche )
Voir le titre. Je veux une commande qui me permet d'interroger Sudo. Dans l'idéal, si je disposais encore de Sudo, le résultat serait positif et faux si Sudo était expiré. Garder le temps restant pourrait également être utile (bien que si j'étais inquiet, je pourrais simplement faire une revalidation de 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 n'ai pas réellement de racine sur toutes les machines avec lesquelles je travaille, je ne peux donc pas installer les nouvelles versions de Sudo à ma guise.
Pour ce que ça vaut la peine de le faire, je peux obtenir mon invite pour indiquer le statut de Sudo. J'aime savoir quels terminaux sont actifs pour Sudo. J'ai aussi une invite qui change de couleur lorsque je suis root, mais je n'utilise pas souvent cette racine, son utilisation est donc limitée.
L'option -n
est disponible dans les versions les plus récentes de Sudo, mais comme vous l'avez indiqué, ce n'est pas une option. Il n'y a pas vraiment moyen de faire ce que vous cherchez, à moins d'essayer Sudo et de voir s'il revient avec une invite pour un mot de passe. Si vous souhaitez une indication visuelle, pourquoi ne pas commencer par Sudo/bin/bash pour démarrer une session root bash? Notez que cela n’est pas sûr, mais aussi un peu si quelqu'un réalise vos changements d'invite sur Sudo.
Je sais que c'est une question très ancienne 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) Si [$ {CAN_I_RUN_Sudo} -gt 0] Puis [.____. .] echo "Je peux exécuter la commande Sudo" sinon echo "Je ne peux pas exécuter la commande Sudo" fi
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 vous avez la configuration defaults mail_badpass
, il y aura être un mail envoyé pour chaque test dont le résultat est faux (l'aurait invité). Pour éviter une telle nuisance, remplacez cette partie de votre fichier sudoers par
Defaults mail_badpass
Defaults! /bin/true !mail_badpass
En conséquence, des courriers 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 brutalement un mot de passe en appelant Sudo true
un nombre illimité de fois sans qu'aucun courrier d'alerte de sécurité ne soit envoyé.
Remarque: utilisez toujours visudo
au lieu de votre éditeur favori pour modifier le fichier sudoers. Sinon, vous risquez d'être mis en lock-out.
La commande ci-dessous affichera une indication de couleur indiquant que vous avez obtenu l'autorisation Sudo. Vous vous souviendrez donc de faire un Sudo -k
avant de quitter la machine. C'est utile aussi 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 terminal, tapez bash
pour le tester. Il ajoutera également une ligne entière à chaque fois que vous exécuterez une commande contenant les informations relatives à l'heure de fin de la dernière commande. Vous pourrez ainsi déjeuner et savoir quand la dernière commande sera 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 unique Prompt), mais je pense qu'il est préférable de ne pas la gâcher.
PS .: pour OS-X, recherchez le commentaire ci-dessous de @nwinkler.
Avertissement
Selon Bugzilla Sudo ID de bogue = 590, l'appel de Sudo -n true 2&>/dev/null ; echo $?
deviendra bogué autour de Sudo -V 1.7.10
Lire Bugzilla [ici] ( http://bugzilla.Sudo.ws/show_bug.cgi?id=590 "ID de bogue = 590")
La plupart des gens ont probablement tendance à trop en faire, mais voici la fonction (posixly correcte) que j’utilise pour vérifier si Sudo
est déverrouillé (la fonction ne perdra pas son temps si son utilisateur est root
, car il n’est pas nécessaire de le déverrouiller. 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
Selon le manuel Sudo, la session Sudo est déterminée en fonction du fichier d'horodatage (/usr/lib/Sudo/<username>
). Vous pourrez ainsi savoir combien de temps il 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 contient trois fichiers avec un contenu crypté (ainsi que des horodatages étranges, mais /usr/lib/Sudo/<username>
semblait avoir un horodatage qui coïncidait avec le moment où j'ai donné à Sudo ma Je pense que /usr/lib/Sudo/<username>/0
a l'horodatage de la dernière exécution Sudo
.
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