Ограничения пользователей в Linux с помощью rbash

Неважно кто вы, разработчик ПО, специалист по данным, менеджер ИТ-инфраструктуры или просто любитель компьютеров  —  вам нужно знать, как пользоваться терминалом в Linux и macOS. Но сложность в том, что необходимо запомнить слишком много команд. И если у вас нет чудо-памяти, время от времени приходится искать в Интернете ту или иную команду.

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

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

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

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

Python

В отличие от Bash, Python является полноценным объектно-ориентированным языком программирования. Он входит в состав большинства распространенных дистрибутивов GNU/Linux, что позволяет использовать его в качестве альтернативной основы для написания скриптов, решающих задачи системного администрирования. Вот лишь несколько причин, по которым выбор нередко падает на Python:

Удобочитаемость и компактность кода Благодаря соблюдению чётких синтаксических правил, скрипт, написанный на Python, будет понятен любому IT-специалисту, знакомому с программированием, даже если он видит этот код впервые. В то же время, при внесении изменений следует обращать внимание на правильную расстановку отступов – в Python они используются в качестве разграничителей блоков кода.

Читайте также:  Основные команды Linux: (почти) полное руководство с примерами

Наличие (даже в стандартной комплектации) большого количества модулей, подключаемых с помощью оператора import Каждый из модулей состоит из набора функций и методов, которые поддерживают основные системные протоколы и форматы и легко используются при написании собственного кода. Таким образом, экономится время, а скрипт будет выглядеть более структурированным. Возможности Python также позволяют написать и подключить собственный модуль, если поставленная задача отличается специфичностью решения;

Кроссплатформенность Скрипты Python работают и в среде Windows, и в MacOS, и в UNIX, включая FreeBSD и GNU/Linux. Этот язык широко используется и на мобильных платформах, таких как Symbian, Android. В этом преимущество Python. Bash такими возможностями не обладает и является «встроенным» инструментарием только для семейств _NIX, _BSD и GNU/Linux. Скрипт, однажды написанный на Python, с большой долей вероятности будет работать на разных платформах, решая схожие задачи, при условии, что код не будет содержать специфических для конкретной операционной системы функций.

Python является подходящим инструментарием для решения следующих задач администрирования: – парсинг лога или конфигурационного файла с использованием регулярных выражений; – разработка приложений, в том числе нестандартных, для работы с базами данных MySQL, Oracle, PostgreSQL, Sybase и др.; – сбор и анализ статистики интернет-трафика с нескольких IP-адресов; – преобразование данных в различные форматы, например, конвертация .ini-файлов в текст при помощи модуля ConfigParser; – работа с файлами сервера при помощи FTP-клиента; – поднятие простого прокси-сервера; – мониторинг работоспособности сервиса, запущенного на сервере, с отправкой предупреждений на e-mail администратора в случае сбоя; – поднятие ppp-соединения с использованием программы автодозвона; – поиск дубликатов с запросом на удаление или перемещение в каталоге с большим количеством файлов; – проверка целостности архивов бэкапа при помощи алгоритма md5; – и т.д.

Читайте также:  Как отключить PUSH-уведомления от мошенников

Переменные и путь

Можно двумя способами определить переменные внутри оболочки: в реальном времени, написав в терминале соответствующую команду, или же определить их в файле .bashrc в домашний каталог, где они будут храниться вечно.

echo «hello» # вывод hello на консоль echo $USER # вывод значение переменной USER на консоль env # вывод список всех переменных окружения set # вывод список всех локальных переменных MY_FRIENDS=William # создать локальную переменную MY_FRIENDS MY_FRIENDS=$MY_FRIENDS:John:Anna # объединение значения ‘John’ и ‘Anna’ в MY_FRIENDS export MY_FRIENDS # сделать локальную переменную MY_FRIENDS переменной окружения unset MY_FRIENDS # удалить переменную MY_FRIENDS

Ещё один интересный инструмент  —  alias (псевдоним), сокращение для длинных команд. Посмотрим, как он строится:

alias clone_my_repo = «git clone » # создать псевдоним

Для тех, кто не знает, путь (Path) – это каталоги, в которых ОС ищет файлы для исполнения. С его помощью можно запустить файл, написав лишь название, даже не нужно знать его расположение. Кроме того, в путь можно добавить папку, а также найти каталог, где находится исполняемый файл, с помощью команд:

export PATH=$PATH:/home/john/myprogram # добавление каталога к пути /home/john/myprogram which nano # отобразить расположение исполняемого файла «nano» whereis nano # отобразить расположение исполняемого файла, справочных страниц, исходного кода и т.д. «nano»

Строка подсказки

При написании интерактивных сценариев bash вы можете использовать команду read для получения пользовательского ввода.

Чтобы указать строку приглашения, используйте параметр -p . Подсказка печатается перед выполнением read и не включает новую строку.

Вот простой пример:

read -r -p «Are you sure?»

Как правило, вы будете использовать для read команды внутри в while цикл , чтобы заставить пользователя дать один из ожидаемых ответов.

Приведенный ниже код предложит пользователю перезагрузить систему :

while true; do read -r -p «Do you wish to reboot the system? (Y/N): « answer case $answer in [Yy]* ) reboot; break;; [Nn]* ) exit;; * ) echo «Please answer Y or N.»;; esac done

Если сценарий оболочки просит пользователей ввести конфиденциальную информацию, например пароль, используйте параметр -s который сообщает read не печатать ввод на терминале:

read -r -s -p «Enter your password: «