web-dev-qa-db-fra.com

Comment obtenir l'utilisateur de sudo -u $ pour utiliser les utilisateurs env?

Il semble quand Sudogulant 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.

19
xenoterracide

Essayer Sudo -i -u $user

[email protected]:~$ env |grep HOME
HOME=/home/gerald
[email protected]:~$ Sudo -u ubuntu env |grep HOME
HOME=/home/gerald
[email protected]:~$ Sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu
21
Gerald Schneider

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
4
0xC0000022L

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.

1
Juaniyyoo