143 votes

Comment vérifier si j'ai un accès sudo ?

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 ?

168voto

Daniel Beck Points 105590

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.

63voto

Brad Dausses Points 677

C'est très simple. Exécutez sudo -l . Cela listera tous les privilèges sudo que vous avez.

22voto

ajneu Points 291

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

16voto

kenorb Points 22006

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 .

8voto

Gerald Schade Points 193

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).

SistemesEz.com

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.

Powered by:

X