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.


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


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.


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.