Вопрос или проблема
Существует ли аналог cgroups в Darwin для предотвращения побега процессов из-под контроля / мониторинга родительского процесса с помощью fork()
? Если да, то что это?
Для понимания ситуации, рассмотрим процесс P, его прямого потомка Q и потомков Q, R: cgroups позволяет P контролировать и мониторить Q и R. Если P запускает Q, но Q создает процесс (r в R), без чего-то подобного cgroups, P не может мониторить r.
Примером из реальной жизни было бы, если systemd (P) запускает sshd (Q) от openssh как демон, который затем создает другие экземпляры sshd (R) для обработки каждого открытого сеанса. Без cgroups systemd не сможет взаимодействовать с sshd на сеанс.
(В среде NT cgroups аналогичны объектам задания.)
От чего именно они не должны “убегать”? Вам стоит обратить внимание на chroot
и jails
(Darwin является производной от BSD, так что эта последняя функция BSD может быть доступна). Будьте осторожны, по-настоящему поместить процесс в клетку, из которой он не может выбраться, не так просто.
Ответ или решение
В вопросе рассматривается возможность контроля и мониторинга дочерних процессов в рамках операционной системы Darwin, аналогично работе cgroups в Linux. cgroups (контрольные группы) позволяют ограничивать и управлять ресурсами процессов, предотвращая "побег" дочерних процессов от родительского процесса.
Аналоги cgroups в Darwin
В Darwin (операционная система, лежащая в основе macOS и iOS) концепция, аналогичная cgroups, фактически отсутствует в чистом виде. Однако существует несколько механизмов, которые могут частично выполнять аналогичные функции.
-
Процессные группы (Process Groups):
Процессные группы в Unix-подобных системах позволяют группировать связанные процессы, что может помочь в обработке сигналов. Тем не менее, эта функция не предоставляет механизм управления ресурсами или мониторинга. -
chroot и Jail:
Как было упомянуто, могут быть использованыchroot
и концепция jail (тюремного режима, доступная в BSD), чтобы изолировать процессы. Это ограничивает их видимость файловой системы, но не устраняет возможность создания новых процессов, которые могут "сбежать" из этой изоляции. -
Системы управления ресурсами на уровне приложений:
Хотя не существует прямой реализации cgroups в Darwin, разработчики могут реализовать механизмы ограничений на уровне приложений, используя возможности языка программирования (например, Swift или Objective-C), и API macOS для мониторинга и управления дочерними процессами. -
Механизмы ограничения ресурсов:
macOS предоставляет некоторую работу с ограничением ресурсов черезlaunchd
, который управляет сервисами и может настраивать параметры для ограничений ресурсов, но все ещё не достигает уровня контроля, который предлагается cgroups.
Заключение
Таким образом, в Darwin нет полного аналога cgroups. Тем не менее, механизмы, такие как процессные группы, chroot
и системы управления на уровне приложений, могут обеспечить определённую степень контроля и мониторинга. Это не идеальное решение и не полностью соответствует функциональности cgroups, но предоставляет разработчикам инструменты для управления и мониторинга процессов в рамках возможностей macOS.
Для достижения максимальной безопасности и контроля, необходимо использовать сочетание упомянутых методов вместе с хорошей практикой программирования, чтобы ограничить под процессы только предполагаемыми данными и ресурсами.