ti-enxame.com

Como faço para que o usuário Sudo -u $ use os usuários env?

Parece quando Sudoing que usando Sudo -u $user que o ambiente raiz ainda está sendo usado. Como posso fazer Sudo usar o ambiente de usuários? como uma nota especial, nem todos os usuários em que vou usar isso possuem shells de login.

19
xenoterracide

Experimentar 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 no Debian menciona outra possibilidade. Não sabe ao certo o caminho que deseja, mas sua pergunta parece que você gostaria de ter o env_reset opção de /etc/sudoers - o oposto é basicamente o env_keep Lista. Para definir o HOME adequado, você pode usar o -H opção para Sudo diretamente ou, novamente em sudoers, com o always_set_home opção.

Como alternativa, você pode usar env_file para especificar um ambiente exato que você deseja passar. No entanto, acho melhor que você verifique o env_* opções de man sudoers, Porque /etc/sudoers controla tudo e esse é o ponto a que recorrer.

Aqui está parte do contexto em que eu uso env_reset dentro do meu arquivo sudoers:

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year
4
0xC0000022L

Quando Sudo as variáveis ​​de ambiente não são preservadas.

No meu caso, eu uso aqui-documento .

Você coloca suas ações como my_script.sh dentro de seu DOCUMENTO AQUI:

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

Você não deve colocar variáveis ​​diretamente aqui, pois elas seriam interpretadas pelo seu usuário atual.

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

E se $MY_VAR não está definido para o usuário executando o script, não será definido.

Sua variável deve ser chamada 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.

1
Juaniyyoo