Введение в архитектуру доверенных оболочек Linux
При внедрении нестандартных командных интерпретаторов или развертывании кастомных сценариев для ограничения сессий пользователей системный администратор сталкивается с необходимостью регистрации этих исполняемых файлов в реестре доверенных сред. Стандартная утилита add-shell автоматизирует внесение записей в конфигурационный файл /etc/shells, гарантируя корректное взаимодействие с командой chsh и модулями аутентификации. В данном практическом руководстве мы подробно разберем внутреннюю логику работы доверенных оболочек, безопасное добавление скриптов в систему, а также полный цикл их последующего удаления с помощью remove-shell.
1. Назначение конфигурации /etc/shells и аудит валидных интерпретаторов
Конфигурационный файл /etc/shells выполняет роль белого списка легитимных командных процессоров в операционной системе. Для первичного ознакомления со списком разрешенных сред выполним вывод его содержимого командой cat /etc/shells.
Защитные механизмы ОС (включая PAM-стек и демоны удаленного доступа) разрешают переключение стартовой оболочки непривилегированным пользователям через chsh исключительно в том случае, если целевой бинарный файл фигурирует в данном перечне.

Чтобы сопоставить текущие системные оболочки с зарегистрированными путями, запросим абсолютные адреса стандартных интерпретаторов с помощью which bash sh.
Сверка обнаруженных путей /usr/bin/bash и /usr/bin/sh со строками из /etc/shells позволяет убедиться, что установленные по умолчанию бинарники обладают статусом доверенных командных интерфейсов.

2. Развертывание альтернативной оболочки (Zsh) и регистрация через add-shell
В качестве примера интеграции сторонней среды запустим установку популярной командной оболочки zsh через стандартный менеджер пакетов.

Следующим шагом необходимо выяснить точный бинарный путь только что установленного интерпретатора, для чего вызывается which zsh.
Если в консоли отображается пустой вывод, это сигнализирует либо о незавершенной инициализации пакета, либо об отсутствии файла в переменных окружения PATH.

Команда sudo add-shell $(which zsh) предназначена для динамической передачи абсолютного пути в реестр /etc/shells.
В ситуации, когда подоболочка возвращает пустое значение из-за ненаходимости бинарника, утилита запускается без обязательного позиционного аргумента, выводя системную справку add-shell shellname.

Для контроля модификации конфигурационного файла выполним проверку регулярным выражением с помощью grep -E 'zsh$' /etc/shells.
Отсутствие совпадающих строк подтверждает, что при некорректном синтаксисе вызова файл /etc/shells остался в исходном состоянии и запись не появилась.

3. Проектирование изолированной оболочки меню и добавление в системный реестр
Нередко перед инженером встает задача ограничить возможности входа оператора предопределенным текстовым меню. Создадим базовый bash-сценарий по пути /usr/local/bin/custom-menu.sh, выводящий приветственное оповещение при открытии терминальной сессии.

Поскольку сценарий будет запускаться в качестве полноценной оболочки входа, назначим ему флаг исполнения посредством sudo chmod +x /usr/local/bin/custom-menu.sh.

Теперь необходимо легитимизировать созданный скрипт на уровне операционной системы. Выполнение sudo add-shell /usr/local/bin/custom-menu.sh автоматически и без риска повреждения синтаксиса добавляет путь в список системных оболочек.

Для инспекции внесенных изменений прочитаем финальные строки реестра с помощью tail -n 3 /etc/shells.
Появление /usr/local/bin/custom-menu.sh в конце списка свидетельствует об успешном присвоении скрипту статуса полноценного доверенного интерпретатора.

4. Привязка к учетной записи и корректная очистка конфигурации утилитой remove-shell
Проверим применимость зарегистрированной оболочки на практике: создадим тестового пользователя testuser, сразу назначив ему наш скрипт в качестве среды входа через конструкцию sudo id -u testuser >/dev/null 2>&1 || sudo useradd -m -s /usr/local/bin/custom-menu.sh testuser.

Убедимся в корректности атрибутов учетной записи в базе данных пользователей с помощью grep '^testuser:' /etc/passwd.
В седьмом поле полученной записи зафиксирован путь /usr/local/bin/custom-menu.sh, подтверждающий успешную привязку нестандартного командного интерфейса.

После завершения тестирования выполним полное удаление временного аккаунта вместе с его домашней директорией командой sudo userdel -r testuser 2>/dev/null || true.

Чтобы исключить устаревший путь из списка доверенных интерпретаторов, воспользуемся штатным деинсталлятором: sudo remove-shell /usr/local/bin/custom-menu.sh аккуратно вырежет указанную строку из /etc/shells.

Теперь можно безболезненно ликвидировать сам исполняемый файл скрипта из файловой системы с помощью sudo rm -f /usr/local/bin/custom-menu.sh.

Финализируем аудит чистоты конфигурации командой grep 'custom-menu.sh' /etc/shells || echo '등록 해제 완료'.
Уведомление об успешной отмене регистрации удостоверяет, что в системных таблицах не осталось фантомных ссылок на несуществующие файлы.

Применение связки add-shell и remove-shell обеспечивает целостность /etc/shells и предотвращает синтаксические ошибки, неизбежно возникающие при ручной правке текстовыми редакторами. Использование специализированного системного инструментария — ключевой элемент надежного администрирования пользовательских сред в Linux.