web-dev-qa-db-fra.com

Comment définir la variable d'environnement pour tous les utilisateurs même lorsque vous utilisez Sudo su?

J'ai créé un fichier nommé x.sh dans le répertoire /etc/profile.d/ afin qu'il soit accessible à tous les utilisateurs. Je pensais que lorsque je changerais l'utilisateur actuel dans le terminal (de l'utilisateur connecté) à l'aide de la commande Sudo su other_user, les variables que j'ai définies dans le fichier x.sh devraient être accessibles, mais elles ne le sont pas. Comment définir les variables pour qu'elles soient accessibles comme je le souhaite?

3
Soheil Pourbafrani

/etc/profile (et donc /etc/profile.d) est lu pour les shells de connexion. Sudo su other_user n'exécute pas de shell de connexion. C'est une mauvaise pratique, cela laisse l'environnement contaminé par des variables de l'utilisateur d'origine . Vous devriez faire l'une de ces commandes à la place:

Sudo -iu other_user
Sudo su - other_user

Ces deux systèmes chargent /etc/profile parce qu'ils démarrent des shells de connexion et qu'ils démarrent tous deux dans des environnements relativement propres.

Idéalement, les variables doivent être définies dans /etc/environment si possible. Ce fichier doit être lu par su, de sorte que les variables qui y figurent seront disponibles, qu'un shell de connexion soit démarré ou non. Cependant, ce fichier ne prend pas en charge la syntaxe Shell. Par conséquent, si vous avez besoin d'un code Shell complexe pour définir vos variables, vous ne pouvez pas l'utiliser.

5
Olorin

Après comment définir de manière permanente les variables d'environnement · U & Lbash va se charger

/etc/profile

c'est donc le bon endroit pour ajouter des variables efficaces pour tous les utilisateurs.

2
dessert