Гид по технологиям

Ограниченная оболочка в Linux: настройка и рекомендации

• 8 min read • Linux • Обновлено 24 Nov 2025
Ограниченная оболочка Linux — настройка
Ограниченная оболочка Linux — настройка

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

Изображение терминала Linux с несколькими окнами и подсказками

Что такое ограниченная оболочка

Ограниченная оболочка — это не отдельная программа, а режим работы стандартной оболочки (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

Снимок терминала, показывающий создание символьной ссылки rbash на /bin/bash

Создание пользователя с ограниченной оболочкой (пример «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 и выдача разрешённых команд

  1. Откройте или создайте файл /home/minnie/.bash_profile и укажите в нём только локальную директорию:
PATH=$HOME/bin
  1. Запрещаем редактирование этого файла обычным пользователям — владельцем должен быть root и права должны не позволять изменять файл другим:
sudo chown root:root /home/minnie/.bash_profile
sudo chmod 755 /home/minnie/.bash_profile
ls -l /home/minnie/.bash_profile

Это гарантирует, что пользователь не сможет поменять PATH при логине.

  1. Предоставьте в ~/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

Скриншот терминала с выполнением ls в окружении пользователя minnie

Совет по безопасности: не создавайте в ~/bin ссылки на комплексные утилиты, которые могут запускать интерпретаторы или давать доступ к shell-выражениям (например, perl, python, awk, bash), если вы не хотите давать такие возможности.

Ограничение существующих пользователей

Чтобы сменить оболочку для существующего пользователя, используйте usermod:

sudo usermod -s /bin/rbash mary

Проверьте /etc/passwd, чтобы убедиться, что shell установлен корректно:

less /etc/passwd

Не забудьте обновить файл .bash_profile (или аналог) и набор команд в ~/bin для этого пользователя.

Вывод less /etc/passwd, где видно shell пользователя

Ограниченные скрипты: как запуск и поведение

Скрипт можно перевести в ограниченный режим двумя способами:

  • Вручную включить режим внутри скрипта (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 корректен в вашем файле.)

Вывод выполнения restricted.sh в терминале с разделением на обычный и restricted режимы

Когда ограниченная оболочка недостаточна — типичные обходы и примеры

Важно понимать, что rbash — это средство уменьшения рисков, а не абсолютная преграда. Ниже перечислены категории обходов, которые могут сработать при неправильной настройке:

  • Доступ к интерпретаторам в списке разрешённых команд (python, perl, ruby) может дать REPL с возможностью выполнения системных вызовов.
  • Утилита с возможностью запуска редактора или интерпретатора (например, vi с :!bash) может дать доступ к shell.
  • Команды, которые принимают путь к выполняемым файлам или модулям, позволяют запустить произвольный код, если у пользователя есть возможность записать файл в доступный путь.
  • Неправильные права на домашнюю директорию (/home/minnie) — если в ней есть writable каталоги для других пользователей, это создаёт риск подмены инструментов.

Counterexample (когда rbash не подойдёт): если нужно изолировать ненадёжный код в продакшне (внешние пользователи, многопользовательская услуга), используйте контейнеры, cgroups, chroot, namespace isolation, SELinux/AppArmor.

Альтернативные подходы и уровни зрелости защиты

Ментальная модель: рассматривайте rbash как «ворота» — простой забор вокруг участка; хорош для обозначения границ, но не для защиты от упорного злоумышленника.

Уровни зрелости защиты (от простого к сильному):

  1. Ограниченная оболочка + ограниченный PATH + строгие права на файлы.
  2. chroot-окружение или ограниченный контейнер (например, systemd-nspawn).
  3. Контейнеры (Docker/LXC) с ограничениями ресурсов и сетевыми правилами.
  4. Механизмы Mandatory Access Control (SELinux, AppArmor) с тонкой политикой.
  5. Многослойная модель: контейнер + MAC + файловые ACL + аудит.

Короткая методология (шаги, чтобы настроить безопасно)

  1. Решите цель: какие действия пользователь должен уметь выполнять? Составьте список разрешённых команд.
  2. Создайте пользователя с shell = /bin/rbash.
  3. Настройте его ~/.bash_profile так, чтобы PATH указывал только на ~/bin.
  4. Положите в ~/bin только те утилиты, которые строго необходимы, создавая символические ссылки от полноценных бинарников.
  5. Установите владельца и права на ~/.bash_profile (root:root, 755) и на ~ (не давать другим писать в домашнюю папку пользователя).
  6. Тестируйте все возможные сценарии: запуск интерактивных команд, попытки перенаправления, попытки запуска интерпретаторов.
  7. Документируйте и периодически пересматривайте список разрешённых инструментов.

Роль-зависимые чек-листы

Для администратора перед вводом в эксплуатацию:

  • Проверить корзину разрешённых команд и их зависимости.
  • Установить права 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)

Если после изменения что-то пошло не так:

  1. Восстановите /etc/passwd (если меняли вручную) или переключите shell пользователя обратно: sudo usermod -s /bin/bash minnie.
  2. Удалите проблемные ссылки из ~/bin.
  3. Восстановите файлы .bash_profile из резервной копии.
  4. Проверьте логи и уведомите пользователя/заинтересованные стороны.

Частые ошибки и «ловушки» при настройке

  • Оставлять стандартный 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 только безопасные ссылки.
  • Ограничьте права на файлы и добавьте аудит.

Спасибо за внимание. При возникновении конкретной задачи (набор команд, требования по доступу) опишите кейс — предложу точную последовательность действий и конфигурацию.

Терминал, демонстрирующий итоговую конфигурацию ограниченной оболочки

Снимок терминала с созданием пользователя и выводом команд, связанных с rbash

Вывод выполнения скрипта restricted.sh: проверка поведения в restricted-режиме

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро