
LWN.net - GNOME, Wayland y variables de entorno
Strode, a pesar de todo lo que quiere avanzar hacia una solución "moderna" para las variables ambientales, claramente siente la presión que proviene de una exposición más amplia de un sistema roto. Por lo tanto, su comentario más reciente sobre el error, al momento de escribir este artículo, dice: "Sí, estoy considerando ceder en esto". Por lo tanto, es probable que Fedora 25 vea una actualización que restaure el shell de inicio de sesión al proceso de inicio de sesión; una "solución adecuada" esperará hasta más tarde.
Ahora es Fedora 28... ¿dónde estamos en el lado de la "solución adecuada" de las cosas? ¿Existe ya una forma innovadora para que los usuarios establezcan variables de entorno para sus sesiones?
Es decir, un reemplazo ~/.bash_profile
que funciona en Fedora y, con suerte, en otros lugares.
Respuesta1
Para GNOME 3.24, Strodesesión de gnome revertidapara cargar variables de entorno ejecutando un shell de inicio de sesión.
En el mismo comentario, incluyeron un parche para gnome-session para enviar estas variables de entorno de sesión a los servicios de usuario de systemd. Estos incluyen gnome-terminal
, por lo que es bastante importante :).
El iniciador de sesiones de GDM ya estabaparcheadoen 3.22, para importar el entorno desde systemd --user
. Entonces, el entorno systemd se importa a la sesión, luego el shell de inicio de sesión lo modifica y el resultado también se copia nuevamente a systemd --user
.
Lo cual debería funcionar bien... excepto en las pruebas en Fedora 28, no funciona correctamente, por ejemplo, para PATH, porque el iniciador de sesión gdm no permite que las variables de entorno systemd sobrescriban el entorno preexistente.Lo informé en el rastreador de problemas de GNOME..
Fueacordadoeso login
(para la consola de texto)podríaAcepte algún parche para cargar la configuración del entorno antes de iniciar el shell de los usuarios, pero hasta ahora no hay cambios enutil-linux v2.32.
Ni siquiera me he molestado en buscar parches ssh :).
El entorno systemd ya era configurable en user.conf
. Como parte de este esfuerzo, systemd v233ganadoun environment.d/
formato que ahora admite, por ejemplo, anteponer un directorio adicional a las listas existentes PATH
o LD_LIBRARY_PATH
de búsqueda.
Pensé que el mejor lugar para configurar variables de entorno para los inicios de sesión de los usuarios sería en un módulo PAM; incluso pam_env
ya lo hemos hecho. La lógica es
pedir login, gdm, sshd (eso nunca sucederá), etc. para hacer esto es realmente una mala solución.
Desafortunadamente, la configuración pam_env
es molestamente inconsistente entre las distribuciones... y parece que podría haber habido una buena razón para ello. La ~/.pam_environment
característicase considera una gran "pistola" para la seguridad. Ver tambiénCVE-2010-4708.
Mire
pam_exec
por ejemplo. Podría imaginarse a un administrador de sistemas usándolo para realizar alguna configuración posterior al inicio de sesión o algo así, pero un usuario podría obtener root configurando LD_PRELOAD. O pam_selinux en realidad usa pam_getenv directamente, por lo que un usuario podría arruinarlo. Pero mi punto no es realmente estos ejemplos específicos, es sólo para ilustrar que existen riesgos al hacerlo como root, y podemos evitar esos riesgos por completo, eliminando toda una clase de posibles errores de seguridad, si lo hacemos un poco más adelante en el proceso de inicio de sesión. Como regla general, si no necesita que el código se ejecute como root, ¡no debería ejecutarse como root! Por supuesto, todavía estoy dividido, porque logísticamente es más incómodo hacerlo más tarde, pero no tengo ninguna duda de que hacerlo como root es más riesgoso que hacerlo como usuario.El manual de pam_exec establece explícitamente: "Los comandos llamados por pam_exec deben tener en cuenta que el usuario puede tener control [sic] sobre el entorno".
re. pam_env, tenga en cuenta que fedora lo coloca en la parte superior de la pila de pam y deshabilita ~/.pam_environment de forma predeterminada.
Ponerlo en la parte superior de la pila es un error y viola la advertencia explícita de no hacer esto: "Dado que la configuración de variables de entorno PAM puede tener efectos secundarios en otros módulos, este módulo debería ser el último en la pila".
[...] Dada la confusión aquí, esto es obviamente una pistola
La idea general de utilizar la configuración de shell para esto también parece funcionar, por ejemplo, en el inicio de sesión gráfico de Ubuntu Desktop 16.04. Sin embargo, hay una diferencia. Fedora crea ~/.bash_profile
de forma predeterminada, lo que (para bash) hace ~/.profile
que se ignore. En su lugar , Ubuntu y otras distribuciones basadas en Debian se crean ~/.profile
de forma predeterminada. (Es decir, estos archivos se proporcionan cuando crea un nuevo usuario, desde /etc/skel
).
(He usado esto en Ubuntu recientemente. Ubuntu parece haber cambiado con el tiempo al ejecutar un shell de inicio de sesión para sesiones GUI. Por ejemplo, consultehttps://superuser.com/questions/183870/difference-between-bashrc-and-bash-profile/183980#183980,https://askubuntu.com/questions/40287/etc-profile-not-being-sourced,"¿Por qué gnome-terminal no es un shell de inicio de sesión?", y"¿Qué significa iniciar sesión en el shell ('bash -l')").