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


19

Parece sudoque, ao usar sudo -u $userisso, o ambiente raiz ainda está sendo usado. Como posso sudousar o ambiente dos usuários? como uma nota especial, nem todos os usuários em que vou usar isso possuem shells de login.


Defina 'ambiente'. # whoami => root # sudo -u user whoami => user
alex

11
@alex I figura sudo -u useré análoga a su userde mudar o env em su Você tem que usarsu - user
xenoterracide

Mas o que você quer dizer com "ambiente do usuário" se o usuário não possui um shell de login?
Thomas Themel 26/11/2010

Os usuários do @Thomas podem executar programas mesmo que não consigam usar o shell ... Acredito que -utambém ignora os grupos ... Tentei algo do root (usando o sudo -u down) e funcionou, aparentemente não funcionou para o usuário. .. então eu tenho que ter certeza de que estou executando comandos de uma maneira que tenha todas as limitações e questões ambientais.
Xenoterracide

Respostas:


21

Experimentar 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

infelizmente, não funciona se não tiver um escudo em /etc/passwd:( mas vai fazer eu acho ...
xenoterracide

Olhando para a página de manual, parece que -Eé a única que preserva o ambiente, ou seja, todas as variáveis ​​de ambiente etc estão lá, embora ainda não esteja definida PATHe LD_LIBRARY_PATHpara o usuário que está chamando.
precisa

11
$SUDO_USERpode ser usado
Rahul Patil

4

man sudoersno Debian menciona outra possibilidade. Não tenho certeza de qual direção você quer, mas sua pergunta parece que você gostaria de ter a env_resetopção /etc/sudoers- o oposto é basicamente a env_keeplista. Para definir o correto, HOMEvocê pode usar a -Hopção sudodiretamente ou, novamente sudoers, com a always_set_homeopção

Como alternativa, você pode usar env_filepara especificar um ambiente exato que deseja passar. No entanto, eu acho que é melhor se você verificar as env_*opções de man sudoers, porque /etc/sudoerscontrola tudo e esse é o ponto a que recorrer.

Aqui está parte do contexto em que eu uso env_resetdentro do meu sudoersarquivo:

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year

1

Quando sudo ing variáveis de ambiente não são preservadas.

No meu caso, eu uso o documento aqui .

Você coloca suas ações como my_script.shdentro de seu DOCUMENTO HERE:

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

Se $MY_VARnão estiver definido para o usuário executando o script, ele não será definido.

Você variável deve ser chamada dentro de seus scripts, ou você deve escapar deles \.

Por exemplo.

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

Aqui, $MY_VARterá some_uservalor contextual.


Boa resposta. Uma pequena correção: deve ser em su - some_uservez de su -u some_user.
rudolfbyker 25/06
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.