Введение

В компьютерном программировании и компьютерной безопасности разделение привилегий — это один из программных методов реализации принципа наименьших привилегий. При разделении привилегий программа разделяется на части, которым предоставляются только те привилегии, которые необходимы для выполнения конкретной задачи. Это используется для снижения потенциального ущерба от уязвимости в системе безопасности. Распространенный способ реализации разделения привилегий — это разделение компьютерной программы на два процесса. Основная программа отзывает привилегии, а вспомогательная программа сохраняет привилегии для выполнения определенной задачи. Затем эти две части обмениваются данными через пару сокетов. Таким образом, успешная атака на основную программу получит минимальный доступ, даже если обе программы способны выполнять привилегированные операции. Традиционно разделение привилегий достигается путем различения реального идентификатора пользователя/группы и эффективного идентификатора пользователя/группы с использованием системных вызовов `setuid(2)/setgid(2)` и связанных с ними, определенных стандартом POSIX. Неправильная настройка этих вызовов может привести к уязвимостям и широкомасштабному проникновению в сеть. Многие сетевые демоны должны выполнять определенные привилегированные операции, такие как открытие необработанного или интернет-сокета в диапазоне известных портов. Административным утилитам также могут потребоваться определенные привилегии во время выполнения. Такое программное обеспечение обычно отзывает привилегии сразу после выполнения критического участка кода и переключается на непривилегированную учетную запись. Это действие известно как отказ от прав root в Unix-подобных операционных системах. Непривилегированная часть обычно выполняется от имени пользователя "nobody" или эквивалентной отдельной учетной записи. Разделение привилегий также можно реализовать путем разделения функциональности одной программы на несколько меньших программ и назначения расширенных привилегий конкретным частям с использованием разрешений файловой системы. В этом случае различные программы должны взаимодействовать друг с другом через операционную систему, что ограничивает область потенциальных уязвимостей (поскольку сбой в менее привилегированной части не может быть использован для получения привилегий, а лишь для организации атаки типа «отказ в обслуживании»). Разделение привилегий является одной из ключевых особенностей безопасности OpenBSD. Реализация Postfix была сосредоточена на внедрении комплексного разделения привилегий. Еще одним почтовым сервером, разработанным с учетом разделения привилегий и безопасности, является Dovecot. Solaris реализует отдельный набор функций для ограничения привилегий.