Question

Je veux pouvoir vérifier rapidement si j'ai un accès sudo et si mon mot de passe est déjà authentifié. Je ne m'inquiète pas d'avoir un accès sudo spécifiquement pour l'opération que je suis sur le point d'effectuer, mais ce serait un bonus intéressant.

Plus précisément, j'essaie d'utiliser ceci pour un script que je veux être en mesure d'exécuter par un éventail d'utilisateurs. Certains ont un accès sudo. Tous connaissent le mot de passe root.

Lorsqu’ils exécutent mon script, je souhaite qu’il utilise les autorisations sudo sans demander de mot de passe si cela est possible. Sinon, il demandera le mot de passe root (car ils n’auraient peut-être pas accès sudo).

Ma première tentative infructueuse a été de bifurquer sudo -S true avec STDIN fermé ou en lecture dans / dev / null. Mais cela demande toujours le mot de passe et attend quelques secondes.

J'ai essayé plusieurs autres choses, y compris attendre 0,3 seconde pour voir si cela a réussi immédiatement, mais tout ce que j'essaie finit par échouer dans certaines situations. (Et pas parce que mon délai d’attente est trop court.) C’est difficile de comprendre ce qui se passe, car je ne peux pas me contenter de faire comme si de rien était.

Une chose que je sais que ne fonctionne pas, c’est de fermer STDIN ou de l’attacher à un tuyau avant d’exécuter sudo -S true . J'espérais que l'invite du mot de passe échouerait immédiatement, mais il l'invite quand même et se comporte étrangement. Je pense que cela pourrait vouloir un terminal.

Était-ce utile?

La solution

Avec les nouvelles versions de sudo , il existe un option à cet effet:

sudo -n true

J'utilise true ici pour un no-op, mais vous pouvez utiliser n'importe quelle commande.

Autres conseils

Je ne sais pas quelle est la raison ultime de cette nécessité, mais je pense que vous devrez peut-être repenser quelle que soit la raison principale. Essayer de faire des choses compliquées et inhabituelles avec des permissions mène souvent à des failles de sécurité.

Plus précisément, ce que le script essaie de faire pourrait être mieux fait avec setuid plutôt que sudo. (Je devrais aussi me demander pourquoi tant de gens ont le mot de passe root. Sudo est là pour éviter de donner le mot de passe root à des personnes.)

getent group admin | grep $particular_user

Vous pouvez utiliser whoami pour obtenir l'utilisateur actuel.

Modifier: Mais cela ne vous aide pas à déterminer si vous êtes toujours autorisé à effectuer des tâches sudo ... Hmm ..

En cours d'exécution

sudo -S true < /dev/null &>/dev/null

semble fonctionner, même s’il attend une seconde avant d’échouer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top