Il semble quand Sudo
gulant cela en utilisant Sudo -u $user
que l'environnement de la racine est toujours utilisé. Comment puis-je faire Sudo
utiliser l'environnement des utilisateurs? En tant que note spéciale, tous les utilisateurs que je vais utiliser cela sur les coquilles de connexion.
Essayer Sudo -i -u $user
[email protected]:~$ env |grep HOME
HOME=/home/gerald
[email protected]:~$ Sudo -u ubuntu env |grep HOME
HOME=/home/gerald
ge[email protected]:~$ Sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu
man sudoers
sur Debian mentionne une autre possibilité. Pas sûr de quelle manière que vous voulez, mais votre question sonne comme si vous voudriez avoir le env_reset
option de /etc/sudoers
- Le contraire est fondamentalement le env_keep
liste. Afin de définir le bon HOME
, vous pouvez utiliser le -H
option à Sudo
directement ou, encore une fois dans sudoers
, avec le always_set_home
option.
Sinon, vous pouvez utiliser env_file
Pour spécifier un environnement exact que vous souhaitez passer. Cependant, je pense qu'il est préférable que vous vérifiez le env_*
options de man sudoers
, car /etc/sudoers
contrôle tout et c'est le point de se tourner vers.
Voici une partie du contexte dans lequel j'utilise env_reset
Dans mon sudoers
Fichier:
Defaults !lecture
Defaults env_reset
Defaults syslog=auth
Defaults log_year
Quand Sudo Les variables d'environnement ne sont pas préservées.
Dans mon cas, j'utilise voici-document .
Vous mettez vos actions telles que my_script.sh
À l'intérieur de votre document ici:
su -u some_user <<EOF
./my_script.sh
EOF
Vous ne devez pas mettre de la variable directement ici, car ils seraient interprétés à partir de votre utilisateur actuel.
su -u some_user <<EOF
./my_script.sh $MY_VAR
EOF
Si $MY_VAR
n'est pas défini pour l'utilisateur exécutant le script, il ne sera pas défini.
Votre variable doit être appelée à l'intérieur de vos scripts ou vous devez vous échapper avec \
.
Par exemple.
su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF
Ici, $MY_VAR
aura some_user
valeur contextuelle.