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

37

Les instructions dans Comment faire Je mets des variables PATH pour tous les utilisateurs sur un serveur? pour définir le 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 examiné par exemple Définition du chemin d'accès TeX Live pour root , mais cela ne semble pas avoir de sens pour moi, peut-être parce que je suis issu de Windows. Existe-t-il un moyen de définir le véritable chemin d'accès à l'échelle du système, de sorte que les entrées soient héritées par absolument tous les processus exécutés sur le système?

    
posée Joseph Wright 30.04.2012 - 11:48
la source

2 réponses

40

Mise à jour:

La définition des variables d’environnement globales doit toujours être effectuée dans /etc/environment , mais comme vous l’avez fait remarquer, en utilisant sudo -s , l’effet de ces variables est "disparu".

La raison en est que sudo a pour stratégie de réinitialiser l'environnement et de définir 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 /etc/environment pour le chemin est remplacé par sudo .

La page de manuel de sudoers indique:

   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 ce problème, vous pouvez utiliser sudo su qui fournira un shell avec des privilèges root mais contenant le PATH correct.

Réponse originale

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

Essayez 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

     

Paramètres de variables d'environnement qui affectent le système dans son ensemble   (plutôt qu’un utilisateur particulier) ne doit être placé dans aucun des   les nombreux scripts au niveau du système qui sont exécutés lorsque le système ou le   session de bureau sont chargés, mais dans

     

/etc/environment - Ce fichier est spécifiquement destiné aux paramètres de la variable d'environnement système. Ce n'est pas un fichier script, mais plutôt   se compose d'expressions d'affectation, une par ligne. Plus précisément, cette   Le fichier stocke les paramètres régionaux et les paramètres 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 depuis la console ou via ssh),   ainsi que par le DisplayManager lorsque la session du bureau est chargée. C'est   probablement le fichier auquel vous serez référé en demandant à un vétéran UNIX   administrateurs système sur les variables d'environnement. Dans Ubuntu, cependant,   Ce fichier n'invoque guère plus le fichier /etc/bash.bashrc.

     

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

    
réponse donnée lgarzo 30.04.2012 - 11:59
la source
1

sudo -i simulera une connexion (de la même façon que sudo su - ) et vous fournira donc ces variables d'environnement.

    
réponse donnée ℝaphink 15.10.2012 - 13:58
la source

Lire d'autres questions sur les étiquettes