Shell-Verwaltung unter Linux

Überblick

Sobald Administratoren auf Linux-Systemen alternative Befehlsinterpreten bereitstellen oder spezifische Wrapper-Skripte als Login-Umgebung für Anwender erzwingen möchten, rückt das Dienstprogramm add-shell in den Fokus. Dieser Leitfaden beleuchtet die Funktionsweise hinter der Konfigurationsdatei /etc/shells, zeigt das Zusammenspiel mit Werkzeugen wie chsh auf und demonstriert anhand praxisnaher Schritte die saubere Registrierung sowie das spätere Entfernen mittels remove-shell.

1. Sicherheitsfunktion von /etc/shells und Prüfung aktiver System-Shells

Welche Kommandozeilenumgebungen auf einem Rechner als vertrauenswürdige Login-Ziele eingestuft sind, bestimmt die Datei /etc/shells. Ein schneller Blick mittels cat /etc/shells offenbart das entsprechende Inventar.
Dienste wie FTP-Daemons oder das Dienstprogramm chsh verweigern Benutzern ohne Administratorrechte die Zuweisung eines Interpreters, sofern dessen absoluter Dateipfad nicht explizit in dieser Positivliste geführt wird.

Inhalt von /etc/shells anzeigen

Um die physischen Speicherorte der standardmäßig vorhandenen System-Shells aufzuspüren, bietet sich der Aufruf von which bash sh an.
Die resultierenden Pfade /usr/bin/bash sowie /usr/bin/sh lassen sich anschließend mit den Einträgen in /etc/shells abgleichen, um die Konsistenz der Umgebung zu verifizieren.

Speicherorte von bash und sh ermitteln

2. Einrichtung einer neuen Shell (Zsh) und Registrierungsversuch via add-shell

Als praktisches Szenario für die Registrierung dient die weitverbreitete Z-Shell. Das entsprechende Paket lässt sich über das Paketmanagement aufsetzen:

Zsh-Paket über apt installieren

Vor der Aufnahme in die Systemkonfiguration muss der absolute Pfad der Binärdatei feststehen, wozu gewöhnlich which zsh herangezogen wird.
Bleibt eine Rückmeldung bei dieser Abfrage aus, deutet dies darauf hin, dass die Binärdatei im aktuellen Suchpfad fehlt oder der Installationsschritt unvollständig war.

Suchpfad der Zsh überprüfen

Das Kommando sudo add-shell $(which zsh) soll den ermittelten Pfad automatisch an /etc/shells anhängen.
Liefert die Subshell jedoch ein leeres Ergebnis zurück, bricht der Befehl mangels Argument ab und gibt stattdessen die Syntaxhilfe im Format add-shell shellname aus.

Ausführung von add-shell mit Subshell-Argument

Ob die Zsh letztlich ihren Weg in die zentrale Konfigurationsdatei gefunden hat, klärt eine Filterung mit grep -E 'zsh$' /etc/shells.
Ein leerer Rückgabewert bestätigt in diesem Fall, dass bisher kein entsprechender Datensatz hinterlegt wurde.

Prüfung auf Zsh-Eintrag in /etc/shells

3. Bereitstellung eines maßgeschneiderten Menüskripts als autorisierte Login-Shell

Für Wartungszugänge oder stark reglementierte Konten empfiehlt sich häufig ein zweckgebundenes Shell-Skript. Ein einfacher Entwurf mit Begrüßungstext wird hierfür unter /usr/local/bin/custom-menu.sh hinterlegt:

Erstellung des benutzerdefinierten Menüskripts

Damit das Betriebssystem die Datei direkt als eigenständiges Programm starten kann, werden ihr mit sudo chmod +x /usr/local/bin/custom-menu.sh entsprechende Ausführungsrechte zugewiesen.

Ausführungsrechte für das Skript vergeben

Um dieses Skript nun offiziell als legitime Login-Umgebung im System anzuerkennen, genügt der Aufruf von sudo add-shell /usr/local/bin/custom-menu.sh, wodurch der Eintrag atomar in /etc/shells eingepflegt wird.

Benutzerdefiniertes Skript via add-shell registrieren

Ein abschließender Blick auf das Dateiende über tail -n 3 /etc/shells liefert den Nachweis:
Der Pfad /usr/local/bin/custom-menu.sh reiht sich nun nahtlos unter den gültigen Interpretern ein.

Prüfung der letzten Zeilen von /etc/shells

4. Test mit Benutzerkonten und sauberes Bereinigen via remove-shell

Zur Funktionsprüfung wird ein dediziertes Testkonto (testuser) angelegt, dem direkt das neue Skript als Standard-Shell zugewiesen wird: sudo id -u testuser >/dev/null 2>&1 || sudo useradd -m -s /usr/local/bin/custom-menu.sh testuser.

Neuen Testbenutzer mit benutzerdefinierter Shell anlegen

Die erfolgreiche Zuweisung lässt sich unmittelbar im Kontenregister über grep '^testuser:' /etc/passwd verifizieren.
Das letzte Feld des Datensatzes weist nun wie gewünscht auf /usr/local/bin/custom-menu.sh hin.

Prüfung des Passwd-Eintrags für testuser

Nach Abschluss der Überprüfung wird der temporäre Benutzer inklusive seines Heimatverzeichnisses via sudo userdel -r testuser 2>/dev/null || true restlos vom System entfernt.

Testbenutzer mitsamt Home-Verzeichnis löschen

Um verwaiste Einträge zu vermeiden, wird die Skript-Shell anschließend mit sudo remove-shell /usr/local/bin/custom-menu.sh wieder aus der Liste der autorisierten Interpreten gestrichen.

Benutzerdefiniertes Skript via remove-shell austragen

Abschließend wird auch die Skriptdatei selbst über sudo rm -f /usr/local/bin/custom-menu.sh vom Dateisystem gelöscht.

Skriptdatei aus /usr/local/bin entfernen

Eine letzte Gegenprobe stellt sicher, dass keine Rückstände verbleiben: Der Befehl grep 'custom-menu.sh' /etc/shells || echo '등록 해제 완료' liefert keinen Treffer mehr und quittiert die erfolgreiche Austragung mit der Bestätigungsmeldung.

Erfolgreiche Austragung aus /etc/shells verifizieren

Der Einsatz von Hilfswerkzeugen wie add-shell und remove-shell garantiert konsistente Konfigurationen ohne das Risiko manueller Syntaxfehler in /etc/shells. Diese standardisierten Befehle erhöhen die Betriebssicherheit insbesondere in automatisierten Deployments und gehärteten Serverumgebungen nachhaltig.