Ändern der Standard-Shell unter Linux
Übersicht
Eine interaktive Shell liest Befehle aus Benutzereingaben auf einem TTY-Terminal. Wir nennen die interaktive Shell nach der erfolgreichen Anmeldung eines Benutzers die Standard-Shell oder Login-Shell.
In diesem Tutorial werden wir diskutieren, wie die Standard-Shell eines Benutzers zu ändern.
Einführung in den Befehl chsh
Der Befehl chsh wird mit dem Paket util-linux ausgeliefert — einem Standardpaket, das auf allen Linux-Distributionen verfügbar ist.
Mit dem Befehl chsh mit der Option -l können wir die im aktuellen System installierten Shells auflisten:
$ chsh -l/bin/sh/bin/bash/bin/zsh/usr/bin/zsh/usr/bin/git-shell
Eine häufigere Verwendung des Befehls chsh besteht darin, die Standard-Shell eines Benutzers zu ändern.
Wir werden uns in späteren Abschnitten damit befassen, wie das geht.
Welche Shell verwende ich derzeit?
Nach einer erfolgreichen Anmeldung werden wir mit unserer Standard-Shell sein.
Bevor wir über das Ändern der Standard-Shell sprechen, lernen wir zunächst einige Möglichkeiten kennen, um herauszufinden, welche Shell wir derzeit verwenden.
Eine Möglichkeit besteht darin, die Systemumgebung $SHELL zu lesen, in der der aktuell ausgeführte Shell-Befehl gespeichert ist:
kent$ echo $SHELL/bin/zsh
Wie das obige Beispiel zeigt, ist die laufende Shell meines aktuellen Anmeldebenutzers Zsh.
Alternativ können wir die aktuell ausgeführte Shell kennen, indem wir ihre Prozessinformationen untersuchen. Linux speichert die PID der laufenden Shell in der speziellen Variablen $$:
kent$ echo $3492
Im obigen Beispiel wäre der Prozess mit der PID 153492 der aktuelle Shell-Prozess. Detaillierte Informationen zum Prozess erhalten Sie mit dem Befehl ps mit der Option -p:
kent$ ps -p $$ PID TTY TIME CMD 153492 pts/2 00:00:00 zsh
Die Ausgabe sagt uns, dass Zsh unsere aktuelle Shell ist.
Ändern der Standard-Shell des aktuellen Benutzers
Wenn wir die Standard-Shell des aktuellen Anmeldebenutzers ändern möchten, können wir den Befehl chsh mit der Option -s <NEW_SHELL> ausführen.
Ändern wir die Standard-Shell des aktuellen Benutzers in Bash:
kent$ chsh -s /bin/bashChanging shell for kent.Password: Shell changed.
Es lohnt sich zu erwähnen, dass nach dem erfolgreichen Ändern der Standard-Shell die aktuell ausgeführte Shell nicht geändert wird. Zum Beispiel haben wir Bash als Standard-Shell des Benutzers kent festgelegt, aber die aktuelle Shell ist immer noch Zsh:
kent$ ps -p $$ PID TTY TIME CMD 153492 pts/2 00:00:00 zsh
Die neu geänderte Standard-Shell wird wirksam, wenn wir uns das nächste Mal mit dem Benutzerkonto anmelden.
Der Standard-Shell-Befehl ist für die Benutzeranmeldung unerlässlich. Wenn der Befehl ungültig ist, haben wir Probleme, uns mit dem Benutzer anzumelden.
Wenn wir also die Standard-Shell ändern, überprüft der Befehl chsh, ob der angegebene Shell-Befehl gültig ist.
Mal sehen, was passiert, wenn wir dem Befehl chsh einen ungültigen Pfad übergeben:
kent$ chsh -s /bin/bashhhhChanging shell for kent.Password: chsh: "/bin/bashhhh" does not exist
Wir haben gelernt, dass der Befehl chsh die aktuell installierten Shells im System auflisten kann.
Der Befehl chsh weigert sich, die Standard-Shell zu ändern, wenn die angegebene Shell nicht in der Liste der gültigen Shells des Systems enthalten ist:
kent$ chsh -s /usr/bin/catChanging shell for kent.Password: chsh: "/usr/bin/cat" is not listed in /etc/shells.Use chsh -l to see list.
Im obigen Beispiel haben wir versucht, den Befehl /usr/bin/cat als Standard-Shell des Benutzerkontos festzulegen.
Der cat-Befehlspfad ist gültig. Es steht jedoch nicht auf der Shell-Liste. Daher brach chsh mit der entsprechenden Fehlermeldung und dem Hinweis ab.
Ändern der Standard-Shell anderer Benutzer
Bisher haben wir gelernt, wie Sie mit dem Befehl chsh die Standard-Shell des aktuellen Anmeldebenutzers ändern.
Wir können auch die Standard-Shell anderer Benutzer mit dem Befehl chsh ändern, aber dafür benötigen wir die Root-Berechtigung.
Die Syntax ist ziemlich einfach:
root# chsh -s NEW_SHELL USERNAME
Dieses Mal melden wir uns als Root-Benutzer an und ändern die Standard-Shell des Benutzerkontos in / bin / sh:
root# chsh -s /bin/sh kent Changing shell for kent.Shell changed.
Melden wir uns nun erneut mit dem Benutzernamen an und prüfen, ob die Standard-Shell erfolgreich geändert wurde:
sh-5.1$ echo $SHELL/bin/sh
Wie die obige Ausgabe zeigt, ist die Standard-Shell des Benutzers jetzt /bin/sh .
Bearbeiten der Datei /etc/passwd
Wir haben gelernt, mit dem Befehl chsh die Standard-Shell eines Benutzers zu ändern. Alternativ können wir dies auch tun, indem wir die Datei /etc/passwd bearbeiten.
Unter Linux ist die Datei /etc/passwd eine reine Textdatei. Es speichert Benutzerkontoinformationen, die während der Benutzeranmeldung erforderlich sind:
-rw-r--r-- 1 root root 2.1K Mar 12 10:27 /etc/passwd
Wenn wir uns die Berechtigungsflags ansehen, sehen wir, dass alle Benutzer sie lesen können, aber nur der Root-Benutzer darf in / etc/passwd schreiben.
Überprüfen wir den Inhalt in der Datei /etc/passwd:
kent$ cat /etc/passwdroot:x:0:0:root:/root:/bin/zshbin:x:1:1:bin:/bin:/bin/false...kent:x:1000:1000::/home/kent:/bin/zshguest:x:1001:1001::/home/guest:/bin/zsh...cups:x:209:209:cups helper user:/:/sbin/nologin...
Jede Zeile in der Datei zeichnet die Kontoinformationen eines Benutzers auf. Die Felder in einem Datensatz werden durch Doppelpunkte getrennt.
Ein Datensatz enthält die Kontodaten des Benutzers, z. B. Benutzername, UID, GID und Home-Verzeichnis. Das letzte Feld gibt die Standard-Shell des Benutzers an.
Wenn wir das Standard-Shell-Feld in der Datei /etc/passwd ändern, wird es wirksam, wenn sich der Benutzer das nächste Mal beim System anmeldet.
Ein Vorteil der Bearbeitung der Datei /etc/passwd besteht darin, dass wir die Standard-Shell mehrerer Benutzer auf einmal ändern können. Manchmal könnte dies ziemlich praktisch sein.
Wir sollten jedoch bedenken, dass beim Speichern der Datei /etc/passwd keine Validierung oder Überprüfung der geänderten Standard-Shells erfolgt.
Daher müssen wir sicherstellen, dass wir gültige Shell-Befehlspfade angegeben haben. Andernfalls hat der Benutzer beim nächsten Mal ein Problem beim Anmelden am System.
Fazit
In diesem kurzen Artikel haben wir anhand von Beispielen gelernt, wie Sie die Standard-Shell eines Benutzers ändern können.
Der Befehl chsh ist für die Aufgabe ziemlich einfach. Darüber hinaus kann überprüft werden, ob die angegebene Shell im System gültig ist.
Wenn wir die Standard-Shell eines anderen Benutzers als der aktuellen Login-Shell ändern möchten, müssen wir den Befehl chsh mit Root-Benutzerberechtigung ausführen.
Wenn wir uns als Root-Benutzer anmelden können, können wir auch die Standard-Shell mehrerer Benutzer ändern, indem wir die Datei /etc/passwd direkt bearbeiten.