Comment puis-je m'assurer qu'une variable d'environnement (GRAILS_HOME
par exemple) est définie quand I Sudo
?
J'ai mis un script dans mon /etc/profile.d
avec cette valeur et je l'ai fait ugo+x
. Que dois-je faire pour que cela soit visible au super utilisateur?
Essayer avec
Sudo su -
Le -
charge tous les fichiers d'environnement. De man su
:
-, -l, --login
Provide an environment similar to what the user would expect had
the user logged in directly.
When - is used, it must be specified as the last su option. The
other forms (-l and --login) do not have this restriction.
Mise à jour: Dans le cas général, vous exécutez Sudo -i mycomment
, comme le dit la page de manuel de Sudo
,
-i [command]
The -i (simulate initial login) option runs the Shell
specified in the passwd(5) entry of the target user as a
login Shell. This means that login-specific resource files
such as .profile or .login will be read by the Shell. If a
command is specified, it is passed to the Shell for
execution. Otherwise, an interactive Shell is executed.
Sudo attempts to change to that user's home directory
before running the Shell. It also initializes the
environment, leaving DISPLAY and TERM unchanged, setting
HOME, Shell, USER, LOGNAME, and PATH, as well as the
contents of /etc/environment on Linux and AIX systems. All
other environment variables are removed.
Selon cette réponse: Paramétrez PATH de manière à ce qu'il s'applique à tous les utilisateurs, y compris root/Sudo si vous notez que Sudo réinitialise toutes les variables et le chemin par défaut.
Bit pertinent:
La page de manuel pour 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.
Vous pouvez donc procéder comme suit pour gérer les variables lors de l’utilisation de Sudo.
Sudo visudo
cela ouvrira les paramètres Sudo pour vous. Ensuite, par ce que je vous ai ajouté ce qui suit ci-dessous
Defaults secure_path="blah"
Defaults env_keep +="VARIABLE VARIABLE VARIABLE"
(EXCLUDING PATH tel qu'il est défini par secure_path) et il ne s'agit que d'espaces simples entre chaque variable si vous souhaitez en conserver plusieurs.
et ce que cela fait, c'est dire à Sudo quelles variables env doivent être conservées et ne pas être ignorées.
Lorsque vous avez terminé, maintenez les touches ctrl et o enfoncées et appuyez sur o pour écrire, appuyez sur Entrée, puis sur Oui pour enregistrer. Même si un fichier tmp est spécifié, il est OK, il sera réécrit dans la configuration principale.
Cela devrait vous permettre de conserver les variables souhaitées (la plus importante étant Java_HOME et http_proxy si vous utilisez un proxy).
Donc, il devrait ressembler à quelque chose comme ci-dessous, y compris votre variable spécifiée:
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin/bin"
Defaults env_keep +="GRAILS_HOME"
et pour vérifier qu'il faut quitter toutes les fenêtres de terminal ouvertes et en rouvrir un et exécuter
echo $GRAILS_HOME
Il devrait être ce que vous définissez, maintenant émettre
Sudo echo $GRAILS_HOME
et il devrait maintenant rester inchangé