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 ?
Exécuter sudo -v
. Il est généralement utilisé pour prolonger le délai d'expiration de votre mot de passe sudo, mais il peut être utilisé pour déterminer si vous avez des sudo
les privilèges.
$ sudo -v
Sorry, user [username] may not run sudo on [hostname].
Extrait de la page d'accueil :
Si l'option -v (valider) lui est donnée, sudo mettra à jour l'horodatage de l'utilisateur, en demandant le mot de passe de l'utilisateur si nécessaire. Ceci prolonge le délai d'attente de sudo de 5 minutes (ou tout autre délai d'attente défini dans sudoers) mais ne lance pas de commande.
Si votre utilisateur est seulement autorisé à exécuter spécifique cette commande fonctionnera, indiquant que vous êtes autorisé à exécuter les commandes algo avec des privilèges différents. Bien que le message semble différent lorsque vous essayez d'exécuter une commande que vous n'êtes pas autorisé à faire dans ce cas (et aucun courrier n'est envoyé à la racine ), il est toujours possible que vous ayez des problèmes si les administrateurs lisent /var/log/secure
.
$ sudo ls
[sudo] password for [username]:
Sorry, user [username] is not allowed to execute '/bin/ls' as root on [hostname].
Pour savoir qué que vous êtes autorisé à exécuter avec différents privilèges, vous pouvez utiliser sudo -l
. Notez que cette commande vous demande de saisir votre mot de passe.
La réponse de Gerald Schade ici On peut encore l'améliorer !
Utilisez
prompt=$(sudo -nv 2>&1)
if [ $? -eq 0 ]; then
# exit code of sudo-command is 0
echo "has_sudo__pass_set"
elif echo $prompt | grep -q '^sudo:'; then
echo "has_sudo__needs_pass"
else
echo "no_sudo"
fi
Voici un exemple complet d'utilisation dans un script :
#!/usr/bin/env bash
is_root () {
return $(id -u)
}
has_sudo() {
local prompt
prompt=$(sudo -nv 2>&1)
if [ $? -eq 0 ]; then
echo "has_sudo__pass_set"
elif echo $prompt | grep -q '^sudo:'; then
echo "has_sudo__needs_pass"
else
echo "no_sudo"
fi
}
elevate_cmd () {
local cmd=$@
HAS_SUDO=$(has_sudo)
case "$HAS_SUDO" in
has_sudo__pass_set)
sudo $cmd
;;
has_sudo__needs_pass)
echo "Please supply sudo password for the following command: sudo $cmd"
sudo $cmd
;;
*)
echo "Please supply root password for the following command: su -c \"$cmd\""
su -c "$cmd"
;;
esac
}
if is_root; then
echo "Error: need to call this script as a normal user, not as root!"
exit 1
fi
elevate_cmd which adduser
Voici la version script conviviale :
timeout 2 sudo id && echo Access granted || echo Access denied
puisqu'il ne bloquera pas sur la saisie du mot de passe si vous n'avez pas la sudo
accès.
Vous pouvez également le définir dans une variable comme :
timeout 2 sudo id && sudo="true" || sudo="false"
echo "$sudo"
Remarque : Sous macOS, vous devez installer coreutils
par exemple brew install coreutils
.
Pour moi, sudo -v
et sudo -l
' ne fonctionnait pas dans un script car parfois interactif (me demandant un mot de passe, comme mentionné ci-dessus). ' sudo -n -l
Le code de sortie '1' a été obtenu alors que j'ai les droits sudo, en raison de l'absence de mot de passe. Mais en étendant la commande à :
A=$(sudo -n -v 2>&1);test -z "$A" || echo $A|grep -q asswor
a réussi pour moi pour le script. Cette expression donne 0
si l'utilisateur actuel peut appeler 'sudo' et 1
si non.
Explication :
Le paramètre supplémentaire -n
a sudo
empêche l'interactivité.
Le résultat $A
de la commande ' sudo -n -v 2>&1
peut être :
- vide (dans ce cas, sudo peut être appelé par l'utilisateur actuel), ou :
- une note indiquant que l'utilisateur actuel n'est pas autorisé pour sudo, ou :
- un texte d'interrogation pour le mot de passe (dans ce cas, l'utilisateur est autorisé).
("asswor" convient aussi bien pour un "password" anglais que pour un "Passwort" allemand).
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.