Basicamente, preciso fazer isso:
DUMMY=dummy
sudo su - ec2-user -c 'echo $DUMMY'
Isso não funciona. Como posso passar a variável env $ DUMMY para su? -p não funciona com -l.
linux
sudo
environment-variables
su
Umang
fonte
fonte
sudo -iu ec2-user echo $DUMMY
?Respostas:
Você pode fazer isso sem chamar o shell de login:
ou:
A
-p
opção desu
comando preservar variáveis de ambiente.fonte
-p
é a opção desu
, nãosudo
neste caso-m
preservar a variável, outros dizem-c
qual é a diferença? E um dos comentários nestes dias de resposta-E
stackoverflow.com/questions/10488758/…Dica profissional: nunca há realmente uma boa razão para executar
sudo su
. Para executar um comando como um usuário diferente, usesudo -u username command
. Se você deseja um shell raiz, executesudo -i
ousudo -l
. Se você ativou a conta root, também pode executarsu
sozinho, mas issosudo su
não é útil. E sim, eu sei que você vê isso em todos os lugares.Dito isto,
sudo
tem a-E
opção que preservará o ambiente da sessão do usuário:Portanto, você primeiro precisará exportar sua variável e, em seguida, execute
sudo -E
:The
bash -c
is not needed. However, if I runsudo -Eu bob echo "$DUMMY"
, the variable is expanded before the root shell is launched so it doesn't demonstrate that the command actually works:fonte
env_keep
emsudoers
. Talvez assim:Defaults env_keep += "DUMMY"
.sudo
. Também é mais complicado para uma única variável. Isso é útil apenas para algo que sempre deve ser exportado.LD_PRELOAD
e transitarLESSCHARDEF
. Eu não acho que conveniência deve ser o argumento ganhar aqui ...-E faz o trabalho para mim. Do homem
sudo
-fonte
O que se segue é uma solução que não precisa de uma para alterar a política de segurança.
Ignorarei a
su
parte, pois podemos usar a--user
opção desudo
.Queremos passar variáveis de ambiente para uma
command
execução viasudo
. No entantosudo
, não permitirá que variáveis de ambiente sejam passadas para um comando (há motivos de segurança válidos para isso, algumas variáveis podem ser perigosas). Um shell pode ser usado para definir variáveis de ambiente esudo
pode executar um shell com um script passado para ele. Portanto, digasudo
para executar um script que defina as variáveis de ambiente.fonte