четверг, 29 декабря 2011 г.

CentOS, KVM, SElinux.

Для начала небольшое введение. SELinux - Security-Enhanced Linux (Линукс с улучшенной безопасностью) подсистема ядра, предназначенная для повышения защищённости ОС Линукс. Если говорить кратко, то с помощью SElinux Вы имеете возможность добавить дополнительные ограничения, вступающие в действия только если нет обычных ограничений. Простой пример. Есть каталог, пусть /web . Вы можете поставить на него права 777 (то есть все могут туда писать). А потом, с помощью SElinux, запретить одному конкретному пользователю (или группе пользователей) писать в этот каталог. Кстати говоря, наоборот сделать не получиться, т.е. нельзя поставить права 000 и разрешить посредством механизмов SElinux использовать каталог, к примеру, пользователю и/или группе, потому что проверки SElinux выполняются только в случае если получено разрешение механизма DAC (Discretionary Access Control - избирательное управление доступом, привычный механизм управления доступом в linux).

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

понедельник, 26 декабря 2011 г.

KVM и CentOS 6.2. Добавление диска (lvm-раздела) гостевой ОС. Горячее подключение (hot plug).

В прошлой статье мы рассмотрели процесс установки kvm на CentOS 6.2. Установка велась в текстовом режиме, чтобы имея доступ по ssh не городить лишний огород с запуском графической системы и проброской её до компьютера администратора (или подключением по vnc).

Для установки использовался обычный файл хост-системы, который kvm предоставлял гостю как дисковое устройство. Несмотря на то что по умолчанию используется virtio-драйвер (а значит паравиртуализация для устройства), производительность схемы с файлом снижается по сравнению с обычным устройством теоретически хотя бы потому что дублируются функции файловой системы (гость создаёт свою файловую систему, которая работает как бы "поверх" файловой системы хоста). Практика подтверждает потери производительности. А хотелось бы не терять зачастую столь необходимую производительность подсистемы ввода-вывода (вв).

Однако, выход из этой ситуации есть - нужно "пробрасывать" гостю "сырые" дисковые разделы которые есть в хост-системе (разделы, конечно, специально для того созданные). Согласно документации, такая схема позволяет почти полностью избежать потерь производительности связанных с дисковым вв.

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

В данной статье я расскажу как подключить lvm-раздел хост-системы напрямую к гостевой системе (lvm - сокращение от Logical Volume Manager - менеджер логических томов, документация на русском есть тут http://xgu.ru/wiki/Lvm , ну и у вас всегда есть man) . Этот подход позволяет сочетать гибкость, которую предоставляет lvm (например, динамическое изменение размера раздела и мнгновенные снимки, которые на мой взгляд, удобны для резервного копирования) и скорость, которую предоставляет паравиртуализация.

Вся наша работа сводится к 3 шагам:

1) Создание lvm-разделов.

2) Подключение lvm-раздела к виртуальной машине средствами virsh.

3) Работа с новым устройством внутри гостевой ОС. Подключение дополнительного диска без перезагрузки гостевой ОС (горячее подключение, hot plug).

Итак, приступим.

KVM на CentOS 6.2. Установка в текстовом режиме (text mode).

См. так же
Подключение диска (lvm-раздела) к существующей виртуальной машине.

Положим, Вы решили установить KVM (Kernel Virtual Machine - виртуальная машина ядра ОС Линукс) на CentOS 6.2. И Вам почему-то не подходит установка в графическом режиме (если подходит графический режим, вы легко найдёте в поисковике руководство). Не важно почему. Я, например, полагаю автоматизировать установку через kickstart и мне показалось довольно нудным запускать иксы и пробрасывать их через ssh (хотя когда то я уже это делал). Сейчас я не уверен, что автоматизация установки будет требовать текстового режима, но это то что подвигло меня использовать текстовую установку. Я потратил на понимание процесса (не только текстовой установки, но и например работы с сетью) довольно много времени, поэтому хочу записать. Ну и надеюсь, кому-нибудь да пригодится.

В качестве дискового устройства мы будем использовать файл (Вы довольно легко сможете подключить нужное устройство позже, например, чтобы повысить производительность дискового ввода-вывода), и сеть по умолчанию (Вы так же сможете подключить другое сетевое устройство позже, правда, тут есть тонкости. Тем не менее это не слишком сложно тем более что я всё опишу).