Практическое руководство по add-shell в Linux

Введение в архитектуру доверенных оболочек Linux

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

1. Назначение конфигурации /etc/shells и аудит валидных интерпретаторов

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

Просмотр содержимого конфигурационного файла /etc/shells

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

Определение абсолютных путей для bash и sh

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

В качестве примера интеграции сторонней среды запустим установку популярной командной оболочки zsh через стандартный менеджер пакетов.

Установка пакета zsh в окружении Ubuntu

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

Поиск исполняемого файла zsh в путях PATH

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

Попытка регистрации оболочки при пустом аргументе

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

Проверка наличия zsh в конфигурации /etc/shells

3. Проектирование изолированной оболочки меню и добавление в системный реестр

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

Создание скрипта специализированного стартового меню

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

Назначение прав на исполнение для custom-menu.sh

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

Регистрация скрипта меню в качестве системной оболочки

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

Просмотр добавленной записи в конце файла /etc/shells

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, подтверждающий успешную привязку нестандартного командного интерфейса.

Проверка назначенного интерпретатора в файле /etc/passwd

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

Удаление тестового профиля и связанных каталогов

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

Исключение оболочки из белого списка утилитой remove-shell

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

Удаление файла сценария с диска

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

Финальная верификация отсутствия следов удаленной оболочки

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