Utilisation de Sudo 1.7.4p4 sous Solaris 5.10 et de Sudo 1.6.7p5 sous RHEL4 u6 Je ne vois pas comment préserver mes variables d'environnement, par exemple $ PYTHONPATH. J'ai ajouté cette ligne à sudoers, mais cela ne fait aucune différence:
Defaults !env_reset
Est-ce que je fais quelque chose de mal ou est-ce que l'installation de Sudo ne respecte tout simplement pas le drapeau env_reset?
Edit: au moins sous Solaris, nous avons constaté que ce problème dépendait du shell! Le shell racine standard est Bourne. Par contre, si nous exécutons bash sous Sudo (Sudo bash
),! Env_preset préservera l'environnement (notamment PATH et LD_LIBRARY_PATH). C'est un comportement plutôt déroutant, je dois le dire.
À utiliser avec précaution, il existe des problèmes de sécurité avec Sudo et les variables.
De man sudoers
j'ai trouvé que vous devriez utiliser
Valeurs par défaut env_reset Valeurs par défaut env_keep + = "PYTHONPATH OTHERVARIABLE YETANOTHER"
Dans Ubuntu, Sudo
préserve certaines variables. Sudo -i
s'apparente davantage à la connexion en tant que root, puis à l'exécution de la commande. Les deux peuvent être gênants, le premier pour Sudo nano myfile
laisse des fichiers appartenant à la racine à l'intérieur de votre maison et le dernier pour Sudo -i nano myfile
essaiera d'ouvrir/root/monfichier.
Courir
Sudo printenv PATH
et voir ce que ça donne. Ici ça donne
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
par exemple. Maintenant, lancez Sudo visudo
et ajoutez la ligne
Defaults secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
en remplaçant par ce que vous avez trouvé juste avant. Ajoutez-y un nouveau chemin si vous en avez besoin.
A propos des bibliothèques:
Sudo LD_LIBRARY_PATH=/usr/lib/path/to/a/safe/library your command
Les distributions Linux prennent beaucoup de soin avec PATH
, et vous devriez vraiment faire attention avant de jouer avec. Faites particulièrement attention en ajoutant des chemins tels que ".
" ou /home/username
, cela n’est pas sécurisé.
L'un des dangers de l'ajout de chemins d'accès est que cela ouvre la possibilité que des fichiers sur ces chemins soient exécutés par root
, ouvrant une fenêtre dans la sécurité du système susceptible d'être exploitée par des logiciels malveillants. Il peut y avoir d'autres dangers. Assurez-vous simplement de savoir ce que vous faites. Ignorer les mesures de sécurité Sudo
peut rendre votre Solaris aussi sûr que Windows XP.
Il est prudent de jouer avec sudoers
, comme d’autres l’ont dit.
Une approche plus simple pour les cas plus simples lorsque vous souhaitez préserver des variables d'environnement particulières consiste à simplement transmettre la variable d'environnement de votre choix directement via Sudo (le code [VAR=value]
apparaît dans l'aide de la ligne de commande Sudo).
Voir ce petit exemple où je l'ai également démontré pour plus d'une variable.
$ export MY_V1=1
$ export MY_V2=2
$ printenv | grep MY_V
MY_V2=2
MY_V1=1
$ Sudo MY_V1=$MY_V1 MY_V2=$MY_V2 printenv | grep MY_V
MY_V2=2
MY_V1=1
Pour l'exemple PYTHONPATH
d'origine dans la question, utilisez simplement les éléments suivants:
$ Sudo PYTHONPATH=$PYTHONPATH python some_script.py
<script_output_here>
Créer un alias pour ce genre de chose est pratique. Ainsi:
$ alias sudopy='Sudo PYTHONPATH=$PYTHONPATH'
Votre Defaults !env_reset
a l'air OK, en supposant que vous n'appeliez pas également Sudo avec l'option -E
.
Vous pouvez essayer de supprimer complètement cette entrée.
Avez-vous vérifié que vous éditez le bon fichier sudoers? Je suppose que ce pourrait être /etc/sudoers
ou /usr/local/etc/sudoers
en fonction de la façon dont il a été installé. L'avez-vous édité avec visudo
?
Comment ça va sudo? Sudo python
, Sudo su
, Sudo su -
, Sudo -s
, autre chose? Seuls Sudo python
et Sudo su
préservent votre environnement.
Que dit env | grep PYTHONPATH
? S'il n'y a rien, assurez-vous que PYTHONPATH est exporté en exécutant export PYTHONPATH
et essayez à nouveau.
Que dit Sudo env | grep PYTHONPATH
? S'il imprime la valeur attendue, quelque chose d'autre remplace votre valeur PYTHONPATH. Peut-être que root .bashrc ou .bash_profile ou les fichiers de configuration du système.