Ü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.

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.

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:

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.

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.

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.

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:

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.

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.

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.

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.

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.

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.

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.

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

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.

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.