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


J'ai récemment eu des problèmes à cause de cela.

$sudo vim /etc/motd 
[sudo] password for bruce: 
bruce is not in the sudoers file.  This incident will be reported.

Est-il possible de vérifier si j'ai un accès sudo ou non?


76
2018-02-18 19:36


origine


Demandez à votre administrateur système? - mdpc
@mdpc: Y a-t-il autre chose à part ça? - Bruce
Vous n'avez pas mentionné si vous pouvez accéder à la racine ou non. - mdpc
Cela doit être la première instance de voir quelqu'un faire le suivi de "cet incident sera signalé". - slhck


Réponses:


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

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

Extrait de la page de manuel:

Si l'option -v (valider) est donnée, sudo mettra à jour l'horodatage de l'utilisateur, en lui demandant si nécessaire le mot de passe de l'utilisateur. Cela prolonge le délai d'expiration de sudo de 5 minutes (ou du délai d'expiration défini dans sudoers), mais n'exécute pas de commande.

Si votre utilisateur est uniquement autorisé à exécuter spécifique commandes, cette commande fonctionnera, indiquant que vous êtes autorisé à exécuter quelque chose avec différents privilèges. Alors que le message semble différent lorsque vous essayez d'exécuter une commande, vous n'êtes pas autorisé à le faire dans ce cas (et aucun mail n'est envoyé à root), il est toujours possible que vous aurez 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].

Découvrir quelle vous êtes autorisé à utiliser différents privilèges, vous pouvez utiliser sudo -l. Notez que cette commande vous oblige à entrer votre mot de passe.


94
2018-02-18 19:51



Merci. sudo -v fonctionne pour moi. La page de manuel indique que je peux également lancer sudo -l mais cela demande un mot de passe. Pourquoi donc? - Bruce
@Bruce Je devine ici, mais sinon quelqu'un (ou un programme que vous exécutez) pourrait trouver quels programmes peuvent être exécutés (éventuellement sans entrer le mot de passe) par votre utilisateur actuel et essayer d'utiliser ces informations avec malveillance. - Daniel Beck♦
D'après vous, que signifie-t-il quand je reviens: patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>? J'ai entré mon mot de passe et je n'ai rien reçu concernant les personnes non autorisées. Je sais que j'ai sudo d'exécuter avec succès d'autres commandes, mais que unable to resolve host Le message me préoccupe, quelque chose d'autre pourrait être génial sur l'hôte. - Patrick M
@PatrickM Cela ressemble à un problème avec le sudoers fichier. Vous pouvez y spécifier sur quel hôte un utilisateur est autorisé à exécuter une commande spécifique (cela est utile lorsque vous utilisez le même sudoers fichier sur plusieurs machines). Le nom d'hôte spécifié dans ce fichier n'a peut-être pas pu être résolu. Essayez de le vérifier avec le host commande par exemple. - Ale
Ne travaille pas pour moi sur RHEL 6, sudo -v a donné "xx n'est pas dans le fichier sudoers. Cet incident sera signalé." - 79E09796


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


37
2017-12-17 22:55



Peut-être réduit à néant parce que cela répète ce que Daniel Beck a dit il y a près de deux ans. - G-Man
Ou explique ce qui se passe, c'est un commentaire, au mieux - Ramhound
@ Jonathan: Si tu écrivais ubuntu rigt maintenant, sudo -l demande un mot de passe si vous pouvez sudo ou pas. sudo -v demande seulement si tu peux, et "$(whoami)" != "root" ne demandera jamais rien dans aucun linux. - bksunday
@bksunday Vous avez raison J'ai testé maintenant sur une Debian Jessy propre et confirmé vos résultats. Mon commentaire précédent (supprimé maintenant) était probablement le résultat de tests sur une machine sur laquelle j'avais quelques sudo privs. - Jonathan Ben-Avraham
@ G-Man mais cette réponse simple m'a aidé plus que probablement la réponse plus précise de Daniel, où cette commande est la fin malheureuse ... - Betlista


Voici la version conviviale du script:

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

car il ne sera pas bloqué sur la saisie du mot de passe si vous n'avez pas le sudo accès.

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

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

Remarque: sur macOS, vous devez installer coreutils, par exemple. brew install coreutils.


5
2018-06-14 00:49



Toutes les alternatives pour où timeout n'est pas disponible par défaut, par ex. sur OS X? - Harry
Vous devez installer coreutils, par exemple. brew install coreutils. - kenorb


"Accès Sudo" se décline en saveurs. Deux variantes principales: Tout d'abord, vous ou un groupe dont vous êtes membre, devez être configuré pour accéder à 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 que le délai d'attente n'a pas expiré. (Fait amusant: vous pouvez faire une pause très longue dans le fichier de votre sudoer).

Je veux souvent tester le deuxième type d'accès dans le prologue d'un script qui nécessite quelques é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 de stdin. Le -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.


1
2017-08-30 17:58





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'a également pas fonctionné, il a donné le code de sortie' 1 'bien que j'ai des permissions sudo, à cause du mot de passe manquant. Mais étendre 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 non.

Explication:
Le paramètre supplémentaire -n à 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 de question pour le mot de passe (dans ce cas, l'utilisateur est autorisé).
("asswor" convient pour un "mot de passe" anglais ainsi que pour un "Passwort" allemand).


1
2018-02-28 02:27





J'ai le rang bas pour voter et commenter, mais je voulais donner une réponse à Gerald Schade, car j’ai trouvé que c’était la seule façon de le faire auparavant, et pensais que personne ne le savait - jusqu’à maintenant: D

btw ma solution:

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

(à partir de fin 2015 mwhahaaa)


1
2017-10-01 22:31



Relire "Pourquoi ai-je besoin de 50 points de réputation pour commenter" pour vous assurer de comprendre comment vous pouvez commencer à commenter. - Pimp Juice IT


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

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

0
2017-12-30 18:57



Le premier script m'a aidé, merci! - JRichardsz


Suivre celles-ci étapes pour afficher le fichier sudoers. Si vous êtes là-bas, vous avez sudo. Sinon, vous pouvez vous ajouter.

  1. su
  2. visudo
  3. Bas du fichier, entrez your_username_here ALL=(ALL) ALL
  4. Frappé ESC et taper :wq
  5. Type exit
  6. Ré-exécuter votre commande qui avait besoin sudo
  7. Entrez votre mot de passe (pas le mot de passe de la racine)

-3
2018-02-18 19:41



L'OP "a eu des problèmes" pour la course sudo, donc il n'est probablement pas la administrateur système, ni même l'un des administrateurs système d'élite. Il est probablement juste un utilisateur qui pensait avoir obtenu des pouvoirs limités. Qu'est-ce qui vous fait croire qu'il peut partir su? - Scott