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.