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 deploy
grupo 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 -V
para 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 visudo
y comente las dos líneas que se muestran a continuación. Comentar solo env_reset
no funciona
#Defaults env_reset
Defaults mail_badpass
#Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"