Tester si un utilisateur dispose des privilèges sudo sans nécessiter d'entrée utilisateur

12

J'ai un script shell local qui effectue un certain nombre de tests sur un hôte distant, avant de livrer la charge utile; l'un de ces tests étant de savoir si l'utilisateur a des privilèges sudo, vérifié simplement avec sudo -vcependant cela nécessite que l'utilisateur entre son mot de passe. De plus, l'hôte distant semble avoir un délai d'expiration sudo instantané, donc la saisie du mot de passe est requise à chaque nouvelle connexion, et c'est quelque chose que je n'ai pas l'autorisation de modifier (en tant que politique).

Je peux bien sûr tester si l'utilisateur fait partie de certains groupes, mais cela ne serait pas agnostique pour la configuration de l'hôte distant, alors j'espérais qu'il existe une méthode qui peut vérifier qui n'a pas besoin de supposer les groupes de l'utilisateur, ainsi comme ne nécessitant pas d'entrée utilisateur?

Merci!

MISE À JOUR: Pour faire écho à mes commentaires, je veux seulement tester si un utilisateur pourrait éventuellement sudo, sans nécessiter d'interaction de l'utilisateur pour ce test.

DanH
la source
devez-vous vérifier si l'utilisateur a la possibilité d'utiliser sudo ou s'il exécute le script shell via sudo?
Niko SP
Juste s'il en a la possibilité. Le script local nécessitera la saisie du mot de passe sudo plus tard, donc je veux juste vérifier très tôt que l'utilisateur sur l'hôte distant est même un sudoer.
DanH
une vérification rapide de ma boîte ubuntu m'a donné sudo -l, il retourne les commandes que l'utilisateur peut exécuter, si (ALL) ALL en fait partie, l'utilisateur peut utiliser sudo pour n'importe quelle commande. C'est peut-être le bon angle?
Niko SP
1
sudo -lme demande mon mot de passe.
ThatGraemeGuy
1
Les caches Sudo basés sur tty, donc si une nouvelle session vous donne le même tty, vous ne serez peut-être pas invité. Essayez d' sudo -kabord d' exécuter .
Mark Wagner

Réponses:

13

Je crains que la seule chose que vous puissiez tester est de savoir si l'utilisateur a les privilèges sudo sans mot de passe.

Exécuter

sudo -n true

Si $? est 0, l'utilisateur a un accès sudo sans mot de passe, si $? est 1, l'utilisateur a besoin d'un mot de passe.

Si vous avez besoin d'une vérification pour un programme spécifique, changez trueavec votre programme, d'une manière que le programme ne fait rien, commechmod --help

erickzetta
la source
1
Notez que cela n'aide pas à détecter au préalable si la commande Xest sudocapable sans entrer de mot de passe et sans l'exécuter accidentellement
try-catch-finally
3

Si vous avez un utilisateur avec accès sudo, comme "root", vous pouvez l'utiliser pour vérifier d'autres connexions. En tant qu'utilisateur avec accès, exécutez:

sudo -n -l -U foo 2> & 1 | egrep -c -i "non autorisé à exécuter sudo | utilisateur inconnu"

S'il retourne zéro, "foo" a accès. Sinon, il n'a pas accès à sudo.

Todd Moyer
la source
3
Simplement sudo -n -l cmdet on vous dira si l'utilisateur actuel a accès sudo à cmd. Si vous voulez tester le résultat.
Philippe A.
1

sudo -l

Cela devrait vous donner suffisamment pour décider si vous avez les privilèges dont vous avez besoin / besoin.

dmourati
la source
1
Cela demande toujours un mot de passe dans mon système (Ubuntu 16.04).
Mario Vilas
1

Je sais que c'est une super vieille question, mais j'ai trouvé la chance avec le -ndrapeau (non interactif) et -v/ -l. Mais, vous devez inspecter la sortie:

$ sudo -vn && sudo -ln  #User with cached credentials
User adminuser may run the following commands on computername:
    (ALL) ALL
$ sudo -vn && sudo -ln  #User who _can_ sudo but isn't cached
sudo: a password is required
$ sudo -vn && sudo -ln  #User who can't at all
Sorry, user nonadmin may not run sudo on computername.

Un peu de redirection de sortie et de grepping vous y amènera probablement:

if (sudo -vn && sudo -ln) 2>&1 | grep -v 'may not' > /dev/null; then
  #they're cool
  exit 0 #Or, whatever
fi
Matt Moretti
la source