- 3 Ways to Change a Users Default Shell in Linux
- 1. usermod Utility
- 2. chsh Utility
- 3. Change User Shell in /etc/passwd File
- /etc/shells — файл разрешённых оболочек для входа пользователя в систему linux
- /etc/shells — файл разрешённых оболочек для входа пользователя в операционную систему Debian
- Исходный /etc/shells
- Добавление новой shell-оболочки в системный файл /etc/shells
- Резюме
- Как в Linux изменить login shell (оболочку входа в систему). Инструкция по команде chsh
- Как узнать, какие оболочки установлены в системе
- Программа для смены оболочки пользователя — chsh
- Смена оболочки с помощью usermod
- How to Change Shell in Linux
- How to know the default shell?
- How to see what shell are you currently using?
- How to see all the shells available on your Linux system?
- How to change the shell to use another one?
- How to change the default shell in Linux permanently?
3 Ways to Change a Users Default Shell in Linux
In this article, we will describe how to change a user’s shell in Linux. The shell is a program that accepts and interprets commands; there are several shells such as bash, sh, ksh, zsh, fish and many other lesser known shells available on Linux.
Bash (/bin/bash) is a popular shell on most if not all Linux systems, and it’s normally the default shell for user accounts.
There are several reasons for changing a user’s shell in Linux including the following:
- To block or disable normal user logins in Linux using a nologin shell.
- Use a shell wrapper script or program to login user commands before they are sent to a shell for execution. Here, you specify the shell wrapper as a user’s login shell.
- To meet a user’s demands (wants to use a specific shell), especially those with administrative rights.
When creating user accounts with the useradd or adduser utilities, the —shell flag can be used to specify the name of a user’s login shell other than that specified in the respective configuration files.
A login shell can be accessed from a text based interface or via a SSH from remote Linux machine. However, if you login via a graphical user interface (GUI), you can access the shell from a terminal emulators like xterm, konsole and many more.
Let’s first list all available shells on your Linux system, type.
# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/tcsh /bin/csh /bin/dash
Before you proceed any further, note that:
- A user can change their own shell to any thing: which, however must be listed in the /etc/shells file.
- Only root can run a shell not listed in /etc/shells file.
- If an account has a restricted login shell, then only root can change that user’s shell.
Now let’s discuss three different ways to change Linux user shell.
1. usermod Utility
usermod is a utility for modifying a user’s account details, stored in the /etc/passwd file and the -s or —shell option is used to change the user’s login shell.
In this example, we’ll first check user tecmint’s account information to view his default login shell and then change its login shell from /bin/sh to /bin/bash as follows.
# grep tecmint /etc/passwd # usermod --shell /bin/bash tecmint # grep tecmint /etc/passwd
2. chsh Utility
chsh is a command line utility for changing a login shell with the -s or –shell option like this.
# grep tecmint /etc/passwd # chsh --shell /bin/sh tecmint # grep tecmint /etc/passwd
The two methods above all modify the shell specified in /etc/passwd file which you can edit manually as in the third method below.
3. Change User Shell in /etc/passwd File
In this method, simply open the /etc/passwd file using any of your favorite command line text editors and change a specific users shell.
When your done editing, save and close the file.
Do not forget to read these related topics:
In this article, we described various ways of changing a user’s shell in Linux. To share any thoughts with us, use the comment section below.
/etc/shells — файл разрешённых оболочек для входа пользователя в систему linux
При создании нового пользователя в Debian (или другой linux-системе) можно задать ему разные системные оболочки, которые будут обслуживать его при правильном вводе логина и пароля в системе. Для этого нужно её указать в шаблоне создания пользователя или ввести явно при создании нового пользователя командой useradd -s (см. подробнее по первой ссылке в этой статье). Всё это хорошо, но некоторые системные оболочки не прописаны в системе и для того, чтобы ими можно было пользоваться, для начала их нужно занести в систему.
/etc/shells — файл разрешённых оболочек для входа пользователя в операционную систему Debian
Итак, например, вы создаёте ftp-пользователя, которому не обязательно иметь shell-доступ в систему и прописываете ему оболочку /bin/false так, чтобы он мог пользоваться только командами fto-протокола, но не мог ничего больше на сервере. Но при попытке зайти на сервер вылетает ошибка. Заходим в логи ftp-сервера и видим запись:
FTP session opened. USER tester (Login failed): Invalid shell: '/bin/false'
То есть система не может распознать shell-оболочку и рвёт соединение с пользователем.
Список всех разрешённых в системе shell-оболочек находится в файле /etc/shells .
Исходный /etc/shells
Посмотрим содержимое файла /etc/shells :
[email protected]:~# cat /etc/shells # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash /bin/rbash
Действительно, оболочки /bin/false , и теперь не удивительно, что сервер не даёт пользователю с этим shell зайти в систему.
Добавление новой shell-оболочки в системный файл /etc/shells
Найдя причину ошибки, исправить её не составит труда. Либо ручками, либо командой в консоли:
добавим ещё одну shell-оболочку /bin/false .
Резюме
В конечном итоге, когда файл /etc/shells выглядит так:
[email protected]:~# cat /etc/shells # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash /bin/rbash /bin/false
(см.последнюю строчку), пользователь нормально входит в систему и может работать в ней по протоколу ftp, пользуясь тем набором команд, который позволет ему его клиент и ваш ftp-сервер. Ура!
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! 😉
Как в Linux изменить login shell (оболочку входа в систему). Инструкция по команде chsh
Вход в систему обрабатывается оболочкой и другими инструментами, например, сам login или ваш диспетчер рабочего стола (с помощью PAM и различных других инструментов).
Назначение оболочки входа не в том, чтобы обрабатывать вход в систему, а в том, чтобы вести себя соответствующим образом как первая оболочка в сеансе входа в систему: в основном это означает обработку файлов запуска, которые должны обрабатываться только один раз за сеанс входа, и защиту сеанса входа в систему от нежелательных взаимодействие с некоторыми функциями системы (в частности, приостановка работы).
Особенности оболочки входа, по крайней мере, реализованной в Bash, заключаются в следующем:
- оболочка входа в систему обрабатывает команды из /etc/profile, затем первый файл, который она находит среди ~/.bash_profile, ~/.bash_login и ~/.profile (если только это не интерактивная оболочка входа, запущенная без параметра —login);
- при выходе из оболочки входа выполняется logout вместо exit;
- выход из оболочки входа в систему прерывает все задания;
- оболочку входа нельзя приостановить;
- оболочка входа устанавливает переменную HOME (кроме POSIX-корректного режима);
- оболочка входа устанавливает параметр оболочки login_shell.
С практической точки зрения, выбранная оболочка входа в систему определяет оболочку, которая используется для пользователя по умолчанию. Хотя конечно, ничто не мешает запустить любую другую установленную в вашей системе оболочку.
Как узнать, какие оболочки установлены в системе
Чтобы изменить оболочку по умолчанию для пользователя, нужно знать, какие оболочки доступны и как они правильно называются.
Один из способов узнать правильные названия оболочек и пути до исполнимых файлов — это запустить следующую команду:
Но предыдущая команда срабатывает не на всех дистрибутивах (работает на Arch Linux, но не работает на производных Debian).
Поэтому можно воспользоваться универсальным методом — посмотреть содержимое файла /etc/shells:
В файле shells собраны пути к действующим оболочкам входа.
/etc/shells — это текстовый файл, который содержит полные пути к действующим оболочкам входа. Этот файл просматривается программой chsh и доступен для запроса другими программами.
Имейте в виду, что есть программы, которые обращаются к этому файлу, чтобы узнать, является ли пользователь обычным пользователем; например, демоны FTP традиционно запрещают доступ пользователям с оболочками, не включёнными в этот файл.
Программа для смены оболочки пользователя — chsh
chsh — измените оболочку входа пользователя на постоянной основе.
Если вы временно хотите изменить шелл, то установите его и запустите. Примеры команд запуска различных оболочек:
chsh используется для изменения оболочки входа в систему. Если оболочка не указана в командной строке, chsh запрашивает её.
chsh поддерживает нелокальные записи (kerberos, LDAP и т.д.), если они связаны с libuser, в противном случае используйте ypchsh, lchsh или любую другую реализацию для нелокальных записей.
В качестве ОБОЛОЧКИ нужно указать одну из оболочек, как они перечислены в файле /etc/shells.
chsh примет полный путь к любому исполняемому файлу в системе.
Поведение по умолчанию для пользователей без полномочий root — принимать только оболочки, перечисленные в файле /etc/shells, и выдавать предупреждение для пользователя root. Его также можно настроить во время компиляции, чтобы выдавать предупреждение только для всех пользователей.
Смена оболочки с помощью usermod
Утилита usermod с опцией -s меняет оболочку указанного пользователя.
Например, чтобы заблокировать пользователя root, используйте следующую команду:
sudo usermod -s /usr/sbin/nologin root
Чтобы назначить пользователю root оболочку Bash:
sudo usermod -s /usr/bin/bash root
Чтобы назначить пользователю root оболочку ZSH:
sudo usermod -s /usr/bin/zsh root
How to Change Shell in Linux
This quick tutorial shows how to check the running shell, available shell in the system and how to change the default shell in Linux.
This quick tutorial shows how to check the running shell, available shell in the system and how to change the default shell in Linux.
You probably are already aware that there are several shell available on Linux and other Unix-like systems. Bash is the default shell on almost all the Linux distributions but there are some other popular shells available such as:
Some of the shells provide additional features in a more user-friendly way. Take Fish shell for example. It partially starts showing you command hints based on your previous typed command. It’s quite handy if you don’t want remember the Linux terminal shortcuts all the time.
Let’s see a few things around shell in your Linux system.
How to know the default shell?
To know the default shell set for you in your Linux system, you can check the SHELL environment variable. Usually, the default shell is bash and it is shown like this:
How to see what shell are you currently using?
There is no single method that will tell you which shell you are using with 100% accuracy.
You can try either echo $0 that shows you an output like this:
or check the process using ps -p $$ like this:
ps -p $$ PID TTY TIME CMD 9625 pts/0 00:00:00 zsh
How to see all the shells available on your Linux system?
All the shells available on your Linux systems are listed in the file /etc/shells. You can use cat command or less command to view the content of the file.
# /etc/shells: valid login shells /bin/sh /bin/bash /bin/rbash /bin/dash /usr/bin/tmux /usr/bin/fish /bin/zsh /usr/bin/zsh
How to change the shell to use another one?
If you want to use a different shell, you can simply type its name and you’ll be logged into the new shell. For example, if you install zsh and want to use it, you can simply use:
You can enter exit to exit from the new shell and return to the previous one.
How to change the default shell in Linux permanently?
Suppose you liked the Fish shell a lot and you want to use it as your default shell so that every time you open the terminal or ssh into the system, you are using it instead of the default bash shell.
Linux allows you to change the default shell using the chsh command. The best way to change the default shell for your own logged in user is by specifying the shell name listed in the /etc/shells file with the -s option.
You must log out of the system so that the changes take into effect otherwise you’ll think that running chsh didn’t change the shell.
Did you notice that I had to specify the full path as it was listed in the /etc/shells file? If I had used chsh -s fish, it would have given me an error like “chsh: fish is an invalid shell”.
Which shell do you like?
Now that you know how to change shell, you may also read how to change users in Linux.
I hope this little article helped you to change the shell in Linux. If you have thought about changing the default shell, perhaps you use something other than the bash shell. Which shell is it? Why do you prefer it over the others?
Do share your views in the comments below.