Сценарии оболочки — ограниченная оболочка

Опубликовано: 15 Февраля, 2023

Shell — один из самых важных и мощных инструментов, доступных в системах на базе GNU/Linux. При правильном использовании можно управлять всей системой, именно эта особенность делает оболочку обоюдоострым мечом. Потенциально это может нанести вред системе, если кто-то выполняет системную команду, не зная ее основных деталей и последствий. Чтобы предотвратить это, мы используем Restricted Shell .

Ограниченная оболочка — rbash

Ограниченная оболочка обеспечивает дополнительный уровень безопасности и ограничивает некоторые функции оболочки. Ограничение распространяется на команды и сценарии, которые выполняются с помощью оболочки. Можно запустить ограниченный сеанс оболочки с помощью команды rbash или с помощью флага -r, предоставленного во время вызова (возвращает 0 в случае успешного выполнения), это можно использовать для настройки более контролируемой среды, чем стандартная оболочка.

$ rbash

или же

$ bash -r

Наложенные ограничения

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

  • изменение каталогов с помощью компакт-диска
  • установка или отмена значений SHELL, PATH, ENV или BASH_ENV
  • указание имен команд, содержащих /
  • указав имя файла, содержащее / в качестве аргумента для . встроенная команда
  • указание имени файла, содержащего косую черту, в качестве аргумента опции -p встроенной команды hash
  • источник определения/псевдоним функции из среды оболочки при запуске
  • анализ значения SHELLOPTS из среды оболочки при запуске
  • перенаправление вывода с помощью операторов перенаправления >, >|, <>, >&, &> и >>
  • используя встроенную команду exec, чтобы заменить оболочку другой командой
  • добавление или удаление встроенных команд с параметрами -f и -d для включения встроенной команды
  • используя встроенную команду enable, чтобы включить отключенную встроенную оболочку
  • указание опции -p для команды встроенной команды
  • отключение ограниченного режима с помощью set +r или set +o limited.

Давайте проверим несколько ограничений, находясь внутри ограниченной оболочки,

$ cd
$ unset PATH
$ /usr/bin/ping
$ source /home/onworks/.bashrc
$ echo "Hello" > /tmp/hello.txt
$ exec tail -f /var/log/messages
$ enable -d wait

1. Ограничение пользователя

Мы можем запретить пользователю использовать только ограниченную оболочку во время своих сеансов. Давайте создадим нового пользователя с именем «lucy» и установим его оболочку по умолчанию на rbash. Следующие команды можно использовать для создания нового пользователя, установки его пароля и создания его домашней папки.

$ sudo useradd lucy -s /bin/rbash
$ sudo passwd lucy
$ sudo mkdir -p /home/lucy/bin

Мы можем переключить пользователя с помощью команды su

$ su - lucy

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

2. Усиление ограничений

Выполните следующую команду, чтобы открыть файл «bash_profile» в режиме редактирования.

$ sudo gedit /home/lucy/.bash_profile

добавьте следующую строку в файл bash_profile.

PATH=$HOME/bin

Далее мы изменим владельца и права доступа к файлу, чтобы только пользователь root мог редактировать файл.

$ sudo chown root:root /home/lucy/.bash_profile

$ sudo chmod 755 /home/lucy/.bash_profile

$ ls -l /home/lucy/.bash_profile

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

Мы можем связать пользовательские команды из каталога пользователя, чтобы исключить команды с ограниченным доступом. Здесь мы свяжем некоторые команды, чтобы пользователь lucy мог получить доступ к этим командам из среды rbash.

$ sudo ln -s /bin/clear /home/lucy/bin
$ sudo ln -s /bin/neofetch /home/lucy/bin
$ sudo ln -s /bin/ls /home/lucy/bin

Прежде чем связывать команды.

После связывания команд.

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

Пользователь с именем 'debo' уже существует, теперь мы попытаемся ограничить оболочку debo rbash. Для этого можно использовать следующую команду.

sudo usermod -s /bin/rbash <username>
sudo usermod -s /bin/rbash debo

Эта команда изменит оболочку пользователя по умолчанию на rbash. В следующий раз, когда этот пользователь войдет в систему, он по умолчанию будет использовать ограниченную оболочку.

4. Ограничение скриптов

По умолчанию каждый исполняемый сценарий оболочки запускается в неограниченном режиме. Чтобы запустить сценарий в ограниченном режиме, set-r может заставить сценарий использовать ограниченную оболочку во время выполнения. Давайте создадим простой сценарий оболочки.

#FILENAME: gfg.sh

set -r
echo
echo "## In restricted mode! ##"
echo
echo "Current directory: `pwd`"
echo "Changing directory to /home/"
cd /home
echo "Still in directory: `pwd`"

Это заставит скрипт выполняться в ограниченной среде. Запуск приведенного выше скрипта даст следующий результат.

$ . gfg.sh

Преимущества ограниченной оболочки

  • Может ограничить доступ к системе.
  • Используется для создания ограниченной среды, которая более контролируема, чем стандартная оболочка.
  • Обеспечивает безопасность.

Недостатки ограниченной оболочки

  • Опытные пользователи могут легко выйти из ограниченного сеанса оболочки.
  • Это не работает при работе со сценариями оболочки.