En bref : comment faire sudo pour ne pas vider PATH à chaque fois?
J'ai des sites Web déployés sur mon serveur (test Debian) écrits avec Ruby on Rails. J'utilise Mongrel + Nginx pour les héberger, mais il y a un problème qui survient lorsque j'ai besoin de redémarrer Mongrel (par exemple après avoir apporté quelques modifications).
Tous les sites sont vérifiés dans VCS (git, mais ce n'est pas important) et le propriétaire et le groupe sont définis sur mon utilisateur, tandis que Mongrel s'exécute sous l'utilisateur, hein, bâtard qui est sévèrement restreint dans ses droits. Mongrel doit donc être démarré sous root (il peut changer automatiquement d'UID) ou mongrel.
Pour gérer mongrel, j'utilise mongrel_cluster gem car il permet de démarrer ou d'arrêter n'importe quelle quantité de serveurs Mongrel avec une seule commande. Mais il faut que le répertoire /var/lib/gems/1.8/bin soit dans PATH: cela ne suffit pas pour le démarrer avec un chemin absolu .
La modification de PATH dans root .bashrc n'a rien changé, les réglages env_reset et env_keep de sudo non plus.
Donc la question: comment ajouter un répertoire à PATH ou conserver le PATH de l'utilisateur dans sudo?
Mise à jour: quelques exemples
$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ sudo cat /etc/sudoers | egrep -v '^$|^#'
Defaults env_keep = "PATH"
root ALL=(ALL) ALL
%sudo ALL=NOPASSWD: ALL
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Je peux aussi dire que cela fonctionne exactement de cette façon dans Debian stable (lenny) aussi.
Réponses:
Aux prises avec le même problème pendant quelques heures. Dans debian lenny, vous pouvez le corriger en ajoutant
dans le fichier sudoers.
C'est le seul moyen de contourner l'option --secure-path compilée (pour autant que je sache).
Notamment, cela permettra également aux utilisateurs de ne pas avoir à saisir leur mot de passe lors de leur sudo.
la source
Si vous vous êtes
secure_path
installé/etc/sudoers
, vous pouvez jouer avecenv_reset
/env_keep
tout ce que vous aimez et cela ne fera aucune différence sur le chemin. Si vous voyez quelque chose comme ça, commentez-le.la source
Je dirais que regardez dans les options env_reset et env_keep dans man sudo . Mais il semble que vous l'ayez déjà fait (vous appelez juste par erreur env_keep "keepenv"). Si vous désactivez l'option env_reset (la valeur par défaut est activée), je pense que ce n'est pas censé effacer les variables env. Mais c'est moins sûr.
Il y a aussi une option secure_path pour sudo; Je pense que cela est activé par défaut. Vous pouvez essayer de le désactiver.
Les options précédentes sont définies dans votre fichier / etc / sudoers. Il y a aussi l'
-i
option de ligne de commande pour sudo. Cela entraînera sudo à exécuter /root/.profile ou /root/.login. Vous pouvez y définir le chemin souhaité.la source
Eh bien, vous faites quelque chose de mal. De plus, vous n'avez pas spécifié ce que vous avez fait avec votre fichier / etc / sudoers. Voici ce que vous auriez dû faire - c'est un système CentOS, BTW:
Tout d'abord, c'est avec le bon paramètre env_keep (notez que PATH est là):
Cela semble bon. Supprimons maintenant le paramètre env_keep et réessayons:
Quel triste CHEMIN:
la source