Bash-Initialisierungsdateien Interaktive Login-Shell In den folgenden Fällen können wir eine Login-Shell erhalten:
Wenn die Login-Shell startet, liest sie zuerst die globale Systemkonfiguration /etc/profile, sucht dann nacheinander nach den drei Konfigurationsdateien ~/.bash_profile, ~/.bash_login und ~/.profile und liest die erste gefundene lesbare Datei. Wenn die Login-Shell beendet wird, liest und führt sie die Befehle in ~/.bash_logout aus. Wenn die Konfigurationsdatei vorhanden, aber nicht lesbar ist, wird eine Fehlermeldung angezeigt. Wenn die Datei nicht existiert, sucht bash automatisch nach der nächsten Datei. Standardmäßig werden globale Umgebungsvariablen wie PATH, USER, MAIL, HOSTNAME, HISTSIZE usw. in der Datei /etc/profile definiert. Die Datei /etc/bash.bashrc (die Shell-Funktionen und Aliase auf Systemebene enthält) und alle *.sh-Dateien im Pfad /etc/profile.d, die zum Initialisieren bestimmter Programme verwendet werden, werden ebenfalls automatisch importiert. Interaktive Shell ohne Anmeldung Eine Shell ohne Anmeldung bedeutet, dass Sie sich beim Systemstart nicht authentifizieren müssen. Das vom Benutzer in der GUI geöffnete Terminal ist standardmäßig eine Nicht-Login-Shell, was durch den Abmeldebefehl festgestellt werden kann: # Öffnen Sie ein Terminal auf dem Ubuntu-GUI-Desktop > Abmelden Bash: Abmelden: keine Anmeldung Shell: Verwenden Sie „exit“. > bash --login > logout # Melde dich normal ab und es wird nichts ausgegeben Wenn eine Nicht-Login-Shell initialisiert wird, liest sie nur die Ressourcendatei ~/.bashrc, und die Datei ~/.bashrc wird automatisch von ~/.bash_profile oder ~/.profile geladen. Um sicherzustellen, dass die Login-Shell und die interaktive Nicht-Login-Shell dieselbe Konfiguration erhalten, werden die Umgebungsvariablen daher im Allgemeinen in der Datei ~/.bashrc definiert. > echo "export sflag=\"Login-Shell wird diese Nachricht sehen\"" >> ~/.profile > Schlag > echo $sflag # Wenn die Variable nicht gefunden wird, wird eine leere Zeile gedruckt> exit > bash --login > echo $sflag Die Login-Shell wird diese Meldung sehen > Abmelden Nicht interaktive Shell Wenn das Skript über den Bash-Befehl ausgeführt wird, wird die Shell nicht-interaktiv gestartet. Dadurch wird sichergestellt, dass der Benutzer während der Ausführung nicht in das Skript eingreift. Wenn ein nicht interaktives Skript gestartet wird, wird nur die Datei geladen, auf die die Variable BASH_ENV zeigt. Beachten Sie jedoch, dass der Wert der Variablen BASH_ENV ein absoluter Pfad sein sollte, da die Variable PATH standardmäßig nicht von nicht-interaktiven Shells geladen wird. Sie können den aktuellen Shell-Modus über die spezielle Variable - anzeigen: > echo $- himBHs # mit 'i' ist eine interaktive Shell Eine andere einfache Möglichkeit besteht darin, zu prüfen, ob die Eingabeaufforderungsumgebungsvariable PS1 in der aktuellen Shell vorhanden ist. wenn [ -z "$PS1" ]; dann echo "nicht-interaktiv";sonst echo "interaktiv";fi Besondere Umstände Kompatibilitätsmodus Wenn Sie den Befehl sh zum Aufrufen von bash verwenden, wird bash auf die gleiche Weise wie sh initialisiert, um die Kompatibilität sicherzustellen. Wenn Bash als Anmelde-Shell gestartet wird, liest es die Konfigurationsdateien /etc/profile und ~/.profile in dieser Reihenfolge. Wenn Bash als Shell ohne Anmeldung gestartet wird, liest es nur die Datei, auf die die Umgebungsvariable ENV zeigt. POSIX-Modus Beim Starten von Bash über:
Bash versucht, gemäß dem POSIX-Standard zu initialisieren und nur die Datei zu lesen, auf die die Umgebungsvariable ENV zeigt. Remote-Startskript Wenn Sie rshd verwenden, um das Skript remote zu starten, wird nur die Datei ~/.bashrc geladen. Beachten Sie jedoch, dass Sie möglichst keine Remote-Befehle wie rlogin, telnet, rsh, rcp usw. verwenden sollten, da diese Befehle unverschlüsselte Klartextinformationen übertragen. Wenn Sie Fernzugriff benötigen, versuchen Sie, SSH zu verwenden. UID und EUID stimmen nicht überein Wenn ein Prozess erstellt wird, werden die für die Ausführung des Prozesses erforderlichen Informationen in task_struct aufgezeichnet. Die UID (Real User ID) wird verwendet, um die ID des Benutzers aufzuzeichnen, der den Prozess erstellt hat, und die EUID (Effective User ID) wird verwendet, um die Zugriffsebene des aktuellen Prozesses auf die Datei zu bestimmen. Im Allgemeinen gilt: UID = EUID. Wenn das Set-User-ID: SUID-Bit einer ausführbaren Datei gültig ist (zum Beispiel: -rwsr-xr-x, wobei das x des Benutzers durch s ersetzt wird), bedeutet dies, dass der Prozess beim Ausführen der Datei die Berechtigungen des Dateibesitzers und nicht des Ausführers hat (der Wert von EUID ist die ID des Dateibesitzers). Wenn wir das Flag „set-user-id“ für die ausführbare Bash-Datei setzen, ist die UID des Prozesses nicht identisch mit der EUID, da der Standardbesitzer root ist. Wenn andere Nicht-Root-Benutzer Bash ausführen, ist die UID des Prozesses nicht identisch mit der EUID. In diesem Fall lädt Bash aus Sicherheitsgründen während der Initialisierungsphase keine Dateien. Eingeschränkte Schale Beim Start über rbash oder bash --restricted oder bash -r wird eine Shell mit eingeschränkter Funktionalität wie folgt generiert:
Theoretisch ermöglicht diese Funktion Benutzern, bestimmte Dateien in einem bestimmten Ordner auszuführen, um eingeschränkte Funktionen auszuführen. Wenn die Umgebungsvariablen jedoch nicht richtig eingestellt sind, können Benutzer die Einschränkungen problemlos entfernen: > rbasch > cd /usw. rbash: cd: eingeschränkt > Schlag > cd /etc # Dies kann erfolgreich ausgeführt werden, da wir uns in einer Bash-Umgebung befinden und keine Einschränkungen bestehen. Ein effektiver Ansatz besteht darin, die Befehle zu begrenzen, die der neu erstellte Benutzer ausführen kann. Beispielsweise können wir einen Benutzer erstellen, der nur FTP-Befehle ausführen kann: > useradd -s /bin/rbash ruser # Stellen Sie die Shell ein, die bereitgestellt wird, wenn sich der Benutzer anmeldet > chown -R root:ruser /home/ruser/.bashrc /home/ruser/.bash_profile # Setzen Sie root als Eigentümer und ruser group als Gruppeneigentümer (der neue ruser wird standardmäßig als ruser group eingetragen) >chmod 640 /home/ruser/.bashrc /home/ruser/.bash_profile # Root kann lesen und schreiben, Benutzer in der Gruppe „ruser“ können nur lesen, andere Benutzer können nichts tun> mkdir /home/ruser/bin # vom Benutzer ausführbare Dateien oder Links speichern> echo "export PATH=/home/ruser/bin" >> /home/ruser/.bash_profile > ln -s /Benutzer/bin/ftp /home/ruser/bin/ftp Dies ist das Ende dieses Artikels mit der detaillierten Erklärung des Initialisierungsmechanismus in Bash. Weitere relevante Inhalte zur Bash-Initialisierung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Die Vue-Konfigurationsdatei generiert automatisch Routing- und Menüinstanzcode
>>: MySQL-Datenbank implementiert MMM-Hochverfügbarkeitsclusterarchitektur
0. Einleitung 18. August 2016 Heute ist mir aufge...
Im Bereich Design gibt es jedes Jahr unterschiedl...
Detaillierte Erläuterung des MySql-Beispiels für ...
Hintergrund Ich habe einen Projektdienst, der AWS...
Lassen Sie uns zunächst einige wichtige Punkte zu...
Wir haben möglicherweise eine Frage: Nachdem wir ...
Verwenden des Docker-Befehls „run“ docker run -d ...
Inhaltsverzeichnis Hintergrund 1. Dokumentbeschre...
Adobe Brackets ist eine Open Source-, einfache un...
<br />In der Vergangenheit musste zum Erstel...
Docker ist eine Open-Source-Container-Engine, mit...
<br />Vielleicht sind Sie gerade in ein Unte...
In diesem Artikel wird die Installations- und Kon...
Dieser Artikel stellt die Blue-Green-Bereitstellu...