
Я пытаюсь изменить оболочку по умолчанию для своего пользователя. Но я продолжаю получать эту ошибку:
$ chsh
You may not change the shell for 'flimm'.
$ chsh -s "$(which bash)"
You may not change the shell for 'flimm'.
Я пытаюсь понять, почему я не могу изменить оболочку для своего пользователя.
решение1
Поскольку вы подтвердили, что /usr/bin/chsh
это setuid root (и, следовательно, должно позволять непривилегированным пользователям изменять свою собственную оболочку входа), наиболее вероятным объяснением такого поведения является то, что либо
- Ваша текущая оболочка входа отсутствует в файле /etc/shells
или
- ваша текущая оболочка входа была ограничена (скорее всего
/bin/rbash
)
Бывший.
$ 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
Обратите внимание, что на установку пользователем root недействительной оболочки входа пользователя (как здесь) не накладывается никаких ограничений, и это не делает недействительную оболочку действительной путем добавления ее в файл /etc/shells.
$ 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
Еслицельshell отсутствовал в файле /etc/shells, вы бы получили другое сообщение:
$ 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
решение2
Вы можете попробовать команду sudo usermod -s /bin/bash flimm
решение3
Оболочка входа пользователя хранится в /etc/passwd
и защищена от изменения обычными пользователями. Вы можете увидеть ее с помощью getent passwd $USER
.
Если ваша новая оболочка указана в /etc/shells
, вы можете изменить ее с помощью:
sudo chsh -s $(type -p bash) $USER
Как и при любых манипуляциях с данными для входа, обязательно имейте сеанс входа на другом терминале ( Ctrl-Alt-F3) на случай, если вы что-то сломаете и не сможете войти в систему.