Maran

Начало работы

Введение

Что такое Maran, из каких трёх процессов состоит сервер и что корневой демон делать не станет — включая то, почему он не принимает shell-команд.

Maran — панель управления веб-хостингом для серверов Linux. Установите её на сервер и управляйте сайтами, версиями PHP, SSL-сертификатами, базами данных, файлами, резервными копиями и брандмауэром из браузера, с отдельным кабинетом для каждого клиента хостинга и API, которым биллинговая система создаёт аккаунты сама.

Три процесса, и root есть только у одного

На сервере с Maran работают ровно три процесса, и разделение между ними — главное решение продукта:

  • maran-api — сама панель. В ней вся бизнес-логика, и только она обращается к базе данных. Работает от непривилегированного системного пользователя.
  • maran-agent — единственный процесс с root. Он не хранит состояние, у него нет базы и своих конфигурационных файлов, и только он трогает веб-сервер, php-fpm, сервер баз данных, SSH и передачу файлов, планировщик, брандмауэр и сертификаты.
  • PostgreSQL — доступен только из maran-api, через unix-сокет, вообще без TCP-порта.

Панель просит у агента именованные операции через unix-сокет, с типизированными и проверенными аргументами. Нет операции, которая запускает переданную вызывающей стороной программу, и между ними нигде нет shell-строки: множество того, что можно заставить сделать корневой процесс, конечно, записано и поддаётся ревью.

Что такое аккаунт хостинга

Настоящий пользователь Linux со своим домашним каталогом и правами файловой системы. Его PHP работает в собственном пуле под собственным uid, и файловые операции идут от этого же uid — никогда от root. Каждая таблица, принадлежащая арендатору, ограничена аккаунтом на уровне базы, а запрос чужого ресурса отвечает 404, а не 403 — ошибка никогда не подтверждает, что строка существует.

Ни брокеров, ни сайдкаров

Фоновая работа идёт по надёжным очередям, хранящимся в PostgreSQL. Установка Maran не добавляет на сервер ни брокера сообщений, ни сайдкар, ни второй демон.