Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
В компьютерном программировании и компьютерной безопасности разделение привилегий — это один из программных методов реализации принципа наименьших привилегий. При разделении привилегий программа разделяется на части, которым предоставляются только те привилегии, которые необходимы для выполнения конкретной задачи. Это используется для снижения потенциального ущерба от уязвимости в системе безопасности. Распространенный способ реализации разделения привилегий — это разделение компьютерной программы на два процесса. Основная программа отзывает привилегии, а вспомогательная программа сохраняет привилегии для выполнения определенной задачи. Затем эти две части обмениваются данными через пару сокетов. Таким образом, успешная атака на основную программу получит минимальный доступ, даже если обе программы способны выполнять привилегированные операции. Традиционно разделение привилегий достигается путем различения реального идентификатора пользователя/группы и эффективного идентификатора пользователя/группы с использованием системных вызовов `setuid(2)/setgid(2)` и связанных с ними, определенных стандартом POSIX. Неправильная настройка этих вызовов может привести к уязвимостям и широкомасштабному проникновению в сеть. Многие сетевые демоны должны выполнять определенные привилегированные операции, такие как открытие необработанного или интернет-сокета в диапазоне известных портов. Административным утилитам также могут потребоваться определенные привилегии во время выполнения. Такое программное обеспечение обычно отзывает привилегии сразу после выполнения критического участка кода и переключается на непривилегированную учетную запись. Это действие известно как отказ от прав root в Unix-подобных операционных системах. Непривилегированная часть обычно выполняется от имени пользователя "nobody" или эквивалентной отдельной учетной записи. Разделение привилегий также можно реализовать путем разделения функциональности одной программы на несколько меньших программ и назначения расширенных привилегий конкретным частям с использованием разрешений файловой системы. В этом случае различные программы должны взаимодействовать друг с другом через операционную систему, что ограничивает область потенциальных уязвимостей (поскольку сбой в менее привилегированной части не может быть использован для получения привилегий, а лишь для организации атаки типа «отказ в обслуживании»). Разделение привилегий является одной из ключевых особенностей безопасности OpenBSD. Реализация Postfix была сосредоточена на внедрении комплексного разделения привилегий. Еще одним почтовым сервером, разработанным с учетом разделения привилегий и безопасности, является Dovecot. Solaris реализует отдельный набор функций для ограничения привилегий.
In computer programming and computer security, privilege separation is one software based technique for implementing the principle of least privilege. With privilege separation, a program is divided into parts which are limited to the specific privileges they require in order to perform a specific task. This is used to mitigate the potential damage of a computer security vulnerability. A common method to implement privilege separation is to have a computer program fork into two processes. The main program drops privileges, and the smaller program keeps privileges in order to perform a certain task. The two halves then communicate via a socket pair. Thus, any successful attack against the larger program will gain minimal access, even though the pair of programs will be capable of performing privileged operations. Privilege separation is traditionally accomplished by distinguishing a real user ID/group ID from the effective user ID/group ID, using the setuid(2)/setgid(2) and related system calls, which were specified by POSIX. If these are incorrectly positioned, gaps can allow widespread network penetration. Many network service daemons have to do a specific privileged operation such as open a raw socket or an Internet socket in the well known ports range. Administrative utilities can require particular privileges at run time as well. Such software tends to separate privileges by revoking them completely after the critical section is done, and change the user it runs under to some unprivileged account after so doing. This action is known as dropping root under Unix like operating systems. The unprivileged part is usually run under the "nobody" user or an equivalent separate user account. Privilege separation can also be done by splitting functionality of a single program into multiple smaller programs, and then assigning the extended privileges to particular parts using file system permissions. That way the different programs have to communicate with each other through the operating system, so the scope of the potential vulnerabilities is limited (since a crash in the less privileged part cannot be exploited to gain privileges, merely to cause a denial of service attack). Separation of privileges is one of the major OpenBSD security features. The implementation of Postfix was focused on implementing comprehensive privilege separation. Another email server software designed with privilege separation and security in mind is Dovecot. Solaris implements a separate set of functions for privilege bracketing.