4 votes

Comment faire une vérification sudo qui dure assez longtemps pour que le make (non privilégié) puisse terminer ?

J'utilise souvent la construction suivante pour construire et installer une archive :

sudo -v && make && sudo make install

ce qui me permettra d'entrer immédiatement mon mot de passe et de tout faire sans surveillance. Cela fonctionne bien, sauf dans les rares cas où la construction prend plus de temps que le temps prévu. sudo ce qui peut se produire sur ma machine plutôt lente avec de gros projets (même en utilisant la fonction make -j4 ).

Mais lorsque la construction prend beaucoup de temps, c'est exactement là que le fait de faire les choses sans surveillance présente un grand avantage. Quelqu'un peut-il penser à une construction Shell qui me permet d'entrer mon mot de passe immédiatement, et qui a make s'exécutant sous des permissions normales et make install sous des permissions élevées ?

Pour des raisons de sécurité, je ne veux pas configurer mon utilisateur pour qu'il utilise la fonction sudo sans mot de passe.

Une option viable consiste à définir un délai d'attente très long, mais j'espère quelque chose de plus élégant.

3voto

Flimm Points 36395

Une fois que vous avez obtenu les privilèges de root, vous pouvez utiliser sudo à nouveau pour exécuter une commande en tant qu'utilisateur non root :

sudo bash -c "sudo -u $USER non-root-user-command ; root-command"

Notez que vous devez utiliser des guillemets doubles, et non des guillemets simples. Si vous utilisez des guillemets simples, $USER sera remplacé par root ce qui ne permettra pas d'atteindre le résultat souhaité. J'espère que ces commandes illustreront mon propos :

$ sudo bash -c "echo $USER"
david
$ sudo bash -c 'echo $USER'
root

Prenons donc l'exemple mentionné dans la question :

 make && sudo make install

Cela deviendrait :

 sudo bash -c "sudo -u $USER make && make install"

2voto

Brad Larson Points 122629

Je pense que c'est la meilleure façon de faire :

make | sudo bash -c 'cat - && make install'

Cela permettra de démarrer les deux make et sudo simultanément, avec sudo qui vous demande votre mot de passe. Pendant ce temps, make envoie toute sa sortie vers le tuyau, qui est lu par la fonction cat commandement. Une fois que cela est fait, make install est exécuté. Il est invoqué à partir de l'élément bash qui a toujours des permissions élevées, donc il n'y a pas de problème de timeout.

0voto

Rinzwind Points 270388

La méthode la plus simple qui ne nécessite pas de modifier vos fichiers système :

echo {password} | sudo -S -v && make && echo {password} | sudo -S make install

Cela permettra au script de s'exécuter sans demander de mot de passe.

Toutefois, cette méthode présente un risque pour la sécurité puisque vous stockez votre mot de passe en texte clair.


D'autres méthodes peuvent être trouvées ici mais la plupart concernent l'édition de fichiers système.


éditer : Si vous ajoutez un espace devant le premier écho, la commande ne sera pas affichée dans l'historique de bash.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X