Kann ich bestimmte Einstellungen haben, die für alle meine Benutzer universell sind?
Kann ich bestimmte Einstellungen haben, die für alle meine Benutzer universell sind?
Antworten:
Wie auch /etc/profile
andere erwähnt haben, verwenden einige Linux-Systeme jetzt ein Verzeichnis /etc/profile.d/
. Alle .sh
Dateien dort werden von bezogen /etc/profile
. Es ist etwas ordentlicher, Ihre benutzerdefinierten Umgebungsdaten in diesen Dateien zu behalten, als sie nur zu bearbeiten /etc/profile
.
Wenn Ihr LinuxOS diese Datei hat:
/etc/environment
Sie können es verwenden, um Umgebungsvariablen für alle Benutzer dauerhaft festzulegen.
Auszug aus: http://www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html
Wenn alle Anmeldedienste PAM verwenden und alle Anmeldedienste session required pam_env.so
in ihren jeweiligen /etc/pam.d/*
Konfigurationsdateien enthalten sind, werden für alle Anmeldesitzungen einige Umgebungsvariablen festgelegt, die in pam_env
der Konfigurationsdatei angegeben sind.
Bei den meisten modernen Linux-Distributionen ist dies standardmäßig alles vorhanden - fügen Sie einfach Ihre gewünschten globalen Umgebungsvariablen hinzu /etc/security/pam_env.conf
.
Dies funktioniert unabhängig von der Shell des Benutzers und auch für grafische Anmeldungen (wenn xdm / kdm / gdm / entry /… so eingerichtet ist).
echo foo>/home/me/bar
auskommentiert. Wenn ich so etwas hinzufüge und neu starte (und mich erneut anmelde ), wird diese Datei nicht erstellt. (Es gibt wahrscheinlich eine elegantere Möglichkeit, dies zu testen, aber ich wollte sicher sein, bevor ich hier kommentiere.)
Erstaunlicherweise haben Unix und Linux keinen Platz zum Festlegen globaler Umgebungsvariablen. Das Beste, was Sie tun können, ist, dafür zu sorgen, dass eine bestimmte Shell eine standortspezifische Initialisierung erhält.
Wenn Sie es /etc/profile
eingeben, wird dies für die meisten posix-kompatiblen Shell-Benutzer erledigt. Dies ist wahrscheinlich "gut genug" für unkritische Zwecke.
Aber jeder mit einer csh
oder einer tcsh
Shell wird es nicht sehen, und ich glaube nicht, dass csh
es eine globale Initialisierungsdatei gibt.
/etc/environment
scheint tatsächlich Umgebungsvariablen für mich zu setzen, selbst als Root-Benutzer. Ich weiß, dass /etc/environment
das auf Amazon Linux und Ubuntu ist. Ich konnte nicht überprüfen, ob es für csh, tcsh oder zsh funktioniert.
Einige interessante Auszüge aus der Bash-Manpage:
Wenn bash als interaktive Anmeldeshell oder als nicht interaktive Shell mit der
--login
Option aufgerufen wird , werden zuerst Befehle aus der Datei gelesen und ausgeführt/etc/profile
, sofern diese Datei vorhanden ist. Nach dem Lesen dieser Datei sucht sie nach~/.bash_profile
,~/.bash_login
und~/.profile
in dieser Reihenfolge und liest und führt Befehle von der ersten aus, die vorhanden und lesbar ist. Die--noprofile
Option kann verwendet werden, wenn die Shell gestartet wird, um dieses Verhalten zu verhindern.
...
Wenn eine interaktive Shell gestartet wird, die keine Login-Shell ist, liest bash Befehle von/etc/bash.bashrc
und~/.bashrc
, falls diese Dateien vorhanden sind. Dies kann durch Verwendung der--norc
Option verhindert werden. Das--rcfile
Die Dateioption zwingt bash, Befehle aus der Datei anstelle von/etc/bash.bashrc
und zu lesen und auszuführen~/.bashrc
.
Schauen Sie sich also an /etc/profile
oder /etc/bash.bashrc
, diese Dateien sind die richtigen Stellen für globale Einstellungen. Fügen Sie so etwas ein, um eine Umgebungsvariable einzurichten:
export MY_VAR=xxx
Die Verwendung von PAM ist hervorragend.
# 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
Jeder Prozess, der unter dem Linux-Kernel ausgeführt wird, erhält eine eigene, einzigartige Umgebung, die er von seinem übergeordneten Prozess erbt. In diesem Fall ist das übergeordnete Element entweder eine Shell selbst (das eine Sub-Shell erzeugt) oder das Anmeldeprogramm (auf einem typischen System).
Da jede Prozessumgebung geschützt ist, gibt es keine Möglichkeit, jedem laufenden Prozess eine Umgebungsvariable zu "injizieren". Selbst wenn Sie die Standard-Shell .rc / profile ändern, wird sie erst wirksam, wenn jeder Prozess beendet und neu geladen wird seine Starteinstellungen.
Suchen Sie in / etc /, um die Standardstartvariablen für eine bestimmte Shell zu ändern. Stellen Sie einfach fest, dass Benutzer sie in ihren individuellen Einstellungen ändern können (und dies häufig tun).
Unix wurde entwickelt, um dem Benutzer in Grenzen zu gehorchen.
NB : Bash ist nicht die einzige Shell auf Ihrem System. Achten Sie genau darauf, worauf der symbolische Link / bin / sh tatsächlich verweist. Auf vielen Systemen kann dies tatsächlich ein Bindestrich sein, der (standardmäßig ohne besonderen Aufruf) POSIXLY korrekt ist. Daher sollten Sie darauf achten, beide Standardeinstellungen zu ändern, da sonst Skripte, die mit / bin / sh beginnen, Ihre globalen Standardeinstellungen nicht erben. Achten Sie auch darauf, Syntax zu vermeiden, die nur Bash versteht, wenn Sie beide bearbeiten, auch bekannt als avoiding bashisms
.