Question Tester si un utilisateur a des privilèges sudo sans nécessiter de saisie de l'utilisateur


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és simplement avec sudo -v Cependant, cela nécessite que l'utilisateur entre son mot de passe. De plus, l'hôte distant semble avoir un délai instantané sudo, de sorte que la saisie du mot de passe est obligatoire à chaque nouvelle connexion. C'est quelque chose que je ne suis pas autorisé à modifier (en tant que stratégie).

Je peux bien sûr tester si l'utilisateur fait partie de certains groupes, mais cela ne serait pas non plus agnostique pour la configuration de l'hôte distant. J'espérais donc qu'il existe une méthode permettant de vérifier qu'il n'est pas nécessaire d'assumer les groupes de l'utilisateur. comme n'ayant pas besoin de la participation de l'utilisateur?

Merci!

UPDATE: Pour faire écho à mes commentaires, je veux seulement tester si un utilisateur peut éventuellement utiliser sudo, sans exiger d'interaction de l'utilisateur pour ce test.


12
2018-02-28 02:14


origine


avez-vous besoin de vérifier si l'utilisateur a la possibilité d'utiliser sudo ou s'il exécute le script shell via sudo? - Niko S P
Juste s'il a la possibilité. Le script local nécessitant la saisie ultérieure du mot de passe sudo, je souhaite simplement vérifier au plus tôt que l'utilisateur de l'hôte distant est même un sudoer. - DanH
une vérification rapide de ma boîte ubuntu m'a donné sudo -l, elle renvoie les commandes que l'utilisateur peut exécuter. Si (ALL) en fait partie, l'utilisateur peut utiliser sudo pour n'importe quelle commande. Peut-être que c'est le bon angle? - Niko S P
sudo -l me demande mon mot de passe. - ThatGraemeGuy
Sudo met en cache sur tty donc si une nouvelle session vous donne le même tty, il se peut que vous ne soyez pas invité. Essayez d'exécuter sudo -k premier. - Mark Wagner


Réponses:


Je crains que la seule chose que vous puissiez tester est si l'utilisateur a des privilèges sudo sans pour autant Un 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 de vérification pour un programme spécifique, modifiez true avec votre programme, en quelque sorte le programme ne fait rien, comme chmod --help


11
2018-03-06 18:04



Notez que cela n’aide pas la détection préliminaire si la commande X est sudocapable sans entrer de mot de passe et sans l'exécuter accidentellement - try-catch-finally


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

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

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


3
2017-08-27 21:38



Simplement sudo -n -l cmd et on vous dira si l'utilisateur actuel a un accès sudo à cmd. Si vous voulez tester le résultat. - Philippe A.


sudo -l

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


1
2017-08-27 21:46



Cela demande toujours un mot de passe sur mon système (Ubuntu 16.04). - Mario Vilas