Управление клетками FreeBSD

В клетках происходит сложное управление процессами. Если зарегистрироваться на сервере с клетками, можно увидеть все процессы во всех клетках. Какие из них принадлежат самому серверу, а какие – клеткам?

Команда ps -ах, выполненная в «основной» системе, покажет все работающие процессы, даже процессы клеток. Символ J в поле STAT означает, что процесс запущен в клетке. Если на сервере есть несколько клеток, то исходя из предназначения каждой из них, можно догадаться, к какой клетке относится тот или иной процесс. Например, если есть только один сервер имен, и он находится в клетке, можно смело держать пари на принадлежность процесса named(8). Однако в большинстве случаев все не так хорошо, как кажется. И здесь нам на помощь приходят два инструмента: jls(8) и jexec(8).

jls

Программа jls(8) выводит список всех клеток, запущенных в системе.

#     jls

JID IP Address Hostname                           Path

01 ©192.168.1. 4 ©jail.absolutefreebsd.com O/var/jails/jaiH 2 192.168.1.5 jail2.blackhelicopters.org /var/jails/jail2

Каждая клетка имеет уникальный числовой идентификатор (Jail ID), или JID О. Идентификатор JID очень похож на числовой идентификатор процесса, в том смысле, что каждая клетка имеет единственный идентификатор, но его точное значение может изменяться. Если остановить клетку и снова запустить ее, ей будет присвоено другое значение JID. Кроме того, утилита jls(8) выводит IP-адрес ©, имя хоста © и корневой каталог © клетки.

jexec

Утилита jexec(8) позволяет администратору ведущей системы исполнять команды внутри любой запущенной клетки без необходимости входить в нее. Это позволит сохранить у владельцев клеток чувство личного пространства – в конце концов, вам не нужно знать пароли root в клетках и даже не требуется входить в их системы. Но для использования jexec(8) вам необходимо знать значение JID клетки. Чтобы узнать, какие процессы работают внутри клетки, достаточно запустить в ней команду ps -ах. Например, предположим, что наша первая клетка, jail.absolutefreebsd.com, имеет ID со значением 1. Чтобы выполнить команду ps -ах внутри этой клетки, следует запустить такую команду:

#     jexec 1 ps -ах

После этого вы увидите список процессов, запущенных в клетке, как если бы вы вошли в нее.

Утилита jexec(8) позволяет запускать любые команды в клиентской клетке из ведущей системы. Вы можете устанавливать программное обеспечение, перезапускать демоны, останавливать процессы или изменять пароли пользователей.

Процессы и procfs

Помните, как в главе 8 я говорил, что не стоит использовать файловую систему procfs? Сервер клеток – единственное исключение из этого правила. В истории безопасности файловой системы procfs имеется множество темных пятен, но на сервере клеток не должно быть никаких служб и посторонних пользователей. Единственное предназначение файловой системы процессов в данном случае – это идентификация клеток по идентификаторам процессов. Если, например, вы увидели, что некоторое приложение баз данных использует слишком большой объем памяти или процессорного времени, то с помощью

файловой системы /proc вы можете быстро идентифицировать клетку по числовому идентификатору процесса (PID).

Для каждого запущенного процесса в файловой системе /ргос имеется отдельный каталог. Чтобы узнать, в какой клетке исполняется процесс, нужно отыскать каталог процесса по его идентификатору и посмотреть содержимое файла с именем status. Последнее слово в данном файле – это имя хоста клетки, в которую заключен процесс. Если процесс не заключен в клетку, последним словом в файле будет символ дефиса.

Останов клетки

При останове основного хоста также будут остановлены различные клиентские клетки. Останов клетки без останова хоста ненамного сложнее. Чтобы остановить все клетки или какую-нибудь одну клетку, следует запустить команду /etc/rc.d/jail stop. Ниже приводится пример останова клетки j aill:

# /etc/rc.d/jail stop jaill

Эта команда запустит стандартную процедуру останова внутри клетки и выйдет. В результате клетка исчезнет из списка команды jls(8).

Программы shutdown(8) и reboot(8) бесполезны для останова клетки, поскольку их основная обязанность состоит в синхронизации и раз- монтировании дисков, отсоединении от сети и т. д. В виртуальной машине это не требуется.

Что может быть не так с клетками

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

Удобство обслуживания – вот главная причина.

После создания всех этих клеток существенно увеличивается объем работ по обслуживанию одной системы. Например, если у вас имеется два десятка веб-серверов, заключенных в клетки на одной машине, а в Apache обнаружится какая-либо проблема безопасности, вам придется накладывать «заплаты» на два десятка веб-серверов в клетках. При надлежащем уровне планирования, умении писать сценарии и богатой практике это не очень большая проблема, но множество системных администраторов недостаточно сильны в планировании и не обладают богатыми практическими навыками.1 Вы можете так поступить,

Нередко недостаток практических навыков и опыта в планировании мы компенсируем созданием неплохих сценариев.

но вы должны понимать все трудности, с которыми вам придется столкнуться при развертывании скопища клеток.

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

Источник: ЛукасМ. FreeBSD. Подробное руководство, 2-е издание. – Пер. с англ. – СПб.: Символ- Плюс, 2009. – 864 е., ил.

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий