Понимание полномочий
Важным аспектом безопасности на компьютерной системе является предоставление или отклонение полномочий (иногда называемый правами доступа). Разрешение является возможностью выполнить определенную работу, например, получить доступ к данным или выполнить код. Разрешения могут быть даны на уровне каталогов, подкаталогов, файлов или приложений, или определенных данных в файлах или функций в приложениях.
Полномочиями в OS X управляют на многих уровнях, от компонентов Маха и BSD ядра, через более высокие уровни операционной системы и, для сетевых приложений, через сетевые протоколы.
В этой главе описываются базовые политики полномочий на различных уровнях в OS X.
Права порта Маха
На самом глубоком уровне архитектуры системы OS X основание для встроенных средств защиты операционной системы предоставлено компонентами Маха и BSD ядра. Этот раздел обеспечивает только очень краткое и поверхностное введение в Маха. Для получения дополнительной информации о Махе в OS X и Махе, программирующем, см. Руководство по программированию Ядра.
Безопасность Маха основывается на портах и правах порта. Порт Маха является конечной точкой канала передачи между клиентом, запрашивающим службу и сервер, предоставляющий услугу. Порты Маха однонаправлены; ответ на запрос на обслуживание должен использовать второй порт.
Порт имеет ряд связанных прав порта, принадлежащих задачам. Право порта указывает, что определенная задача может использовать тот порт. Каждый порт имеет, каждый получает право, владелец которого может получить сообщения на том порту. Каждый порт имеет один, или больше отправляет права; владельцы отправляют, права могут отправить сообщения в порт. Права могут быть переданы между задачами путем присоединения их к сообщению Маха.
Единственная задача (или другой объект Маха, такой как поток или сам узел) может иметь многократные порты, обеспечивающие доступ к ресурсам, которые это поддерживает. Например, задача могла бы иметь порт имени и порт управления. Доступ к порту управления позволяет задаче управляться. Напротив, доступ к порту имени просто позволяет клиенту получать информацию о задаче или выполнять другие непривилегированные операции на нем.
Каждый процесс имеет пространство имен права порта, отображающее маленькие целые числа, известные как имена права порта к их соответствующим правам порта. Имя права порта значимо только в пространстве имен права порта той задачи. Задача может передать право порта к другой задаче путем отправки ему соответствующего имени права порта. Однако, если это не отправляет имя правильно, задача получения не будет в состоянии, используют право. Единственный способ передать порт прямо между двумя задачами путем отправки сообщения Маха и присоединения правильного имени к тому сообщению с помощью правильного синтаксиса и структуры сообщения.
Когда Вы используете Маха для создания задачи, Мах возвращается, право порта называют, это ссылается на отправить право для порта (получить право для порта задачи всегда принадлежит ядру). Можно отправить сообщения в этот порт, чтобы запустить и остановить задачу, уничтожить задачу, управлять адресным пространством задачи, и т.д. Поэтому, кому бы ни принадлежит отправить право для порта задачи, эффективно владеет задачей и может управлять состоянием задачи вне зависимости от политики безопасности BSD или любой высокоуровневой политики безопасности. Другими словами, эксперт в Махе, программирующем с доступом локального администратора к машине OS X, может обойти BSD и высокоуровневые средства защиты. Поэтому очень важно использовать сильные пароли администратора, сохранить их безопасными, и управлять физической безопасностью для любого компьютера, содержащего уязвимую информацию.
Политика безопасности BSD
Часть BSD ядра OS X осуществляет доступ к приложениям и файлам. Самым знакомым аспектом безопасности BSD является политика защиты файловой системы, управляющая доступом к файлам и каталогам. Полномочия файла BSD описаны в Политике Защиты файловой системы и более подробно в Обзоре Файловой системы.
В дополнение к политике защиты файловой системы BSD определяет две другой политики безопасности, используемую в особых случаях: владелец или корневая политика безопасности и корневая политика безопасности EUID. Каждая из этих политик описана кратко в следующих подразделах.
Модель обеспечения безопасности BSD основывается на совпадении атрибутов объекта файловой системы (файл или каталог) с атрибутами процесса, пытающегося получить доступ к тому объекту. Например, предположите, что файл имеет идентификатор пользователя владения 1234, и полномочия файла указывают, что у пользователя владения есть доступ для чтения и доступ для записи к тому файлу. Предположим далее, что у Элис есть эффективный идентификатор пользователя (EUID) 1234. Когда Элис пытается считать файл, BSD соответствует ее EUID владению файла UID и предоставляет доступ Элис для чтения файла.
Каждый процесс имеет три идентификаторов пользователей: реальный пользователь ID (RUID), эффективный идентификатор пользователя (EUID) и сохраненный пользователь ID (SUID). RUID всегда наследован от пользователя, или обработайте, который выполняет процесс. EUID обычно является тем же как RUID, но это может отличаться по особым обстоятельствам, как описано в Политике безопасности Владельца-или-корня ниже. В большинстве случаев это - EUID что проверки BSD для определения полномочий. SUID используется BSD, чтобы позволить привилегированному процессу переключиться в и из привилегированного режима.
Каждый процесс также имеет реальную и спасенную группу IDs (RGID и SGID) и до 16 эффективных групп IDs (EGIDs), работающие в пути, аналогичном идентификаторам пользователей процесса.
Для получения дополнительной информации на этих UIDs и GIDs, посмотрите Разработку и реализацию 4,4 Операционных систем BSD Маршаллом Кирком Маккузиком и другими.)
Запускаясь в OS X v10.5, ядро включает реализацию платформы Мандатного управления доступом (MAC) TrustedBSD. Язык формальных требований, подходящий для стороннего использования разработчика, был добавлен в OS X v10.7. Мандатное управление доступом, также известное как игра в песочнице, обсуждено в Игре в песочнице и Платформе Мандатного управления доступом.
Политика защиты файловой системы
OS X поддерживает обоих, которых типичный пользователь UNIX «модели полномочий группирует другой» (дополненный флагами файла BSD) и списки управления доступом POSIX (ACLs).
В группе пользователей «модели разрешения другой», права доступа к файлу зависят от эффективного идентификатора пользователя (EUID) и эффективной группы ID (EGID) обработки вызовов следующим образом:
Если песочница приложения запрещает запрошенный доступ, запрос отклонен.
Если проверка владения была отключена для рассматриваемого объема системным администратором (с флажком в его окне Finder Get Info), запрос предоставляют.
Если элемент списка управления доступом существует на файле, он оценивается и используется для определения прав доступа.
Если флаг файла BSD запрещает работу, работа отклонена.
Иначе, если идентификатор пользователя соответствует владельцу файла, «пользовательские» полномочия (также названный полномочиями «владельца») используются.
. иначе, если группа, которую ID соответствует группе для файла, полномочия «группы» используется,
Иначе, «другие» полномочия используются.
Для получения дополнительной информации считайте Защиту файловой системы OS X в Руководстве по программированию Файловой системы.
Политика безопасности владельца-или-корня
Политика безопасности владельца-или-корня используется для управления выполнением нескольких определенных операций. Под этой политикой определенная работа на объекте может быть выполнена любым процессом, EUID которого совпадает с владельцем объекта или чей EUID является нулем (0). Пользователя с UID нуля вызывают пользователем root (также названный суперпользователем), и процесс, работающий с EUID нуля, как говорят, работает какroot
.
Эта политика используется в трех основных местах:
Изменение полномочий на файлах с
chmod
системный вызов.Только владелец файла или процесса, работающего как
root
может изменить полномочия файла.Удаление или переименование файлов в каталоге, липкий бит которого установлен.
Только владелец файла, владелец каталога включения, и
root
может удалить или переименовать файл.Отправка сигналов к выполнению процессов (включая уничтожение процесса).
Процесс может только отправить сигнал в другой процесс, если их EUIDs соответствуют или если процесс отправки имеет EUID 0.
Корневая политика безопасности EUID
Под корневой политикой безопасности EUID работа может быть выполнена только процессом с EUID 0. Такие операции иногда упоминаются как привилегированные операции. Некоторые общие ситуации, где корневая политика безопасности EUID применяется:
Изменение владельца объекта файловой системы
Обязательный TCP/IP снабжает сокетом к портам с низким номером
Внесение изменений в конфигурацию сети
Определенные операции I/O Kit
Получение узла Маха дало специальному порту полномочия
Службы авторизации и политика безопасности BSD
Поскольку процесс, работающий с EUID 0, имеет много специальных полномочий, такой процесс может быть целью злонамеренных хакеров. Для минимизации таких рисков Вы должны фактор Ваше приложение в привилегированные и непривилегированные процессы. Посмотрите Используя Авторизацию для получения дополнительной информации и для ссылок, описывающих и иллюстрирующих этот метод.
Процессы могут изменить свой EUID и EGID путем вызова setuid
, setgid
, и связанные системные вызовы. Например, процесс может работать как корень временно и затем переключиться на менее привилегированный EUID для минимизации воздействия вредоносным атакам. Этот метод осложнен запутывающей семантикой setuid
вызовите и фактом, что эти вызовы воздействуют несколько по-другому на различные реализации UNIX (включая различные версии OS X). Для детального обсуждения включенных проблем см. Setuid, Демистифицированный Ченом, Вагнером и Дином в Продолжениях 11-го Симпозиума Безопасности USENIX, 2002, доступный в веб-сайте USENIX. Для получения дополнительной информации о системных вызовах см. страницы справочника для setuid
, setreuid
, и setregid
. setuid
страница справочника включает информацию о seteuid
, setgid
, и setegid
также.
Игра в песочнице и платформа мандатного управления доступом
Игра в песочнице обеспечивает тонкозернистое управление возможностью процессов получить доступ к системным ресурсам. Например, можно препятствовать тому, чтобы процесс соединился с любой сетью от записи любых файлов, или от записи любых файлов за пределами определенных каталогов. Эта функция ограничивает сумму ущерба, который может быть нанесен злонамеренным хакером, получающим контроль над приложением.
Под капотом, играя в песочнице поддержку предоставлен платформой Мандатного управления доступом (MAC) OS X, которая является реализацией платформы TrustedBSD MAC.