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

 

Одно из удобств, предоставляемых Unix-системами, состоит в возможности использования ресурсов компьютера практически из любой точки земного шара, где есть выход в интернет. Но такая возможность позволяет злоумышленнику, воспользовавшись ошибкой в программном обеспечении, получить доступ к некоторым ресурсам компьютера и "погулять" по дереву каталогов.

 

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

 

Выход из этой ситуации такой. Необходимо создать своего рода "песочницу" (Sandbox), в которой злоумышленник будет "копаться", считая, что взломал всю систему. Самым распространенным способом достичь такого результата является построение имитирующего окружения в каталоге и затем запуск процессов и этом каталоге через chroot (т.е. задав этот каталог в качестве / для этого процесса, а не реальный / всей системы).

 

Описание этой процедуры для систем *BSD можно встретить в любой книге (в OpenBSD Apache вообще запускается через chroot по умолчанию). А вот когда я столкнулся с такой проблемой в Linux, то с удивлением обнаружил, что ни в одной из имеющихся у меня книг нет даже упоминания об этом.

 

Расскажу о том, как настроить среду chroot с помощью проекта Jail. Одна из неудобств в создании среды chroot заключается в трудностях, возникающих при установке необходимых для работы библиотек и файлов вручную. С помощью jail можно избежать большинства проблем и избавиться от кучи работы: jail автоматически создаст нужные каталоги, поместит в рабочее пространство необходимые файлы и библиотеки.

 

Эта программа написана на языке С и использует в своей работе сценарии на Perl. Работает на компьютерах под управлением Linux, Solaris (2.6), IRIX (6.5) и FreeBSD. Модульность программы позволяет без проблем переносить ее на другие платформы. Jail поддерживает несколько пользователей в одном окружении chroot, что позволяет создавать в нем, например, домашние каталоги, к которым пользователи будут подключаться с удаленных машин. Jail поддерживает большинство используемых серверов (telnetd, sshd, ftpd и т.д.).

 

Основная идея

 

Jail запускается, как оболочка к shell, когда пользователь регистрируется в системе, в том числе и для серверов sshd, telnetd, ftpd и т.д. (сервер, в конце концов, - это тоже пользователь). После инициализации jail и установки среды chroot запускается уже реальный shell, с помощью которого пользователь и работает в дальнейшем.

 

Среда сhroot является поддеревом полного дерева файловой системы, но вершина этого поддерева просматривается пользователем как корень /. Поэтому с помощью jail удобно отделять пользователей от главного каталога файловой системы.

 

Но поскольку теперь все необходимые утилиты остались вне досягаемости, необходимо создать зеркало основной файловой системы, естественно, положив туда только самое необходимое.

 

Установка

 

Дистрибутив jail находится на домашней странице проекта (www.gsyc.inf.uc3m.es/~assman/). После распаковки tar -zxvf jail_1.9.tar.gz образуется каталог jail_1-9_stable. Теперь следует зайти в подкаталог src и отредактировать файл Makefile в соответствии с настройками системы. В нем нужно убрать комментарии в строках, где указана используемая ОС (по умолчанию это Linux), путь к интерпретатору Perl и каталог, куда будет установлена программа (по умолчанию /usr/local).

 

Затем идут стандартные make и make install. После этого все готово для создания среды chroot.

 

Создание среды jail

 

Следующим шагом является выбор каталога, который будет корневым для запускаемого сервиса (пользователя). Для примера создадим каталог /home/jail, который будет использоваться в качестве среды chroot:

 

# mkdir /home/jail
# /usr/local/bin/mkjailenv /home/jail
 

После ввода команды должен появиться текст, подобный следующему:

 

mkjailenv
A component of Jail (version 1.9 for linux)
http://www.gsyc.inf.uc3m.es/~assman/jail/
Juan M. Casillas <assman@gsyc.inf.uc3m.es>

Making chrooted environment into /home/jail
Doing preinstall ()
Doing special_devices ()
Doing gen_template_password ()
Doing postinstall ()
Done.
 

Если это так, то среда chroot готова к использованию. Теперь нужно установить программное обеспечение, чтобы пользователь смог работать в этой среде. Для этого применяется утилита adjailsw, входящая в комплект jail. Она имеет два основных режима работы. При запуске без аргументов она установит стандартный комплект ПО:

 

[root@grinder src]# /usr/local/bin/addjailsw /home/jail

addjailsw
A component of Jail (version 1.9 for linux)
http://www.gsyc.inf.uc3m.es/~assman/jail/
Juan M. Casillas <assman@gsyc.inf.uc3m.es>

Guessing head args ()
Guessing cat args ()
Guessing pwd args ()
Guessing ln args ()
Guessing mkdir args ()
Guessing rmdir args ()
Guessing ls args ()
Guessing sh args ()
Guessing mv args ()
Guessing rm args ()
Guessing more args ()
Guessing grep args ()
Guessing vi args (-c q)
Guessing id args ()
Guessing cp args ()
Guessing tail args ()
Guessing touch args ()
Warning: not allowed to overwrite /home/jail/etc/passwd
Warning: not allowed to overwrite /home/jail/etc/group
Warning: can't create /proc/meminfo from the /proc filesystem

Done.
 

Как видим, в указанный каталог копируются основные команды, необходимые пользователю - ln, ls, mv, grep, cp, tail, touch, more и др. Если устанавливать весь этот набор не требуется или, наоборот, его недостаточно, то с помощью опции -Р можно шаг за шагом определить, какие программы будут установлены. Например, с помощью следующей команды будет установлен текстовый редактор nano:

 

#/usr/local/bin/addjailsw /home/jail -P nano
 

В одной команде можно указать через пробел сразу несколько команд для установки. Вот на этом этапе и проявляется одно из преимуществ jail. При добавлении новых приложений с помощью обычной команды chroot пришлось бы самому отслеживать все зависимости и вручную устанавливать необходимые библиотеки, рискуя ошибиться или установить что-нибудь лишнее. Jail не только запускает указанную программу, но и отслеживает все ее вызовы. Затем все файлы, к которым обращалась программа, копируются, а если они уже имеются, то к ним добавляются необходимые данные. В этом еще одна прелесть jail: если для работы программы необходим пользователь в файле /etc/passwd, то она не будет копировать его полностью, а возьмет только то, что действительно необходимо.

 

Для примера приведу часть сообщений, выводимых при установке редактора kate, полностью занимающего три экрана:

 

Guessing kate args (0)
Warning: file /home/jail/usr/lib/kate-gcc2.96.so exists. Overwritting it
Warning: file /home/jail/usr/lib/libkateinterfaces-gcc2.96.so exists. Overwritting it
Warning: file /home/jail/usr/lib/libkatepartinterfaces-gcc2.96.so exists. Overwritting
...
Warning: file /home/jail/etc/ld.so.cache exists. Overwritting it
Warning: file /home/jail/usr/X11R6/lib/X11/XftConfig exists. Overwritting it
Warning: file /home/jail/root/.xftcache exists. Overwritting it
Warning: file /home/jail/usr/X11R6/lib/X11/fonts/Type1 exists. Overwritting it
Warning: file /home/jail/usr/X11R6/lib/X11/fonts/TTF exists. Overwritting it
Warning: file /home/jail/usr/share/fonts/default/TrueType/XftCache exists. Overwritting it
Warning: file /home/jail/usr/share/fonts/default/Type1 exists. Overwritting it
...
Warning: file /home/jail/usr/share/apps/kate/plugins/kateinsertcommand.desktop exists.
Overwritting it
Warning: file /home/jail/usr/share/apps/kate/plugins/kateopenheader.desktop exists.
Overwritting it
Warning: file /home/jail/usr/share/apps/kate/plugins/kateprojectmanager.desktop exists.
Overwritting it


и т.д.
 


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

 

Установив необходимые программы, переходим к созданию учетных записей пользователей. Сначала создаем обычный пользовательский аккаунт с помощью программы adduser, указывая необходимые переменные, а затем изменяем файл /etc/passwd в соответствии с нашими задачами. При этом начальный пользовательский каталог назначается в среде chroot (в нашем случае /home/jail), а последняя строка записи пользователя, указывающая на оболочку пользователя, определяется как usr/local/bin/jail. Учетная запись в файле /etc/passwd должна содержать примерно такую строку:

 

Username:x:501:501:Jail User:/home/jail:/usr/local/bin/jail
 

Определив пользователя в основном файле /etc/passwd, необходимо его добавить к среде chroot. Утилита, применяемая для этих целей, называется addjailuser, и имеет очень простой синтаксис. При добавлении пользователя нужно задать четыре переменные в следующем формате:

 

аddjailuser chrootdir userdir usershell имя_пользователя
 

Переменная chrootdir содержит путь к созданной среде jail. В нашем случае это /home/jail. Как видим, это позволяет создавать многопользовательскую среду.

 

Следующая переменная, userdir, определяет каталог в jail, который будет домашним (начальным) каталогом пользователя. С единственной разницей: "нормальные" учетные записи будут существовать в абсолютном пути /home, а пользователи chroot - в абсолютном пути /home/jail/home. Но и те, и другие будут видеть, по существу, такие же пути, что и обычные пользователи.

 

Переменная Usershell указывает на путь к пользовательской оболочке внутри jail, которую перед ее заданием, естественно, необходимо установить.

 

Например, чтобы добавить пользователя sergej, используя эти переменные, нужно выполнить такую команду:

 

addjailuser /home/jail /home/sergej /bin/bash sergej
 

Эта команда создаст необходимый пользовательский вход в passwd-файле chroot, а также домашний каталог пользователя (/home/jail/home/sergej). Если вы в чем-то ошибетесь, вернуться к предыдущему состоянию довольно просто.


***

 

Как видим, с помощью jail можно быстро и легко создать среду chroot. А ведь прежде это была трудоемкая задача системного администрирования, отнимающая много времени и сил.

2004.05.19
19.03.2009
В IV квартале 2008 г. украинский рынок серверов по сравнению с аналогичным периодом прошлого года сократился в денежном выражении на 34% – до $30 млн (в ценах для конечных пользователей), а за весь календарный год – более чем на 5%, до 132 млн долл.


12.03.2009
4 марта в Киеве компания Telco провела конференцию "Инновационные телекоммуникации", посвященную новым эффективным телекоммуникационным технологиям для решения задач современного бизнеса.


05.03.2009
25 февраля в Киеве компания IBM, при информационной поддержке "1С" и Canonical, провела конференцию "Как сохранить деньги в условиях кризиса?"


26.02.2009
18-19 февраля в Киеве прошел юбилейный съезд ИТ-директоров Украины. Участниками данного мероприятия стали ИТ-директора, ИТ-менеджеры, поставщики ИТ-решений из Киева, Николаева, Днепропетровска, Чернигова и других городов Украины...


19.02.2009
10 февраля в Киеве состоялась пресс-конференция, посвященная итогам деятельности компании "DiaWest – Комп’ютерний світ" в 2008 году.


12.02.2009
С 5 февраля 2009 г. в Киеве начали работу учебные курсы по использованию услуг "электронного предприятия/ учреждения" на базе сети информационно-маркетинговых центров (ИМЦ).


04.02.2009
29 января 2009 года в редакции еженедельника "Computer World/Украина" состоялось награждение победителей акции "Оформи подписку – получи приз!".


29.01.2009
22 января в Киеве компания "МУК" и представительство компании Cisco в Украине провели семинар для партнеров "Обзор продуктов и решений Cisco Small Business"

 

 
 
Copyright © 1997-2008 ИД "Комиздат".