Il semble que lorsque vous sudo
utilisez sudo -u $user
cet environnement, root est toujours utilisé. Comment puis-je sudo
utiliser 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.
19
# whoami => root # sudo -u user whoami => user
sudo -u user
est analogue àsu user
changer l'env en su que vous devez utilisersu - user
-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.Réponses:
Essayer
sudo -i -u $user
la source
/etc/passwd
:( mais ça va faire je suppose ...-E
c'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éfiniePATH
etLD_LIBRARY_PATH
pour l'utilisateur appelant.$SUDO_USER
peut être utiliséman sudoers
sur Debian mentionne une autre possibilité. Je ne sais pas de quel côté vous voulez, mais votre question semble vous donner envie deenv_reset
choisir/etc/sudoers
- l'inverse est essentiellement laenv_keep
liste. Afin de définir le bon,HOME
vous pouvez utiliser l'-H
option poursudo
directement ou, encore une foissudoers
, avec lealways_set_home
option.Vous pouvez également utiliser
env_file
pour spécifier un environnement exact que vous souhaitez passer. Cependant, je pense qu'il est préférable de vérifier lesenv_*
options deman sudoers
, car/etc/sudoers
il contrôle tout et c'est le point vers lequel se tourner.Voici une partie du contexte dans lequel j'utilise à l'
env_reset
intérieur de monsudoers
fichier:la source
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.sh
dans votre DOCUMENT ICI:Vous ne devez pas mettre de variable directement ici, car elles seraient interprétées par votre utilisateur actuel.
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.
Ici,
$MY_VAR
aurasome_user
une valeur contextuelle.la source
su - some_user
place desu -u some_user
.