Posso avere determinate impostazioni universali per tutti i miei utenti?
Posso avere determinate impostazioni universali per tutti i miei utenti?
Risposte:
Oltre a ciò /etc/profile
che altri hanno menzionato, alcuni sistemi Linux ora usano una directory /etc/profile.d/
; tutti i .sh
file presenti verranno acquistati da /etc/profile
. È leggermente più ordinato conservare le cose dell'ambiente personalizzato in questi file piuttosto che modificarle /etc/profile
.
Se il tuo LinuxOS ha questo file:
/etc/environment
Puoi usarlo per impostare in modo permanente variabili ambientali per tutti gli utenti.
Estratto da: http://www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html
Se tutti i servizi di accesso utilizzano PAM e tutti i servizi di accesso hanno session required pam_env.so
nei rispettivi /etc/pam.d/*
file di configurazione, tutte le sessioni di accesso avranno alcune variabili di ambiente impostate come specificato nel pam_env
file di configurazione.
Nella maggior parte delle moderne distribuzioni Linux, questo è tutto lì per impostazione predefinita: basta aggiungere le variabili di ambiente globali desiderate /etc/security/pam_env.conf
.
Funziona indipendentemente dalla shell dell'utente e funziona anche per gli accessi grafici (se xdm / kdm / gdm / entrance / ... è impostato in questo modo).
echo foo>/home/me/bar
e riavvio (e accedo di nuovo), quel file non viene creato. (Probabilmente c'è un modo più elegante per testarlo, ma volevo essere sicuro prima di commentare qui.)
Sorprendentemente, Unix e Linux non hanno effettivamente un posto per impostare variabili d'ambiente globali. Il meglio che puoi fare è disporre che ogni shell specifica abbia un'inizializzazione specifica del sito.
Se lo metti dentro /etc/profile
, questo si occuperà delle cose per la maggior parte degli utenti shell compatibili con posix. Questo è probabilmente "abbastanza buono" per scopi non critici.
Ma chiunque abbia a csh
o tcsh
shell non lo vedrà e non credo che csh
abbia un file di inizializzazione globale.
/etc/environment
in realtà sembra impostare variabili di ambiente per me, anche come l'utente root. So che /etc/environment
è su Amazon Linux e Ubuntu. Non sono riuscito a verificare se funziona per csh, tcsh o zsh.
Alcuni estratti interessanti dalla manpage di bash:
Quando bash viene invocato come shell di login interattiva o come shell non interattiva con l'
--login
opzione, legge innanzitutto ed esegue i comandi dal file/etc/profile
, se quel file esiste. Dopo aver letto il file, si cerca~/.bash_profile
,~/.bash_login
e~/.profile
, in questo ordine, e legge ed esegue i comandi dal primo che esiste ed è leggibile. L'--noprofile
opzione può essere utilizzata all'avvio della shell per inibire questo comportamento.
...
Quando viene avviata una shell interattiva che non è una shell di accesso, bash legge ed esegue i comandi da/etc/bash.bashrc
e~/.bashrc
, se questi file esistono. Questo può essere inibito usando l'--norc
opzione. Il--rcfile
L'opzione file forzerà bash a leggere ed eseguire i comandi dal file anziché da/etc/bash.bashrc
e~/.bashrc
.
Dai un'occhiata a /etc/profile
o /etc/bash.bashrc
, questi file sono i posti giusti per le impostazioni globali. Metti qualcosa del genere in loro per impostare una variabile ambientale:
export MY_VAR=xxx
L'uso di PAM è eccellente.
# 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
Ogni processo in esecuzione sotto il kernel Linux riceve il proprio ambiente unico che eredita dal suo genitore. In questo caso, il genitore sarà o una shell stessa (spawn di una sub shell) o il programma 'login' (su un sistema tipico).
Poiché l'ambiente di ciascun processo è protetto, non è possibile "iniettare" una variabile ambientale in ogni processo in esecuzione, quindi anche se si modifica la shell .rc / profilo predefinita, non entrerà in vigore fino a quando ciascun processo non viene chiuso e ricaricato le sue impostazioni di avvio.
Cerca in / etc / per modificare le variabili di avvio predefinite per ogni particolare shell. Basta rendersi conto che gli utenti possono (e spesso lo fanno) modificarli nelle loro singole impostazioni.
Unix è progettato per obbedire all'utente, entro certi limiti.
NB : Bash non è l' unica shell sul tuo sistema. Presta molta attenzione a ciò a cui punta effettivamente il link simbolico / bin / sh. Su molti sistemi, questo potrebbe effettivamente essere un trattino che è (per impostazione predefinita, senza invocazione speciale) POSIXLY corretto. Pertanto, è necessario fare attenzione a modificare entrambi i valori predefiniti, altrimenti gli script che iniziano con / bin / sh non erediteranno i valori predefiniti globali. Allo stesso modo, fai attenzione a evitare la sintassi che bash capisce solo quando modifica entrambi, ovvero avoiding bashisms
.