El entorno que se hereda
Un proceso hijo recibe todo el entorno del padre, incluidas cosas que no deberían llegarle. Qué se filtra, qué se pierde, y cómo se controla.
Qué se filtra
La primera fila es la razón de seguridad: si tu aplicación recibe secretos por el entorno, esos secretos llegan a cada proceso que lance, salvo que lo impidas.
Qué falta
El problema opuesto, y el que produce el fallo más confuso de esta fase:
Es especialmente visible en macOS, y la solución no es leer los ficheros de arranque del usuario —frágil y lento— sino buscar en rutas conocidas y ofrecer configurar la ruta a mano, que es lo del nivel 45.5.
Construir el entorno explícitamente
La respuesta correcta a los dos problemas:
// nada por omisión, y solo lo que hace faltalet mut env = HashMap::new();env.insert("PATH", ruta_minima_del_sistema());env.insert("LC_ALL", "C"); // idioma fijo. Nivel 45.3env.insert("HOME", directorio_personal()); // muchas herramientas lo necesitancomando.env_clear().envs(env);Tres decisiones del fragmento:
- Limpiar primero. Es la línea que evita todas las filtraciones de golpe.
- Poner el mínimo. Casi ninguna herramienta necesita más de tres o cuatro variables.
- Y fijar el idioma, que arregla el problema del nivel 45.3 en el mismo sitio.
Y si el hijo sí necesita un secreto —porque es una herramienta que se autentica— pásaselo explícitamente y solo a ese lanzamiento, no heredado. Mejor todavía: por un fichero temporal con permisos estrictos o por su entrada estándar, que no aparecen en el listado de procesos como sí puede aparecer una variable de entorno.