Experimente 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
Parece que sudo down que usa sudo -u $user que o ambiente do root ainda está sendo usado. Como posso fazer sudo usar o ambiente dos usuários? como uma nota especial, nem todos os usuários que eu estarei usando terão shells de login.
man sudoers na Debian menciona outra possibilidade. Não tenho certeza de qual caminho você quer, mas sua pergunta parece que você gostaria de ter a opção env_reset de /etc/sudoers - o oposto é basicamente a lista env_keep . Para definir o HOME adequado, você pode usar a opção -H para sudo diretamente ou, novamente, em sudoers , com a opção always_set_home .
Como alternativa, você pode usar env_file para especificar um ambiente exato que deseja transmitir. No entanto, acho que é melhor verificar as opções env_* em man sudoers , porque /etc/sudoers controla tudo e esse é o ponto a ser seguido.
Aqui está parte do contexto no qual eu uso env_reset dentro do meu arquivo sudoers :
Defaults !lecture
Defaults env_reset
Defaults syslog=auth
Defaults log_year
Quando as variáveis de ambiente sudo ing não são preservadas.
No meu caso, eu uso documento aqui .
Você coloca suas ações como my_script.sh em seu DOCUMENTO AQUI:
su -u some_user <<EOF
./my_script.sh
EOF
Você não deve colocar a variável diretamente aqui, pois ela seria interpretada pelo usuário atual.
su -u some_user <<EOF
./my_script.sh $MY_VAR
EOF
Se $MY_VAR não estiver definido para o usuário que está executando o script, ele não será definido.
Você variável deve ser chamado dentro de seus scripts, ou você deve escapar deles com \ .
Por exemplo.
su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF
Aqui, $MY_VAR terá some_user valor contextual.