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/profileandere erwähnt haben, verwenden einige Linux-Systeme jetzt ein Verzeichnis /etc/profile.d/. Alle .shDateien 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.soin ihren jeweiligen /etc/pam.d/*Konfigurationsdateien enthalten sind, werden für alle Anmeldesitzungen einige Umgebungsvariablen festgelegt, die in pam_envder 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/barauskommentiert. 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/profileeingeben, wird dies für die meisten posix-kompatiblen Shell-Benutzer erledigt. Dies ist wahrscheinlich "gut genug" für unkritische Zwecke.
Aber jeder mit einer cshoder einer tcshShell wird es nicht sehen, und ich glaube nicht, dass cshes eine globale Initialisierungsdatei gibt.
/etc/environmentscheint tatsächlich Umgebungsvariablen für mich zu setzen, selbst als Root-Benutzer. Ich weiß, dass /etc/environmentdas 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
--loginOption 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_loginund~/.profilein dieser Reihenfolge und liest und führt Befehle von der ersten aus, die vorhanden und lesbar ist. Die--noprofileOption 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.bashrcund~/.bashrc, falls diese Dateien vorhanden sind. Dies kann durch Verwendung der--norcOption verhindert werden. Das--rcfileDie Dateioption zwingt bash, Befehle aus der Datei anstelle von/etc/bash.bashrcund zu lesen und auszuführen~/.bashrc.
Schauen Sie sich also an /etc/profileoder /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.