Ограниченная оболочка в Linux: настройка и рекомендации
Важно: ограниченная оболочка ограничивает возможности, но не предотвращает целенаправленную атаку. Для критичных сред используйте полноценную изоляцию (контейнеры, chroot, SELinux, AppArmor, sandboxing).

Что такое ограниченная оболочка
Ограниченная оболочка — это не отдельная программа, а режим работы стандартной оболочки (bash, ksh, fish и др.). В режиме “restricted” оболочка накладывает набор ограничений: пользователь не может менять текущий каталог (cd), подменять процесс (exec), использовать перенаправления, менять важные переменные окружения (PATH, SHELL, BASH_ENV, ENV), вызывать команды с указанием путей (команды содержащие “/“) и т. п.
Краткое определение: ограниченная оболочка — это режим, где минимизирована поверхность воздействия пользователя в интерактивной сессии или в скрипте.
Плюсы:
- Не требует установки — доступна в любой системе с Bash.
- Легко настроить и поддерживать.
- Может применяться как для аккаунтов, так и для выполнения скриптов.
Минусы:
- Не обеспечивает 100% безопасности — при наличии привилегированных уязвимостей или ошибок конфигурации пользователь может обойти ограничения.
- Требует тщательной настройки PATH и прав на файлы в домашней директории.
Как работает rbash (ограниченный Bash)
Bash запускается в режиме ограниченной оболочки либо через опцию -r, либо если имя вызываемого исполняемого файла — rbash. В этом режиме отключаются перечисленные выше возможности.
Примеры поведения в режиме restricted:
- Нельзя выполнить
cdдля смены каталога. - Нельзя менять переменные PATH, SHELL, BASH_ENV, ENV (только чтение).
- Нельзя делать перенаправления
>и<. - Нельзя вызывать команды с абсолютным или относительным путём (
/usr/bin/command,./script). - Нельзя запускать
execдля подмены текущего процесса оболочки. - Скрипты, запущенные с опциями, не могут использовать заблокированные возможности.
Команды для проверки наличия rbash в системе (пример Ubuntu):
whereis rbash
ls -l /usr/bin/rbashЕсли rbash отсутствует как символьная ссылка, на некоторых дистрибутивах (Manjaro, Fedora) её можно создать вручную:
sudo ln -s /bin/bash /bin/rbash
whereis rbash
Создание пользователя с ограниченной оболочкой (пример «minnie»)
Ниже пример создания нового пользователя minnie с оболочкой /bin/rbash, установка пароля и создание каталога bin в её домашней папке:
sudo useradd minnie -s /bin/rbash
sudo passwd minnie
sudo mkdir -p /home/minnie/binЭто заставит Bash запускаться в ограниченном режиме при логине minnie. Обратите внимание: даже в rbash команда без пути будет выполняться, если она найдена в PATH. Если PATH содержит стандартные каталоги, пользователь может запускать множество системных утилит.
pingЧтобы ограничить набор доступных команд, измените PATH пользователя, чтобы он указывал только на её собственную папку ~/bin.
Жёсткое ограничение PATH и выдача разрешённых команд
- Откройте или создайте файл /home/minnie/.bash_profile и укажите в нём только локальную директорию:
PATH=$HOME/bin- Запрещаем редактирование этого файла обычным пользователям — владельцем должен быть root и права должны не позволять изменять файл другим:
sudo chown root:root /home/minnie/.bash_profile
sudo chmod 755 /home/minnie/.bash_profile
ls -l /home/minnie/.bash_profileЭто гарантирует, что пользователь не сможет поменять PATH при логине.
- Предоставьте в
~/binсимволические ссылки на строго необходимые утилиты:
sudo ln -s /bin/ls /home/minnie/bin
sudo ln -s /bin/top /home/minnie/bin
sudo ln -s /bin/uptime /home/minnie/bin
sudo ln -s /bin/pinky /home/minnie/binПосле следующего входа minnie увидит только перечисленные утилиты и встроенные команды bash (echo, alias, logout и т. п.).
ls
pinky dave
uptime
Совет по безопасности: не создавайте в ~/bin ссылки на комплексные утилиты, которые могут запускать интерпретаторы или давать доступ к shell-выражениям (например, perl, python, awk, bash), если вы не хотите давать такие возможности.
Ограничение существующих пользователей
Чтобы сменить оболочку для существующего пользователя, используйте usermod:
sudo usermod -s /bin/rbash maryПроверьте /etc/passwd, чтобы убедиться, что shell установлен корректно:
less /etc/passwdНе забудьте обновить файл .bash_profile (или аналог) и набор команд в ~/bin для этого пользователя.

Ограниченные скрипты: как запуск и поведение
Скрипт можно перевести в ограниченный режим двумя способами:
- Вручную включить режим внутри скрипта (
set -r). Тогда последующая часть скрипта будет выполняться в restricted-режиме. - Запустить скрипт через интерпретатор, запущенный с флагом
-r(или использовать shebang, запускающийbash -r).
Пример скрипта из оригинального материала (сохраните как restricted.sh):
#!/bin/bash
# script starts in normal Bash shell
echo "## In UNrestricted mode! ##"
echo
echo "Current directory: `pwd`"
echo "Changing directory"
cd /usr/share
echo "Now in directory: `pwd`"
echo "Changing to home directory"
cd ~
echo "Now in directory: `pwd`"
# Setting restricted mode
set -r
echo
echo "## In restricted mode! ##"
echo
echo "Current directory: `pwd`"
echo "Changing directory to /home/"
cd /home
echo "Still in directory: `pwd`"
echo
echo "Trying to start another shell"
/bin/bash
echo
echo "Trying to redirect command output"
ls -l $HOME > my_files.txt
cat my_files.txt
echo
exit 0Сделайте файл исполняемым:
chmod +x restricted.sh
./restricted.shВ части скрипта после set -r все запрещённые операции будут блокироваться: смена каталога, запуск подстановочных команд с путями, перенаправления и т. д.
Примечание: чтобы заставить весь скрипт работать в restricted-режиме при запуске, в shebang можно было бы указать #!/bin/bash -r. (В исходном материале указан похожий пример с опечаткой !#/bin/bash -r; убедитесь, что shebang корректен в вашем файле.)

Когда ограниченная оболочка недостаточна — типичные обходы и примеры
Важно понимать, что rbash — это средство уменьшения рисков, а не абсолютная преграда. Ниже перечислены категории обходов, которые могут сработать при неправильной настройке:
- Доступ к интерпретаторам в списке разрешённых команд (python, perl, ruby) может дать REPL с возможностью выполнения системных вызовов.
- Утилита с возможностью запуска редактора или интерпретатора (например, vi с :!bash) может дать доступ к shell.
- Команды, которые принимают путь к выполняемым файлам или модулям, позволяют запустить произвольный код, если у пользователя есть возможность записать файл в доступный путь.
- Неправильные права на домашнюю директорию (
/home/minnie) — если в ней есть writable каталоги для других пользователей, это создаёт риск подмены инструментов.
Counterexample (когда rbash не подойдёт): если нужно изолировать ненадёжный код в продакшне (внешние пользователи, многопользовательская услуга), используйте контейнеры, cgroups, chroot, namespace isolation, SELinux/AppArmor.
Альтернативные подходы и уровни зрелости защиты
Ментальная модель: рассматривайте rbash как «ворота» — простой забор вокруг участка; хорош для обозначения границ, но не для защиты от упорного злоумышленника.
Уровни зрелости защиты (от простого к сильному):
- Ограниченная оболочка + ограниченный PATH + строгие права на файлы.
- chroot-окружение или ограниченный контейнер (например, systemd-nspawn).
- Контейнеры (Docker/LXC) с ограничениями ресурсов и сетевыми правилами.
- Механизмы Mandatory Access Control (SELinux, AppArmor) с тонкой политикой.
- Многослойная модель: контейнер + MAC + файловые ACL + аудит.
Короткая методология (шаги, чтобы настроить безопасно)
- Решите цель: какие действия пользователь должен уметь выполнять? Составьте список разрешённых команд.
- Создайте пользователя с shell = /bin/rbash.
- Настройте его
~/.bash_profileтак, чтобы PATH указывал только на~/bin. - Положите в
~/binтолько те утилиты, которые строго необходимы, создавая символические ссылки от полноценных бинарников. - Установите владельца и права на
~/.bash_profile(root:root, 755) и на~(не давать другим писать в домашнюю папку пользователя). - Тестируйте все возможные сценарии: запуск интерактивных команд, попытки перенаправления, попытки запуска интерпретаторов.
- Документируйте и периодически пересматривайте список разрешённых инструментов.
Роль-зависимые чек-листы
Для администратора перед вводом в эксплуатацию:
- Проверить корзину разрешённых команд и их зависимости.
- Установить права 700 для домашней директории пользователя (если возможно).
- [ ] Убедиться, что в
~/binнет ссылок на интерпретаторы. - [ ] Установить владельца
.bash_profileв root:root и права 755. - Провести тесты обхода (см. раздел тест-кейсов).
Для поддерживающего персонала (оператор):
- Иметь список пользователей с rbash и список доступных команд.
- Уметь временно расширить набор команд, документируя изменения.
- Контролировать логи входа (auth.log) и команды (если настроен аудит).
Для разработчика скриптов:
- Разрабатывать скрипты без использования запрещённых операций (cd, перенаправлений если требуется restricted, и т. д.).
- Явно документировать ожидания переменных окружения и путей.
Тест-кейсы и критерии приёмки
Критерии приёмки при настройке пользователя с rbash:
- Пользователь не может выполнить
cd /somewhere. - Пользователь не может выполнить
/bin/bashили./some-script(если PATH не содержит путь). - Пользователь может выполнить заранее одобренные команды из
~/bin. - Пользователь не может изменить
~/.bash_profileвручную. - Скрипты, у которых включён restricted-режим, блокируют перенаправления и подстановки с путями.
Пример теста: выполните вход от имени пользователя и попытайтесь выполнить ls > out.txt. Ожидаемый результат: операция запрещена.
Жесткая политика безопасности и рекомендации по защите
- Не давайте в
~/binутилиты, которые умеют исполнять код (интерпретаторы, текстовые редакторы с возможностью запуска shell). - Установите права на домашний каталог пользователя:
chmod 750 /home/minnie(если это соответствует требованиям доступа). - Используйте SELinux/AppArmor для дополнительного ограничения действий пользователя.
- Логи и аудит: включите запись команд и действий (auditd, bash history с централизованным журналированием) и контролируйте попытки обхода.
- Периодически проверяйте наличие новых исполняемых файлов в
~/binи права на них.
Риски и смягчения:
- Риск: запись файлов в домашней директории, которые затем могут быть использованы для обхода. Смягчение: запрет записи со стороны других пользователей, контроля ACL.
- Риск: символические ссылки в общих каталогах. Смягчение: держать
~/binв приватном пространстве, проверять ссылки и их цели.
Быстрый план отката (rollback)
Если после изменения что-то пошло не так:
- Восстановите
/etc/passwd(если меняли вручную) или переключите shell пользователя обратно:sudo usermod -s /bin/bash minnie. - Удалите проблемные ссылки из
~/bin. - Восстановите файлы
.bash_profileиз резервной копии. - Проверьте логи и уведомите пользователя/заинтересованные стороны.
Частые ошибки и «ловушки» при настройке
- Оставлять стандартный PATH в
.bash_profileвместо замены только на$HOME/bin— это сводит ограничение на нет. - Давать права 777 на домашний каталог — позволяет другим пользователям подменять программы.
- Давать ссылки на сложные утилиты (perl/python) без дополнительных ограничений.
- Ожидать, что rbash сделает изолированный сервис — это не так; rbash ориентирован на интерактивные и простые автоматические сценарии.
Decision flow (упрощённое дерево принятия решения)
flowchart TD
A[Нужно ли ограничить аккаунт?] -->|Да| B{Требуется защита от
целенаправленного взлома?}
B -->|Да| C[Использовать контейнеры/SELinux/чёткую политику]
B -->|Нет| D[Достаточно rbash + строгий PATH]
A -->|Нет| E[Не ограничивать]
C --> F[Настроить и протестировать]
D --> F
F --> G[Мониторинг и аудит]Короткий глоссарий (одна строка на термин)
- rbash — Bash, запущенный в режиме restricted.
- PATH — переменная окружения, задающая каталоги для поиска исполняемых файлов.
- chroot — механизм смены корневого каталога процесса для изоляции файловой системы.
- SELinux/AppArmor — системы принудительного контроля доступа.
Итог и рекомендации
Ограниченная оболочка — удобный инструмент для быстрой настройки ограничений для отдельных пользователей и скриптов. Она легко внедряется и не требует дополнительных пакетов, но не должна рассматриваться как единственное средство для защиты важных сервисов. Для ответственных сценариев комбинируйте rbash с более строгими механизмами изоляции и контролируйте доступ через аудит и права на файлы.
Краткий план внедрения:
- Определите допустимые команды.
- Создайте пользователя с shell=/bin/rbash.
- Перенастройте PATH на
~/bin. - Засуньте в
~/binтолько безопасные ссылки. - Ограничьте права на файлы и добавьте аудит.
Спасибо за внимание. При возникновении конкретной задачи (набор команд, требования по доступу) опишите кейс — предложу точную последовательность действий и конфигурацию.



Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента