2013-02-18 19:36:35 +0000 2013-02-18 19:36:35 +0000
108
108
Advertisement

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

Advertisement

J'ai récemment eu des ennuis à cause de cela.

$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 ?

Advertisement
Advertisement

Réponses (9)

123
123
123
2013-02-18 19:51:06 +0000

Run sudo -v. Il est généralement utilisé pour prolonger le délai d'attente de votre mot de passe sudo, mais peut être utilisé pour déterminer si vous avez des privilèges sudo.

$ sudo -v
Sorry, user [username] may not run sudo on [hostname].

Extrait de la page de manuel :

Si l'option -v (valider) est activée, sudo mettra à jour l'horodatage de l'utilisateur, en lui demandant son mot de passe si nécessaire. Cela prolonge le délai d'attente de sudo de 5 minutes supplémentaires (ou quel que soit le réglage du délai d'attente dans sudoers) mais n'exécute pas de commande.

Si votre utilisateur n'est autorisé à exécuter que des commandes spécifiques, cette commande fonctionnera, indiquant que vous êtes autorisé à exécuter quelque chose 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é à exécuter dans ce cas (et aucun courrier n'est envoyé à root ), il est toujours possible que vous ayez des ennuis 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 que vous êtes autorisé à exécuter avec des privilèges différents, vous pouvez utiliser sudo -l. Notez que cette commande vous demande d'entrer votre mot de passe.

43
43
43
2014-12-17 22:55:06 +0000

C'est très simple. Exécutez sudo -l. Cela va lister tous les privilèges sudo dont vous disposez.

12
Advertisement
12
12
2016-06-14 00:49:56 +0000
Advertisement

Voici la version compatible avec les scripts :

timeout 2 sudo id && echo Access granted || echo Access denied

car elle ne se bloque pas sur la saisie du mot de passe si vous n'avez pas l'accès à sudo.

Vous pouvez également la définir dans une variable comme :

timeout 2 sudo id && sudo="true" || sudo="false"
echo "$sudo"

Note : Sur macOS, vous devez installer coreutils, par exemple brew install coreutils.

9
9
9
2017-12-30 18:57:38 +0000

La réponse de Gerald Schade ici , peut encore être améliorée !

Utilisation

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
3
Advertisement
3
3
2017-02-28 02:27:06 +0000
Advertisement

Pour moi, “sudo -v” et “sudo -l” n'ont pas fonctionné dans un script parce que parfois interactif (me demandant un mot de passe, comme mentionné ci-dessus). sudo -n -l“ ne fonctionnait pas non plus, il donnait le code de sortie "1” alors que j'ai des autorisations sudo, à cause du mot de passe manquant. Mais l'extension de la commande à :

A=$(sudo -n -v 2>&1);test -z "$A" || echo $A|grep -q asswor

a été un succès pour moi pour le script. Cette expression donne 0 si l'utilisateur actuel peut appeler “sudo” et 1 si ce n'est pas le cas.

Explication : Le paramètre supplémentaire -n à sudo empêche l'interactivité. La sortie $A de la commande ‘sudo -n -v 2>&1’ peut être : - vide (dans ce cas, sudo peut être appelé par l'utilisateur courant), ou : - une note indiquant que l'utilisateur courant n'est pas autorisé à utiliser sudo, ou : - un texte de question pour le mot de passe (dans ce cas, l'utilisateur est autorisé). (“asswor” conviendra pour un “mot de passe” anglais ainsi que pour un “Passwort” allemand).

2
2
2
2017-10-01 22:31:29 +0000

J'ai un rang peu élevé pour voter et commenter, mais je voulais voter la réponse de Gerald Schade, car j'ai trouvé que c'était le seul moyen auparavant, et je pensais que personne d'autre ne le savait - jusqu'à présent :D

à propos de ma solution :

[["$(whereis sudo)" == *'/'* && "$(sudo -nv 2>&1)" != 'Sorry, user'*]]

(à partir de la fin 2015 mwhahaaa)

1
Advertisement
1
1
2020-02-11 09:15:13 +0000
Advertisement

Cela devrait suffire à vous dire si vous avez le statut de root ou non :

sudo whoami

Si sudo demande le mot de passe de root, ou s'il ne fonctionne pas, cela signifie également que vous n'avez pas les privilèges de root (du moins pas par le biais de sudo).

1
1
1
2016-08-30 17:58:05 +0000

“Accès Sudo” se décline en plusieurs saveurs. Deux saveurs principales : Premièrement, vous, ou un groupe dont vous êtes membre, devez être configuré pour un accès sudo dans le fichier /etc/sudoers.

Deuxièmement, 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 voir le délai d'attente très long dans votre fichier sudoer).

J'ai souvent envie de tester le deuxième type d'accès dans le prologue d'un script qui devra sudo quelques étapes. Lorsque cette vérification échoue, je peux conseiller à l'utilisateur d'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. Le -p définit une invite vide. Le -K efface le deuxième type d'accès.

Comme il envoie stderr à /dev/null, il vérifie également si l'utilisateur a le premier type d'accès sudo.

-5
Advertisement
-5
-5
2013-02-18 19:41:36 +0000
Advertisement

Suivez les étapes these pour consulter le fichier sudoers. Si vous y êtes, vous avez sudo. Sinon, vous pouvez vous ajouter.

  1. su
  2. visudo
  3. En bas du fichier, entrez your_username_here ALL=(ALL) ALL
  4. Appuyez sur ESC et tapez :wq
  5. Tapez exit
  6. Ré-exécutez la commande dont vous aviez besoin sudo
  7. Entrez votre mot de passe (pas celui de l'administrateur)
Advertisement

Questions connexes

6
10
5
37
10
Advertisement
Advertisement