
Ich versuche, die Standard-Shell für meinen Benutzer zu ändern. Aber ich erhalte immer wieder diesen Fehler:
$ chsh
You may not change the shell for 'flimm'.
$ chsh -s "$(which bash)"
You may not change the shell for 'flimm'.
Ich versuche zu verstehen, warum ich die Shell für meinen Benutzer nicht ändern kann.
Antwort1
Da Sie bestätigt haben, dass es /usr/bin/chsh
sich um Setuid-Root handelt (und daher nicht privilegierten Benutzern das Ändern ihrer eigenen Login-Shell ermöglichen sollte), ist die wahrscheinlichste Erklärung für dieses Verhalten, dass entweder
- Ihre aktuelle Login-Shell war nicht in der Datei /etc/shells
oder
- Ihre aktuelle Login-Shell war eingeschränkt (höchstwahrscheinlich
/bin/rbash
)
Ex.
$ grep fish /etc/shells || echo "invalid shell"
invalid shell
$
$ sudo chsh -s /usr/bin/fish testuser
$
$ su - testuser
Password:
Welcome to fish, the friendly interactive shell
testuser@t400s ~> chsh -s /bin/bash
You may not change the shell for 'testuser'.
testuser@t400s ~> exit
Beachten Sie, dass es keine Einschränkung gibt, wenn root die Anmelde-Shell eines Benutzers auf eine ungültige Shell einstellt (wie hier). Wenn Sie dies tun, wird eine ungültige Shell nicht durch Hinzufügen zur Datei /etc/shells gültig.
$ sudo chsh -s /bin/rbash testuser
$
$ su - testuser
Password:
testuser@t400s:~$
testuser@t400s:~$ chsh
You may not change the shell for 'testuser'.
testuser@t400s:~$ exit
Wenn dasZielShell in der Datei /etc/shells fehlte, hätten Sie eine andere Meldung erhalten:
$ sudo chsh -s /bin/bash testuser
$
$ su - testuser
Password:
testuser@t400s:~$ chsh -s /usr/bin/fish
Password:
chsh: /usr/bin/fish is an invalid shell
Antwort2
Sie können es mit dem Befehl sudo usermod -s /bin/bash flimm versuchen
Antwort3
Die Login-Shell des Benutzers wird in gespeichert /etc/passwd
und ist vor Änderungen durch normale Benutzer geschützt. Sie können sie mit sehen getent passwd $USER
.
Wenn Ihre neue Shell in aufgeführt ist /etc/shells
, können Sie sie mit ändern:
sudo chsh -s $(type -p bash) $USER
Achten Sie wie bei allen Manipulationen der Anmeldeinformationen darauf, dass Sie über eine Anmeldesitzung auf einem anderen Terminal verfügen ( Ctrl-Alt-F3), für den Fall, dass Sie etwas beschädigen und sich nicht anmelden können.