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 отсутствует.
1 2 |
[root@localhost ~]$ which rbash /bin/rbash |
Далее все команды выполняются от пользователя root либо при помощи команды sudo.
Прописываем ссылки на rbash:
1 2 |
ln -s /bin/bash /bin/rbash bash -c 'echo "/bin/rbash" >> /etc/shells' |
Добавление нового пользователя
Как пример будем ограничивать доступ для пользователя с именем restricteduser. Добавим его:
1 |
useradd restricteduser |
Изменим интерактивную командную оболочку для пользователя restricteduser на rbash:
1 |
chsh -s /bin/rbash restricteduser |
Ограничим пользователя в его домашнем каталоге
Изменим владельца и права доступа домашнего каталога пользователя restricteduser:
1 2 |
chown root.restricteduser /home/restricteduser chmod 750 /home/restricteduser |
Запретим доступ пользователя к критическим файлам.
1 2 3 4 5 6 7 8 9 |
cd ~restricteduser rm -rf .bash_login .bashrc .profile .bash_profile .bash_logout touch .bashrc for i in .bash_login .bash_profile .bash_logout .profile; do echo ". .bashrc" > $i; done echo "export PATH=/home/restricteduser/usr/bin" >> .bashrc mkdir -p usr/bin chmod -R 750 usr/bin chown -R root.restricteduser .bash* .profile /home/restricteduser chmod 640 .bash* .profile |
В итоге содержание домашнего каталога пользователя restricteduser должно выглядеть примерно так:
1 2 3 4 5 6 7 8 9 |
[root@localhost restricteduser]$ ls -la ~restricteduser drwxr-x---. 5 root restricteduser 4096 Jun 3 12:21 . drwxr-xr-x. 3 root root 4096 Jun 3 00:29 .. -rw-r-----. 1 root restricteduser 10 Jun 3 00:40 .bash_login -rw-r-----. 1 root restricteduser 10 Jun 3 00:40 .bash_logout -rw-r-----. 1 root restricteduser 10 Jun 3 00:40 .bash_profile -rw-r-----. 1 root restricteduser 35 Jun 3 00:53 .bashrc -rw-r-----. 1 root restricteduser 10 Jun 3 00:40 .profile drwxr-xr-x. 3 root restricteduser 4096 Jun 3 00:42 usr |
Базовое ограничение доступа сделано.
Добавление разрешенных приложений пользователю
Для того чтобы дать разрешение пользователю выполнять приложение достаточно добавить символьный линк (ссылку) на это приложение. Этот линк следует разместить в его каталоге usr/bin.
Например, добавим пользователю restricteduser возможность копировать файлы под своим именем на этот сервер, для этого надо выполнить следующую команду:
1 |
ln -s /usr/bin/scp /home/restricteduser/usr/bin/scp |
Если есть необходимость выполнять команды с привилегиями пользователя root, то для этих целей как нельзя лучше подходит команда sudo. Выполните команду visudo и добавьте пользователя restricteduser и команды, которые разрешено запускать с привилегией root’а. Останется только сделать ссылку на эти команды в каталоге usr/bin.
Удаленный доступ
Для удаленного доступа рекомендую использовать ключи вместо паролей, которые не только упростят и улучшат безопасность доступа к серверу, но также могут ограничить пользователей от потенциально нежелательных действий, таких как запуск команд, открытие и перенаправление портов. Как генерировать ключи для удаленного доступа можно прочитать здесь.
Для того чтобы настроить удаленный доступ без пароля для пользователя restricteduser потребуется сделать три шага.
1. Временно установить для пользователя restricteduser командный интерпретатор bash и выполнить ряд необходимых подготовительных действий:
1 2 3 4 5 |
chsh -s /bin/bash restricteduser cd ~restricteduser mkdir .ssh chown restricteduser.restricteduser .ssh ln -s /bin/cat /home/restricteduser/usr/bin/cat |
2. На удаленном сервере сгенерировать ключи и скопировать публичный ключ на локальный сервер для пользователя restricteduser:
1 2 |
[root@remoteserver ~]$ ssh-keygen [root@remoteserver ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub restricteduser@localserver |
3. Вернуть для пользователя restricteduser ограниченный командный интерпретатор rbash и выполнить ряд необходимых завершающих действий:
1 2 3 |
chsh -s /bin/rbash restricteduser chown -R root.restricteduser .ssh rm -f /home/restricteduser/usr/bin/cat |
Проверяем удаленный доступ:
1 2 3 |
[root@remoteserver ~]$ ssh restricteduser@localserver Last login: Fri Jun 3 16:13:51 2016 from remoteserver -rbash-4.1$ |
Пользователям, которые хотят еще сильнее обезопасить свою систему следует обратить внимание на такие средства, как chroot, SELinux и Apparmor.