chsh (Abkürzung für change shell – engl. ‚Shell verändern‘) ist ein Befehl für BSD-Unix-Systeme, der zur Veränderung der Login-Shell benutzt wird. Dabei kann der Benutzer entweder den Pfad zur gewünschten Shell eingeben oder den Befehl ohne Eingaben ausführen, um einen interaktiven Shellwechsel zu ermöglichen.
chsh ist ein Setuid-Programm, das die Datei /etc/passwd so modifiziert, dass jeder Benutzer des Systems nur seine jeweils eigene Loginshell verändern kann. Der Superuser hingegen kann auch die Shells anderer Benutzer verändern, wenn der entsprechende Name als Kommandozeilenparameter angegeben wird.
Eine Einschränkung von chsh besteht darin, dass mit diesem Kommando sowohl von Usern als auch vom Superuser nur Shells angegeben werden können, die in der Datei /etc/shells angegeben sind. Allerdings kann diese Einschränkung umgangen werden, indem der Superuser die Modifikation der /etc/passwd-Datei manuell vornimmt, und somit jede beliebige ausführbare Datei auf dem System eintragen kann.
Je nach System muss der Nutzer vor Änderung der Shell oder Wechsel in den interaktiven Modus sein Passwort eingeben. Der Zugriff auf diesen Befehl kann aus Sicherheitsgründen für normale User aber auch völlig deaktiviert sein.
Auf Unix System V wird statt chsh der Befehl passwd -e shellname
verwendet.
In vielen Linux-Distributionen ist chsh eine PAM-fähige Anwendung, deren Verhalten über Konfiguration von PAM-Optionen gesteuert werden kann. Aus Sicherheitsgründen kann beispielsweise bestimmten Usern mit Hilfe des PA-Moduls pam_listfile.so der Zugang zum Befehl zur Änderung der Login-Shell untersagt werden.