47 votes

Définir le PATH de manière à ce qu'il s'applique à tous les utilisateurs, y compris root/sudo

Les instructions dans Comment définir des variables PATH pour tous les utilisateurs d'un serveur ? pour définir le PATH de tous les utilisateurs "normaux". Cependant, si je fais sudo -s そして printenv PATH le chemin mis à jour n'est pas indiqué. J'ai jeté un coup d'œil, par exemple, à Définition du chemin d'accès à TeX Live pour la racine mais cela ne me semble pas logique, peut-être parce que je viens d'un environnement Windows. Existe-t-il un moyen de définir le chemin d'accès à l'échelle du système, de sorte que les entrées soient héritées par tous les processus en cours d'exécution sur le système ?

49voto

lgarzo Points 18302

Mise à jour :

La définition des variables d'environnement globales doit toujours être effectuée dans /etc/environment mais comme vous l'avez souligné, l'utilisation de sudo -s a l'effet de ces variables sont "disparus".

La raison en est la suivante sudo a une politique de réinitialisation de l'environnement et la fixation d'un chemin sécurisé . Il est activé par défaut :

/etc/sudoers:

Defaults  env_reset
Defaults  secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Ainsi, tout ce qui est défini dans le /etc/environment pour le chemin est remplacée par sudo .

La page de manuel pour sudoers États :

   env_reset       If set, sudo will reset the environment to only contain
                   the LOGNAME, MAIL, SHELL, USER, USERNAME and the SUDO_*
                   variables.  Any variables in the caller's environment
                   that match the env_keep and env_check lists are then
                   added.  The default contents of the env_keep and
                   env_check lists are displayed when sudo is run by root
                   with the -V option.  If the secure_path option is set,
                   its value will be used for the PATH environment
                   variable.  This flag is on by default.

En guise de solution de contournement, vous pouvez utiliser sudo su qui fournira un Shell avec les privilèges de root mais contenant le bon PATH.


Réponse originale

Vous devez le définir dans /etc/environment .

Essayer sudo YOUR_TEXT_EDITOR /etc/environment (veillez à créer une sauvegarde au préalable).

Pour plus d'informations : Variables d'environnement

Variables d'environnement pour l'ensemble du système

Les paramètres des variables d'environnement qui affectent le système dans son ensemble (plutôt qu'un utilisateur particulier) ne doivent pas être placés dans l'un des les nombreux scripts au niveau du système qui sont exécutés lorsque le système ou la session de bureau sont chargés. session de bureau sont chargées, mais dans

/etc/environment - Ce fichier est spécifiquement destiné à la définition de variables d'environnement pour l'ensemble du système. Ce n'est pas un fichier script, mais plutôt consiste en des expressions d'affectation, une par ligne. Plus précisément, ce fichier stocke les paramètres linguistiques et les chemins d'accès de l'ensemble du système.

Non recommandé :

/etc/profile - Ce fichier est exécuté chaque fois qu'un login bash Shell est saisi (par exemple, lors d'une connexion à partir de la console ou de ssh), ainsi que par le DisplayManager lorsque la fonction de désynchronisation est activée (par exemple, lorsque la fonction de désynchronisation est activée). ainsi que par le DisplayManager lors du chargement de la session de bureau. C'est probablement le fichier auquel vous ferez référence lorsque vous demanderez à un vétéran de l'administration du système UNIX sur les variables d'environnement. Dans Ubuntu, cependant, ce fichier ne fait rien d'autre que d'invoquer le fichier /etc/bash.bashrc.

/etc/bash.bashrc - Il s'agit de la version système du fichier ~/.bashrc. Ubuntu est configuré par défaut pour exécuter ce fichier chaque fois qu'un utilisateur entre dans un Shell ou dans l'environnement de bureau.

3voto

gbc Points 4019

sudo -i simulera une connexion (de manière similaire à sudo su - ) et vous donne donc ces variables d'environnement.

0voto

Pravin Keshav Points 1

Au cas où nous devrions ajouter /usr/local/bin en root's PATH en ajoutant la même entrée dans /etc/sudoers puis utiliser la commande sed comme suit

sudo sed -i '/^Defaults secure_path/ s/$/\:\/usr\/local\/\bin/' /etc/sudoers

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