Définir le PATH pour qu'il s'applique à tous les utilisateurs, y compris root / sudo

41

Les instructions de la section Comment définir des variables PATH pour tous les utilisateurs d'un serveur? travailler pour définir le PATH pour tous les utilisateurs «normaux». Cependant, si je le fais sudo -s, printenv PATHle chemin mis à jour n'est pas affiché. J'ai par exemple examiné la définition du chemin TeX Live pour root , mais cela ne me semble pas logique, peut-être parce que je suis issu d'un environnement Windows. Existe-t-il un moyen de définir un chemin véritablement à l'échelle du système, de sorte que les entrées soient héritées de tous les processus exécutés sur le système?

Joseph Wright
la source

Réponses:

43

Mise à jour:

La définition de variables d’environnement globales doit toujours être effectuée dans /etc/environment , mais comme vous l’avez indiqué, l’utilisation sudo -sde ces variables a pour effet de les "supprimer".

La raison en est sudoune politique de réinitialisation de l'environnement et de définition 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é par sudo.

La page de manuel pour les 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.

Pour contourner le problème, vous pouvez utiliser sudo suun shell doté des privilèges root, mais contenant le bon PATH.


Réponse originale

Vous devriez le mettre en /etc/environment .

Essayer sudo YOUR_TEXT_EDITOR /etc/environment (assurez-vous de créer d'abord une sauvegarde).

Pour plus d'informations: EnvironmentVariables

Variables d'environnement à l'échelle du système

Les paramètres de variable d’environnement qui affectent le système dans son ensemble (et non pas uniquement un utilisateur particulier) ne doivent pas figurer dans les nombreux scripts système exécutés lors du chargement de la session système ou de la session de bureau.

/etc/environment- Ce fichier est spécifiquement conçu pour les paramètres de variable d'environnement à l'échelle du système. Ce n'est pas un fichier de script, mais plutôt une expression d'affectation, une par ligne. Plus précisément, ce fichier stocke les paramètres régionaux et de chemin d'accès à l'échelle du système.

Non recommandé:

/etc/profile- Ce fichier est exécuté chaque fois qu'un shell de connexion bash est entré (par exemple, lors de la connexion à partir de la console ou via ssh), ainsi que par le DisplayManager lors du chargement de la session de bureau. C’est probablement le fichier auquel vous allez faire référence lorsque vous posez des questions à des administrateurs système UNIX expérimentés sur les variables d’environnement. Dans Ubuntu, toutefois, ce fichier n’appelle que très peu le fichier /etc/bash.bashrc.

/etc/bash.bashrc- Ceci est la version globale 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.

lgarzo
la source
Ah bon: pour moi c'est tout le contraire (tout le monde devrait hériter du même chemin, point final), mais je suppose que c'est comme ça.
Joseph Wright
Vous pouvez utiliser visudo(nécessite des autorisations root) pour modifier les paramètres du chemin sécurisé. ce n'est pas une pratique recommandée. C'est juste pour l'éducation.
Elliot Labs LLC
2

sudo -isimulera une connexion (de manière similaire à sudo su -) et vous donnera donc ces variables d’environnement.

Inkaphink
la source
1
Cela ne fonctionne pas de cette façon. Au moins PATH est réinitialisé sur mon Ubuntu Trusty test-vm.
Martijn Heemels