Consejo profesional:nunca hay una buena razón para ejecutar sudo su
. Para ejecutar un comando como un usuario diferente, use sudo -u username command
. Si desea un shell raíz, ejecute sudo -i
o sudo -l
. Si ha activado la cuenta raíz, también puede ejecutar su
solo, pero sudo 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:
-E, --preserve-env
Indicates to the security policy that the user wishes to preserve
their existing environment variables. The security policy may
return an error if the user does not have permission to
preserve the environment.
Por lo tanto, primero deberá exportar su variable y luego ejecutar sudo -E
:
$ export DUMMY=dummy
$ sudo -Eu bob bash -c 'echo $DUMMY'
dummy
El bash -c
no es necesario. Sin embargo, si ejecuto sudo -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:
$ sudo -u bob echo $DUMMY ## looks like it works but doesn't
dummy
$ sudo -u bob bash -c 'echo D:$DUMMY' ## now we see it failed
D:
$ sudo -Eu bob bash -c 'echo D:$DUMMY' ## works as expected
D:dummy
Puede hacerlo sin llamar al shell de inicio de sesión:
sudo DUMMY=dummy su ec2-user -c 'echo "$DUMMY"'
o:
sudo DUMMY=dummy su -p - ec2-user -c 'echo "$DUMMY"'
El -p
opción de su
comando preservar variables de entorno.
-E hace el trabajo por mí. Del hombre sudo
-
-E
, --preserve-env
Indica a la política de seguridad que el usuario desea conservar sus variables de entorno existentes. La política de seguridad puede devolver un error si el usuario no tiene permiso para preservar el medio ambiente.