¿Cómo puedo mantener *todas* las variables de entorno para un comando específico en sudo?

¿Cómo puedo mantener *todas* las variables de entorno para un comando específico en sudo?

Tengo un script que establece varias variables de entorno y finalmente llama a otro script usando sudo.

El script ejecutado con sudo debe poder detectar esas variables y no siempre estaré seguro de cuáles son esas variables.

¿Hay alguna forma de configurar esta entrada sudoers para permitir que el comando tenga acceso completo a las variables env de las personas que llaman?

%deploy ALL=NOPASSWD: /bin/build.sh

Cuando ejecuto el comando sudo desde mi script:

sudo -E build.sh "$@"

Yo obtengo:

sudo: sorry, you are not allowed to preserve the environment

Buscando en Google solo encontré formas de preservar variables específicas y no solo todo.

Respuesta1

Después de probar la primera respuesta y seguir obteniendo sudo: sorry, you are not allowed to preserve the environment, decidí buscar una solución mejor.

Después de algunas pruebas, descubrí que la opción que importa es setenv.

Defaults!/bin/build.sh setenv

Para hacerlo un poco más seguro, podemos agregar un par de configuraciones:

Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11/bin"
Defaults!/bin/build.sh setenv,env_reset,env_delete+=PATH,env_delete+=LD_PRELOAD,env_delete+=LD_LIBRARY_PATH,env_delete+=SSH_AUTH_SOCK,env_delete+=PYTHONPATH,env_delete+=PERL5LIB
%deploy  ALL=(ALL) NOPASSWD: /bin/build.sh *

Respuesta2

Si desea permitir que los usuarios del deploygrupo ejecuten cualquier comando con casi cualquier variable de entorno:

Defaults:%deploy !env_reset,env_delete-=PYTHONPATH,env_delete-=PERL5LIB
%deploy ALL = (ALL) ALL

Ejecute sudo -Vpara ver qué variables se eliminan.

No tiene mucho sentido restringir el comando si permite al usuario conservar todas las variables de entorno, ya que esto probablemente le permitirá ejecutar código arbitrario a través de alguna variable.

Si ha revisado cuidadosamente su secuencia de comandos y está seguro de que tiene una lista exhaustiva de variables de entorno que deben eliminarse, puede especificar que estas variables de entorno deben eliminarse y todas las demás deben conservarse.

Defaults!/bin/build.sh !env_reset,env_delete+=DANGEROUS_VAR
%deploy ALL = (ALL) /bin/build.sh

Respuesta3

Ejecute sudo visudoy comente las dos líneas que se muestran a continuación. Comentar solo env_resetno funciona

#Defaults       env_reset
Defaults        mail_badpass
#Defaults       secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"

información relacionada