Изоляция пользователей хостинга с помощью ОС МСВСфера 9 (Алексей Бережок, OSDAY-2025)
Материал из 0x1.tv
- Докладчик
- Алексей Бережок
Проблемы шаред-хостинга:
- Один пользователь может монополизировать CPU неоптимизированными PHP-скриптами
- Чрезмерное потребление дискового пространства и памяти
- Многочисленные cron-задачи нарушают баланс ресурсов
- Риск распространения последствий взлома между пользователями
- Уязвимости в настройках доступа приводят к утечкам информации
- Fork-бомбы и другие атаки на стабильность
Недостатки существующих решений:
- Виртуальные серверы (KVM): требуют полной реорганизации инфраструктуры, исключают использование стандартных панелей управления
- Docker-контейнеры: вызывают перерасход диска и памяти, нуждаются в реорганизации сервера
- Ручное администрирование: высокий риск дорогостоящих ошибок в настройках
Решение «LS и LimitedFS»:
- Сервис лимитирования LS: ограничивает CPU, память, SWAP и процессы через cgroups
- Сервис изоляции файловой системы LimitedFS: использует pivot_root для создания персональных "скелетов" ФС в режиме RO
- Минимальные изменения в ПО: доработаны Apache, PAM, PHP-FPM и другие компоненты
- Механизм "погружения" процессов через API в изолированную среду
Содержание
Видео
Thesis
Обсуждаемая тема касается именно функционирование хостинг-сервера. Что такое хостинг-сервер — это тысячи сайтов, принадлежащих разным пользователям. Каждый пользователь управляет своим сайтом или десятком сайтов. Пользователь не знает как работает сервер, но хочет чтоб его сайт, написанный на PHP или Django, работал корректно и без сбоев и задержек.
И очень часто своими не оптимизированными скриптами пользователи создают проблемы или другим пользователям или администратору сервера. Классический сервер представлен фаерволом, веб-сервером, обработчиком динамического скрипта (PHP, Ruby, Python), базой данных, предоставляет доступ по ssh или ftp к данным пользователя. И наиболее часто клиенты хостинга создают следующие проблемы:
- т.к. у пользователя не один сайт, а группа сайтов, то многократно возрастает нагрузка на CPU, и выходит, что один активный пользователь потребляет все доступные ядра процессора не оптимизированными PHP скриптами, не давая менее активным шанса получить процессор.
- пользователь размещая свои данные потребляет большое количество дискового пространства, ущемляя других пользователей.
- у пользователя большое число cron задач, которые потребляют процессорное время и память. Опять баланс потребления серверных ресурсов на стороне более активного пользователя
- взломанный один пользователь, при недостаточно настроенной защите на хостинге, может привести к проблемам у других пользователей.
- некорректная настройка доступа на серверном ПО, позволяет злоумышленнику, используя недостаточно защищенные скрипты владельцев сайтов, получить информацию о сервере, набор установленных программ, список пользователей сервера, список сайтов.
- fork-бомбы.
Традиционные решения
Как можно решить данные и другие сопутствующие проблемы? Каждого пользователя с его набором сайтов можно разместить, каждый на своем виртуальном сервере с помощью технологии KVM. Данное решение дает максимальную изоляцию пользователей, но влечет за собой просто тектонические изменения в структуре хостинг сервера, невозможность использовать стандартные контрольные панели, для управления сервером, требует квалифицированных пользователей, которые бы самостоятельно настраивали свой виртуальны сервер.
Следующее решение — это использовать docker контейнеры, что дает меньше overhead, есть готовые решения в виде той же самой OpenPanel, которая позволит выделить каждому пользователю собственный контейнер с собственным набором программ, но это так же влечет реорганизацию хостинг сервера и перерасход по дисковому пространству и памяти.
Еще одно решение — это грамотный администратор или контрольная панель, которая учитывает специфику хостинга и закрывает все возможные недочеты, но это так же непросто, т. к. ошибки контрольной панели или администратора будут дорого стоить.
Решение: LS и LimitedFS в ОС МСВСфера 9
В ОС МСВСфера 9 для хостинга внедрены сервис лимитирования LS и сервис изоляции файловой системы LimitedFS. Данные сервисы вносят минимальные изменения в структуру существующего серверного ПО.
Сервисы позволяют установить лимиты для CPU, памяти, SWAP-памяти, числа процессов для каждого пользователя. а так же изолировать пользователя с помощью pivot_root, в его «собственной», настроенной для пользователя файловой системе. Такой изолированный и лимитированный пользователь не потребляет больше CPU чем ему позволено, то же относится к оперативной памяти и числу процессов. Лимитирование использует встроенный в Linux механизм cgroups.
Чтоб популярное серверное ПО работало с лимитированием и изоляцией были доработаны либо серверные компоненты, либо отдельные модули (например Apache, PAM модуль, mod_fegid, httpd-itk, PHP-FPM и т.д.), с помощью которых происходит «погружение» процесса в лимитированную и изолированную среду с помощь API.
Процесс погружения в LS можно увидеть на слайде 13 (где klsd – это сервис лимитирования, помещающий процесс в LS контейнер):
Изоляция же файловой системы представляет собой подготовленный «скелет» файловой системы с примонтированными и подготовленными заранее каталогами, специфичными для каждого пользователя. При запросе изоляции процессом, у него меняется корень файловой системы на этот настроенный «скелет». Пользователь видит только свои специфичные данные, настроенные администратором и файловую систему по большей степени работающую в RO-режиме.
Преимущества и недостатки
Чем же данный подход удобнее для хостинг провайдеров, чем описанные ранее: виртуальный сервер, docker контейнера, вообще система без изоляции, где все сделано только силами контрольной панели или администратора?
Главные плюсы:
- это легкость интеграции с существующим хостингом, с контрольными панелями. минимальные усилия по переходу на использование изоляции от MCBCфера
- легкость настройки, в основном все минимально необходимые конфигурации уже включены в установку по умолчанию.
- минимальный overhead
- потребление памяти аналогично, как если используется только Apache/nginx и PHP
- простота интеграции с сервисами поддерживающими PAM.
Но имеются так же и минусы:
- изоляция менее надежная чем docker и виртуальный сервер
- не все сервисы могут быть таким образом изолированы
- сильная связь с реальной системой, например нельзя скрыть от пользователя число ядер или название процессора.
Презентация
Примечания и ссылки
