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:
# whoami => root # sudo -u user whoami => user
sudo -u user
é análoga asu user
de mudar o env em su Você tem que usarsu - user
-u
també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.Respostas:
Experimentar
sudo -i -u $user
fonte
/etc/passwd
:( mas vai fazer eu acho ...-E
é a única que preserva o ambiente, ou seja, todas as variáveis de ambiente etc estão lá, embora ainda não esteja definidaPATH
eLD_LIBRARY_PATH
para o usuário que está chamando.$SUDO_USER
pode ser usadoman sudoers
no Debian menciona outra possibilidade. Não tenho certeza de qual direção você quer, mas sua pergunta parece que você gostaria de ter aenv_reset
opção/etc/sudoers
- o oposto é basicamente aenv_keep
lista. Para definir o correto,HOME
você pode usar a-H
opçãosudo
diretamente ou, novamentesudoers
, com aalways_set_home
opçãoComo alternativa, você pode usar
env_file
para especificar um ambiente exato que deseja passar. No entanto, eu acho que é melhor se você verificar asenv_*
opções deman 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 meusudoers
arquivo:fonte
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.sh
dentro de seu DOCUMENTO HERE:Você não deve colocar variáveis diretamente aqui, pois elas seriam interpretadas pelo seu usuário atual.
Se
$MY_VAR
nã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.
Aqui,
$MY_VAR
terásome_user
valor contextual.fonte
su - some_user
vez desu -u some_user
.