RBash — это restricted shell bash, командная оболочка операционной системы семейства Unix, которая может ограничивать некоторые действия пользователей. Это может быть полезно, например, когда требуется ограничить доступ по SSH только рамками выполнения определенных задач и не дать пользователю доступ к системным файлам и приложениям.

Перечень встроенных ограничений rbash

Ограниченный командный интерпретатор rbash ведет себя аналогично bash, но следующие действия не разрешены или не выполняются:

  • запрещена смена текущего каталога командой cd
  • запрещено изменять переменные окружения PATH, SHELL, ENV, BASH_ENV
  • запрещен доступ к переменной SHELLOPTS
  • запрещено перенаправление вывода
  • запрещен вызов утилит, в названии которых присутствует хотя бы один символ «слэш» (/)
  • запрещен вызов команды exec для запуска другого процесса
  • запрещен ряд других команд, которые могут использовать сценарий для выполнения непредусмотренных действий
  • запрещен выход из ограниченного режима

Ограничения начинают действовать сразу после чтения файлов начального запуска. При выполнении команды, которая оказалась сценарием командного интерпретатора, rbash отключает любые ограничения в порожденном командном интерпретаторе для выполнения этого сценария.
Подробнее здесь.

Установка rbash

Rbash — это просто символьный линк, который по умолчанию отсутствует в Red Hat, Fedora, Centos, но пристутствет в Ubuntu.
Чтобы проверить установлен ли rbash или нет можно выполнить команду ниже, которая должна показать путь к rbash. Если в результате пусто, то rbash отсутствует.

Далее все команды выполняются от пользователя root либо при помощи команды sudo.
Прописываем ссылки на rbash:

Добавление нового пользователя

Как пример будем ограничивать доступ для пользователя с именем restricteduser. Добавим его:

Изменим интерактивную командную оболочку для пользователя restricteduser на rbash:

Ограничим пользователя в его домашнем каталоге

Изменим владельца и права доступа домашнего каталога пользователя restricteduser:

Запретим доступ пользователя к критическим файлам.

В итоге содержание домашнего каталога пользователя restricteduser должно выглядеть примерно так:

Базовое ограничение доступа сделано.

Добавление разрешенных приложений пользователю

Для того чтобы дать разрешение пользователю выполнять приложение достаточно добавить символьный линк (ссылку) на это приложение. Этот линк следует разместить в его каталоге usr/bin.
Например, добавим пользователю restricteduser возможность копировать файлы под своим именем на этот сервер, для этого надо выполнить следующую команду:

Если есть необходимость выполнять команды с привилегиями пользователя root, то для этих целей как нельзя лучше подходит команда sudo. Выполните команду visudo и добавьте пользователя restricteduser и команды, которые разрешено запускать с привилегией root’а. Останется только сделать ссылку на эти команды в каталоге usr/bin.

Удаленный доступ

Для удаленного доступа рекомендую использовать ключи вместо паролей, которые не только упростят и улучшат безопасность доступа к серверу, но также могут ограничить пользователей от потенциально нежелательных действий, таких как запуск команд, открытие и перенаправление портов. Как генерировать ключи для удаленного доступа можно прочитать здесь.

Для того чтобы настроить удаленный доступ без пароля для пользователя restricteduser потребуется сделать три шага.

1. Временно установить для пользователя restricteduser командный интерпретатор bash и выполнить ряд необходимых подготовительных действий:

2. На удаленном сервере сгенерировать ключи и скопировать публичный ключ на локальный сервер для пользователя restricteduser:

3. Вернуть для пользователя restricteduser ограниченный командный интерпретатор rbash и выполнить ряд необходимых завершающих действий:

Проверяем удаленный доступ:

Пользователям, которые хотят еще сильнее обезопасить свою систему следует обратить внимание на такие средства, как chroot, SELinux и Apparmor.