Comment puis-je faire en sorte que sudo -u $ user utilise l'env des utilisateurs?

19

Il semble que lorsque vous sudoutilisez sudo -u $usercet environnement, root est toujours utilisé. Comment puis-je sudoutiliser l'environnement des utilisateurs? en tant que note spéciale, tous les utilisateurs sur lesquels j'utiliserai ceci n'ont pas de shell de connexion.

xénoterracide
la source
Définissez «environnement». # whoami => root # sudo -u user whoami => user
alex
1
@alex I figure sudo -u userest analogue à su userchanger l'env en su que vous devez utilisersu - user
xenoterracide
Mais que voulez-vous dire par «l'environnement de l'utilisateur» si l'utilisateur n'a pas de shell de connexion?
Thomas Themel
Les utilisateurs de @Thomas peuvent exécuter des programmes même s'ils ne peuvent pas décortiquer ... Je crois -uégalement ignorer les groupes ... J'ai essayé quelque chose à partir de root (en utilisant sudo -u down) et cela a fonctionné, apparemment, cela n'a pas été le cas pour l'utilisateur. .. donc je dois m'assurer que j'exécute les commandes d'une manière qui aurait toutes ses limites et ses problèmes environnementaux.
xénoterracide

Réponses:

21

Essayer sudo -i -u $user

gerald@book:~$ env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -u ubuntu env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu
Gerald Schneider
la source
ne fonctionne malheureusement pas s'ils n'ont pas de shell dans /etc/passwd:( mais ça va faire je suppose ...
xenoterracide
En regardant la page de manuel, il semble que -Ec'est celle qui préserve l'environnement, c'est-à-dire que toutes les variables d'environnement, etc. sont là, bien qu'elle ne soit toujours pas définie PATHet LD_LIBRARY_PATHpour l'utilisateur appelant.
Shahbaz
1
$SUDO_USERpeut être utilisé
Rahul Patil
4

man sudoerssur Debian mentionne une autre possibilité. Je ne sais pas de quel côté vous voulez, mais votre question semble vous donner envie de env_resetchoisir /etc/sudoers- l'inverse est essentiellement la env_keepliste. Afin de définir le bon, HOMEvous pouvez utiliser l' -Hoption pour sudodirectement ou, encore une fois sudoers, avec lealways_set_home option.

Vous pouvez également utiliser env_filepour spécifier un environnement exact que vous souhaitez passer. Cependant, je pense qu'il est préférable de vérifier les env_*options deman sudoers , car /etc/sudoersil contrôle tout et c'est le point vers lequel se tourner.

Voici une partie du contexte dans lequel j'utilise à l' env_resetintérieur de mon sudoersfichier:

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year
0xC0000022L
la source
1

Quand sudo les variables d'environnement ne sont pas conservées.

Dans mon cas, j'utilise ici-document .

Vous mettez vos actions comme my_script.shdans votre DOCUMENT ICI:

su -u some_user <<EOF
./my_script.sh
EOF

Vous ne devez pas mettre de variable directement ici, car elles seraient interprétées par 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 le sera pas.

Votre variable doit être appelée dans vos scripts, ou vous devez les échapper avec \ .

Par exemple.

su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF

Ici, $MY_VARaura some_userune valeur contextuelle.

Juaniyyoo
la source
Bonne réponse. Une petite correction: elle devrait être à la su - some_userplace de su -u some_user.
rudolfbyker