Виртуальные серверы OpenVZ
Введение
Система виртуализации, позволяет параллельно запускать
на одном компьютере несколько копий операционной
системы. Использование этой технологии позволяет повысить безопасность
и управляемость системы, так как уязвимости какого-либо сервиса,
выполняющегося в виртуальном контейнере, не могут повлиять на
на другие виртуальные контейнеры. Помимо этого облегчается миграция сервисов
и оптимизация загрузки серверов.
Виртуальным сервером мы будем называть сервис, выполняющийся в виртуальном контейнере.
Вы можете просмотреть список доступных виртуальных серверов,
запустить, остановить или перезапустить выбранные. Для запущенных
виртуальных серверов можно изменить настройки виртуального контейнера (ссылка «Настроить контейнер»)
или настроить сервисы, выполняющиеся внутри контейнера (ссылка «Настроить сервисы»).
Можно также создать новый виртуальный контейнер на основе имеющегося шаблона.
Могут быть изменены основные параметры виртуального сервера:
- Основные сетевые настройки.
- Будет ли виртуальный сервер запущен при запуске основной
операционной системы.
- Пароль пользователя root в виртуальном контейнере.
- Перенаправление локальных служб. В
этом пункте можно настроить сетевой доступ извне к службам,
выполняемым на виртуальном сервере. Управление перенаправлением
возможно только при запущенном виртуальном сервере, причём для того
чтобы увидеть полный список служб, следует дождаться окончания
процесса загрузки виртуального сервера.
- Дополнительные полномочия виртульного сервера (VE capabilites).
- Ограничения системных ресурсов (User beancounters).
- Квоты на дисковые ресурсы внутри контейнера (Disk quota parameters).
- Список устройств основного сервера, доступных внутри контейнера (Device access management).
Настройки ограничений системных ресурсов виртуального сервера
Здесь могут быть изменены ограничения системных ресурсов:
- «kmemsize» — количество памяти,
используемое ядром. Этот параметр связан со значением параметра
«numproc». Каждый процесс потребляет некоторое
количество памяти ядра: 30--50 килобайт, как минимум 16. Важно
иметь достсточно большой зазор между пороговым и максимальным
значениями, чтобы не вынуждать ядро завершать процессы,
выполняющиеся в виртуальном окружении.
- «lockedpages» — количество страниц памяти,
заблокированный при помощи mlock.
- «privvmpages» — количество памяти, размещаемой
процессами. Память, разделяемая между разными процессами не
включается в это количество.
- «shmsize» — количество памяти, доступное для
межпроцессного взаимодействия через разделяемую память. Установка
порогового значения, отличающегося от максимального не имеет
смысла.
- «numproc» — количество процессов и обеспечиваемых
ядром потоков. Установка
порогового значения, отличающегося от максимального не имеет
смысла.
- «physpages» — количество физической памяти,
используемое виртуальным сервером. Используется только для учёта,
пороговое значение должно быть выставленно в 0.
- «vmguarpages» — гарантированный размер доступной
памяти в страницах (4 Кб). Имеет смысл изменение только порогового значения.
- «oomguarpages» — пока использование памяти в
страницах (4 Кб) не превышает заданного порогового значения,
процессы не будут принудительно завершены изза недостка памяти даже
при её реальной нехватке.
- «numtcpsock» — максимальное количество сокетов
протокола TCP. Установка
порогового значения, отличающегося от максимального не имеет
смысла.
- «numflock» — максимальное количество файловых
блокировок. Рекомендуется зазор между пороговым и максимальным
значениями.
- «numpty» — количество псевдотерминалов. Не может
превышать 255. Установка
порогового значения, отличающегося от максимального не имеет
смысла.
- «numsiginfo» — количество структур siginfo. Установка
порогового значения, отличающегося от максимального не имеет
смысла.
- «tcpsndbuf» — максимальный размер буферов для
данных, отправляемый через протокол TCP. Пороговое значение не
должно быть меньше 64 Кб, а разница между ним и максимальным
значением не должна быть меньше чем значение
«numtcpsock», умноженного на 2,5.
- «tcprcvbuf» — максимальный размер буферов для
данных, получаемых через протокол TCP. Пороговое значение не
должно быть меньше 64 Кб, а разница между ним и максимальным
значением не должна быть меньше чем значение
«numtcpsock», умноженного на 2,5.
- «othersockbuf» — максимальный размер прочих (не TCP)
буферов отправки. Увеличение лимита ускоряет связь через локальные
сокеты.
- «dgramrcvbuf» — максимальный размер прочих (не TCP)
буферов получения. Установка
порогового значения, отличающегося от максимального не имеет
смысла.
- «numothersock» — максимальное количество не-TCP
сокетов (локальных, UDP и других). Установка
порогового значения, отличающегося от максимального не имеет
смысла.
- «dcachesize» — максимальный размер кешей файловой
системы (в байтах). Максимальное значение должно быть больше порогового.
- «numfile» — максимальное количество открытых файлов. Установка
порогового значения, отличающегося от максимального не имеет
смысла.
- «numiptent» — максимальное количество записей в
таблицах фильтрации сетевых пакетов (iptables).
Квоты на дисковое пространство внутри контейнера. Используют параметр
«diskspace». Указывается в формате мягкилимит:жёсткий лимит. Один блок считается равным 1 килобайту,
возможно использование суффиксов G и M.
Квоты на количество индексных узлов (i-nodes) внутри
контейнера. Используют параметр «diskinodes».
Указывается в формате мягкий лимит:жёсткий лимит.
Список устройств основного сервера, доступных виртуальному
через параметр «devnodes». Устройства
указываются в формате device:r|w|rw|none, например
sda:r.
Полномочия контейнера OpenVZ
Стандартная реализация проверки прав доступа в Unix разделяет процессы на 2 категории:
привилегированные процессы (у которых действующий идентфикатор пользователя равен 0,
обычно это суперпользователь или root), и непривилегированные (действующие идетификаторы
не равны 0). На привилегированные процессы не действуют проверки безопасности ядра, в отличие
от непревилигированных, для которых выполняются стандартные проверки прав доступа (обычно это
проверки действующего идентфикатора пользователя/группы и списка дополнительных групп).
Начиная с версии 2.2, ядро Linux предоставляет систему полномочий (все еще не полную),
которая позволяет представить стандартные привилегии суперпользователя в виде набора индивидуальных
частей, каждая из которых может включена или отключена независимо друг от друга.
Каждый виртуальный контейнер по-умолчанию обладает набором полномочий (см. capabilites(7)),
достаточных для работы большинства сервисов. Этот набор позволяет глобально (на уровне контейнера)
ограничить список доступных привилегий для процессов внутри контейнера. Если вам необходимо
расширить этот список, то вы можете воспользоваться интерфейсом управления пролномочиями
контейнера OpenVZ.