Для чего нужен login shell
Вход в систему обрабатывается оболочкой и другими инструментами, например, сам login или ваш диспетчер рабочего стола (с помощью PAM и различных других инструментов).
Назначение оболочки входа не в том, чтобы обрабатывать вход в систему, а в том, чтобы вести себя соответствующим образом как первая оболочка в сеансе входа в систему: в основном это означает обработку файлов запуска, которые должны обрабатываться только один раз за сеанс входа, и защиту сеанса входа в систему от нежелательных взаимодействие с некоторыми функциями системы (в частности, приостановка работы).
Особенности оболочки входа, по крайней мере, реализованной в Bash, заключаются в следующем:
- оболочка входа в систему обрабатывает команды из /etc/profile, затем первый файл, который она находит среди ~/.bash_profile, ~/.bash_login и ~/.profile (если только это не интерактивная оболочка входа, запущенная без параметра --login);
- при выходе из оболочки входа выполняется logout вместо exit;
- выход из оболочки входа в систему прерывает все задания;
- оболочку входа нельзя приостановить;
- оболочка входа устанавливает переменную HOME (кроме POSIX-корректного режима);
- оболочка входа устанавливает параметр оболочки login_shell.
С практической точки зрения, выбранная оболочка входа в систему определяет оболочку, которая используется для пользователя по умолчанию. Хотя конечно, ничто не мешает запустить любую другую установленную в вашей системе оболочку.
Смотрите также: Различия между Login shell и Non login shell (оболочка с входом и оболочка без входа)
Как узнать, какие оболочки установлены в системе
Чтобы изменить оболочку по умолчанию для пользователя, нужно знать, какие оболочки доступны и как они правильно называются.
Один из способов узнать правильные названия оболочек и пути до исполнимых файлов — это запустить следующую команду:
chsh -l
Но предыдущая команда срабатывает не на всех дистрибутивах (работает на Arch Linux, но не работает на производных Debian).
Поэтому можно воспользоваться универсальным методом — посмотреть содержимое файла /etc/shells:
cat /etc/shells
В файле shells собраны пути к действующим оболочкам входа.
/etc/shells — это текстовый файл, который содержит полные пути к действующим оболочкам входа. Этот файл просматривается программой chsh и доступен для запроса другими программами.
Имейте в виду, что есть программы, которые обращаются к этому файлу, чтобы узнать, является ли пользователь обычным пользователем; например, демоны FTP традиционно запрещают доступ пользователям с оболочками, не включёнными в этот файл.
Программа для смены оболочки пользователя — chsh
chsh — измените оболочку входа пользователя на постоянной основе.
Если вы временно хотите изменить шелл, то установите его и запустите. Примеры команд запуска различных оболочек:
sh bash pwsh dash zsh
chsh используется для изменения оболочки входа в систему. Если оболочка не указана в командной строке, chsh запрашивает её.
chsh поддерживает нелокальные записи (kerberos, LDAP и т.д.), если они связаны с libuser, в противном случае используйте ypchsh, lchsh или любую другую реализацию для нелокальных записей.
Синтаксис команды:
sudo chsh -s ОБОЛОЧКА
В качестве ОБОЛОЧКИ нужно указать одну из оболочек, как они перечислены в файле /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
Связанные статьи:
- Как создать нового пользователя в Linux (56.6%)
- Как вывести список пользователей в Linux (56.6%)
- Как удалить пользователя в Linux (и удалить все его «хвосты») (56.6%)
- Как в Linux добавить пользователя в группу (или вторичную группу) (54.2%)
- Как найти дубликаты файлов на Linux с помощью dupeGuru (50%)
- Как сделать общую сетевую папку в Linux (настройка SMB в Linux) (RANDOM - 50%)