J'ai récemment eu des problèmes à cause de ça.
$sudo vim /etc/motd
[sudo] password for bruce:
bruce is not in the sudoers file. This incident will be reported.
Y a-t-il un moyen de vérifier si j'ai un accès sudo ou non ?
J'ai récemment eu des problèmes à cause de ça.
$sudo vim /etc/motd
[sudo] password for bruce:
bruce is not in the sudoers file. This incident will be reported.
Y a-t-il un moyen de vérifier si j'ai un accès sudo ou non ?
Je n'ai pas un rang suffisant pour voter et commenter, mais je voulais mettre en avant la réponse de Gerald Schade, car j'ai trouvé que c'était la seule solution auparavant, et je pensais que personne d'autre ne la connaissait - jusqu'à maintenant :D
btw ma solution :
[[ "$(whereis sudo)" == *'/'* && "$(sudo -nv 2>&1)" != 'Sorry, user'* ]]
(depuis la fin de 2015 mwhahaaa)
"Sudo access" existe en plusieurs saveurs. Deux saveurs principales : Premièrement, vous, ou un groupe dont vous êtes membre, devez être configuré pour l'accès sudo dans le fichier /etc/sudoers.
Ensuite, vous devez connaître votre mot de passe, ou vous devez avoir effectué une commande sudo récemment. Assez récemment pour que le délai d'attente n'ait pas expiré. (Fait amusant : vous pouvez rendre le délai d'expiration très long dans votre fichier sudoer).
Je veux souvent tester le deuxième type d'accès dans le prologue d'un script qui aura besoin de sudo certaines étapes. Lorsque cette vérification échoue, je peux informer l'utilisateur qu'il doit activer le deuxième type d'accès avant d'exécuter le script.
bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is enabled.
bash-3.2$ sudo -K
bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is not enabled
Le -S indique à sudo de lire le mot de passe depuis stdin. L'option -p définit une invite vide. Le -K efface le deuxième temps d'accès.
Comme il envoie stderr à /dev/null, il vérifiera également si l'utilisateur a le premier type d'accès sudo.
# Verify if current user is root.
local current_username=$(whoami)
[[ "$current_username" == 'root' ]] && echo true && return 0
# Verify if sudo is installed.
if [[ $(validate_apt 'sudo') == 'false' ]]; then
echo false && return 0
fi
# Verify if the current user belongs to groups 'sudo' or 'root'.
local current_user_groups=$(groups $current_username)
if [[ $current_user_groups == *'root'* ]] ||
[[ $current_user_groups == *'sudo'* ]]; then
echo true && return 0
fi
# Verify if file /etc/sudoers.d/username exists.
if [[ -f /etc/sudoers.d/$current_username ]]; then
echo true && return 0
fi
Je veux vérifier le mode sudo pour une belle script interactivité/contrôle d'erreur.
J'aime bien Kenorb's réponse qui utilise le timeout, mais cela n'a pas fonctionné pour moi à cause du signal kill par défaut. J'ai donc modifié cette partie et ajouté quelques ajouts comme expliqué ci-dessous.
timeout -s SIGKILL 5s sudo -v && (echo SUDO Access Granted ; exit 0) || (echo SUDO Access Denied ; exit 1)
Explication :
-s SIGKILL
spécifie SIGKILL
comme un signal d'arrêt. Je préfère cela à SIGSTOP
car il est moins encombrant dans STDOUT. La liste complète des signaux de mise à mort peut être trouvée ici . Aussi SIGSTOP v.s. SIGKILL
Les signaux SIGKILL y SIGSTOP ne peut être attrapé, bloqué ou ignoré.
5s
indique 5 secondes, secondes est la valeur par défaut mais vous pouvez aussi utiliser m
minutes ou h
heures. Pour référence : Description du paramètre DURATION dans man timeout
sudo -v
pour les raisons indiquées dans la réponse choisie
exit 0
y exit 1
pour représenter les codes d'état de sortie de succès et d'échec respectivement. La liste complète des codes d'état de sortie se trouve à l'adresse suivante ici 1 , ici 2 y ici 3
;
était utilisé pour enchaîner les commandes Shell en ligne.&&
y ||
sont juste des expressions booléennes qui utilisent sudo -v
code de sortie. Si vous êtes confus, c'est juste booléen/logique. Évaluation des courts-circuits
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.