web-dev-qa-db-fra.com

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

Les instructions de Comment définir des variables PATH pour tous les utilisateurs d'un serveur? permettent de définir le paramètre PATH pour tous les utilisateurs "normaux". Cependant, si je fais Sudo -s puis printenv PATH le chemin mis à jour n'est pas affiché. J'ai jeté un coup d'œil par exemple à Définition du chemin TeX Live pour root , mais cela ne semble pas avoir de sens pour moi, 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?

42
Joseph Wright

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 de Sudo -s a pour effet que ces variables sont "disparues".

La raison en est que Sudo a une politique de réinitialisant l'environnement et définissant 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 sudoers se lit comme suit:

   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 des privilèges root, mais contenant le bon PATH.


Réponse originale

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

Essayez Sudo YOUR_TEXT_EDITOR /etc/environment (assurez-vous d’abord de créer 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 (plutôt qu'un simple utilisateur) 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, mais dans

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

44
lgarzo

Sudo -i simulera une connexion (de la même manière que Sudo su -) et vous donnera donc ces variables d'environnement.

1
ℝaphink