¿Puedo tener ciertas configuraciones que sean universales para todos mis usuarios?
¿Puedo tener ciertas configuraciones que sean universales para todos mis usuarios?
Respuestas:
Además de lo /etc/profile
que otros han mencionado, algunos sistemas Linux ahora usan un directorio /etc/profile.d/
; cualquier .sh
archivo allí será originado por /etc/profile
. Es un poco más ordenado mantener sus elementos de entorno personalizados en estos archivos que simplemente editarlos /etc/profile
.
Si su LinuxOS tiene este archivo:
/etc/environment
Puede usarlo para establecer permanentemente variables ambientales para todos los usuarios.
Extraído de: http://www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html
Si todos los servicios de inicio de sesión usan PAM y todos los servicios de inicio de sesión tienen session required pam_env.so
sus respectivos /etc/pam.d/*
archivos de configuración, entonces todas las sesiones de inicio de sesión tendrán algunas variables de entorno establecidas como se especifica en pam_env
el archivo de configuración.
En la mayoría de las distribuciones modernas de Linux, todo esto está allí por defecto, solo agregue las variables de entorno global que desee /etc/security/pam_env.conf
.
Esto funciona independientemente del shell del usuario, y también funciona para inicios de sesión gráficos (si xdm / kdm / gdm / entrance / ... está configurado de esta manera).
echo foo>/home/me/bar
y reinicio (y vuelvo a iniciar sesión), ese archivo no se crea. (Probablemente haya una forma más elegante de probar esto, pero quería estar seguro antes de comentar aquí.)
Sorprendentemente, Unix y Linux en realidad no tienen un lugar para establecer variables de entorno globales. Lo mejor que puede hacer es organizar que cualquier shell específico tenga una inicialización específica del sitio.
Si lo coloca /etc/profile
, eso se encargará de la mayoría de los usuarios de shell compatibles con posix. Esto es probablemente "lo suficientemente bueno" para fines no críticos.
Pero cualquiera con un csh
o tcsh
shell no lo verá, y no creo que csh
tenga un archivo de inicialización global.
/etc/environment
En realidad, parece establecer variables de entorno para mí, incluso como usuario root. Sé que /etc/environment
está en Amazon Linux y Ubuntu. No pude verificar si funciona para csh, tcsh o zsh.
Algunos extractos interesantes de la página de manual de bash:
Cuando se invoca bash como un shell de inicio de sesión interactivo, o como un shell no interactivo con la
--login
opción, primero lee y ejecuta comandos del archivo/etc/profile
, si ese archivo existe. Después de leer ese archivo, busca~/.bash_profile
,~/.bash_login
y~/.profile
, en ese orden, y lee y ejecuta órdenes desde el primero que existe y es legible. La--noprofile
opción se puede usar cuando se inicia el shell para inhibir este comportamiento.
...
Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, bash lee y ejecuta comandos desde/etc/bash.bashrc
y~/.bashrc
, si existen estos archivos. Esto puede inhibirse mediante el uso de la--norc
opción. los--rcfile
la opción de archivo obligará a bash a leer y ejecutar comandos desde el archivo en lugar de/etc/bash.bashrc
y~/.bashrc
.
Eche un vistazo a /etc/profile
o /etc/bash.bashrc
, estos archivos son los lugares correctos para la configuración global. Ponga algo como esto en ellos para configurar una variable de entorno:
export MY_VAR=xxx
Usar PAM es excelente.
# modify the display PAM
$ cat /etc/security/pam_env.conf
# BEFORE: $ export DISPLAY=:0.0 && python /var/tmp/myproject/click.py &
# AFTER : $ python $abc/click.py &
DISPLAY DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}
abc DEFAULT=/var/tmp/myproject
Cada proceso que se ejecuta bajo el kernel de Linux recibe su propio entorno único que hereda de su padre. En este caso, el padre será un shell en sí mismo (engendrando un sub shell) o el programa 'login' (en un sistema típico).
Como el 'entorno de cada proceso está protegido, no hay forma de' inyectar 'una variable de entorno a cada proceso en ejecución, por lo que incluso si modifica el shell predeterminado .rc / profile, no entrará en vigencia hasta que cada proceso salga y se vuelva a cargar su configuración de inicio.
Busque en / etc / para modificar las variables de inicio predeterminadas para cualquier shell en particular. Solo tenga en cuenta que los usuarios pueden (y a menudo lo hacen) cambiarlos en su configuración individual.
Unix está diseñado para obedecer al usuario, dentro de los límites.
NB : Bash no es el único shell en su sistema. Presta mucha atención a lo que realmente apunta el enlace simbólico / bin / sh. En muchos sistemas, esto en realidad podría ser un guión que es (por defecto, sin invocación especial) POSIBLEMENTE correcto. Por lo tanto, debe tener cuidado de modificar ambos valores predeterminados, o los scripts que comienzan con / bin / sh no heredarán sus valores predeterminados globales. Del mismo modo, tenga cuidado de evitar la sintaxis que solo bash entiende al editar ambos, también conocido como avoiding bashisms
.