Básicamente necesito hacer esto:
DUMMY=dummy
sudo su - ec2-user -c 'echo $DUMMY'
Esto no funciona ¿Cómo puedo pasar la variable env $ DUMMY a su? -p no funciona con -l.
linux
sudo
environment-variables
su
Umang
fuente
fuente
sudo -iu ec2-user echo $DUMMY
?Respuestas:
Puede hacerlo sin llamar al shell de inicio de sesión:
o:
La
-p
opción desu
comando preservar variables de entorno.fuente
-p
es una opciónsu
, nosudo
en este caso-m
conserva la variable, otros dicen-c
¿cuál es la diferencia? Y uno de los comentarios en estos días de respuesta-E
stackoverflow.com/questions/10488758/…Consejo profesional: nunca hay una buena razón para correr
sudo su
. Para ejecutar un comando como un usuario diferente, usesudo -u username command
. Si quieres un shell raíz, ejecutasudo -i
osudo -l
. Si ha activado la cuenta raíz, también puede ejecutarlosu
solo, perosudo su
simplemente no es útil. Y sí, sé que lo ves en todas partes.Dicho esto,
sudo
tiene el-E
interruptor que preservará el entorno de la sesión del usuario:Por lo tanto, primero deberá exportar su variable y luego ejecutar
sudo -E
:El
bash -c
no es necesario. Sin embargo, si ejecutosudo -Eu bob echo "$DUMMY"
, la variable se expande antes de que se inicie el shell raíz, por lo que no demuestra que el comando realmente funcione:fuente
env_keep
ensudoers
. Tal vez desea:Defaults env_keep += "DUMMY"
.sudo
. También es más engorroso para una sola variable. Eso solo es útil para algo que siempre debe exportarse.LD_PRELOAD
y trasladarLESSCHARDEF
. No creo que la conveniencia sea el argumento ganador aquí ...-E hace el trabajo por mí. Del hombre
sudo
-fuente
Lo que sigue es una solución que no necesita una para cambiar la política de seguridad.
Ignoraré la
su
parte, ya que podemos usar la--user
opción desudo
.Queremos pasar variables de entorno a una
command
ejecución víasudo
. Sin embargosudo
, no permitirá que las variables de entorno se pasen a un comando (existen razones de seguridad válidas para esto, algunas variables pueden ser peligrosas). Un shell se puede usar para establecer variables de entorno ysudo
puede ejecutar un shell con un script que se le pasa. Por lo tanto, indiquesudo
que ejecute un script que establezca las variables de entorno.fuente