Назад | Перейти на главную страницу

Что на самом деле делают механизмы авторизации OS X?

Задний план

Я пытаюсь лучше понять процесс входа в OS X, чтобы решить, как лучше всего достичь Единый вход VPN.

Пожалуйста, поправьте меня, если я ошибаюсь, но я считаю, что ...

  1. launchd(8) звонки gettyent(3) и таким образом определяет из ttys(5) выполнить loginwindow.app для /dev/console.

  2. loginwindow.app попытки приобрести system.login.console право авторизации, для которого база данных авторизации определяет следующие механизмы (перечисленные вместе с моим пониманием их функции); те, которые имеют привилегии, работают в authd процесс (как root), в то время как те, которые не имеют привилегий, запускаются в SecurityAgent процесс (как _securityagent):

    • builtin:policy-banner (отображает Баннер окна входа в систему, если установлено).
    • loginwindow:login (запрашивает учетные данные).
    • builtin:login-begin
    • builtin:reset-password,privileged (выполняет сброс пароля с помощью Apple ID).
    • builtin:forward-login,privileged (пересылает учетные данные из EFI при загрузке).
    • builtin:auto-login,privileged (применяет учетные данные для автоматического входа при загрузке).
    • builtin:authenticate,privileged (вызывает pam_authenticate(3) для authorization служба; устанавливает значение контекста "uid").
    • PKINITMechanism:auth,privileged (инициализирует Kerberos, получая TGT).
    • builtin:login-success
    • loginwindow:success (защищает сеанс входа в систему от несанкционированного удаленного доступа; записывает вход в систему в системных базах данных utmp и utmpx; устанавливает владельца и разрешения для консольного терминала).
    • HomeDirMechanism:login,privileged (монтирует домашний каталог пользователя).
    • HomeDirMechanism:status (отображает процесс монтирования домашнего каталога).
    • MCXMechanism:login (применяет профили конфигурации).
    • loginwindow:done (сбрасывает настройки пользователя, чтобы включить глобальные системные настройки по умолчанию; настраивает мышь, клавиатуру и системный звук, используя предпочтения пользователя; устанавливает права группы пользователя; извлекает запись пользователя из служб каталогов и применяет эту информацию к сеансу; загружает компьютерные данные пользователя среда - включая предпочтения, переменные среды, разрешения для устройств и файлов, доступ к связке ключей и т. д.; запускает Dock, Finder и SystemUIServer; запускает элементы входа для пользователя).

Вопросы

Хочу подтвердить свое понимание функции каждого механизма:

  1. Доступен ли их исходный код открыто? Я знаю, что не-builtin механизмы определяются плагинами, которые можно найти в /System/Library/CoreServices/SecurityAgentPlugins, но я не могу найти источник, из которого они были построены. Я также не могу найти, где builtin определены механизмы.

  2. Если источник недоступен, документированы ли механизмы где-нибудь?

Наблюдения

  1. Как может loginwindow:login запрашивать учетные данные, если он запущен перед builtin:forward-login и builtin:auto-login, любой из которых вызывает обход графического интерфейса? Проверяет ли он контекст на наличие таких учетных данных и пропускает ли они себя, если они есть? Кажется странным.

  2. Кроме того, как описано в Apple 802.1X аутентификация технический документ:

    Когда настроен режим окна входа в систему и пользователь вводит имя пользователя и пароль в окне входа в систему, происходят две вещи. Во-первых, окно входа в систему будет аутентифицировать компьютер через 802.1X в сети, используя имя пользователя и пароль, введенные пользователем. После успешной аутентификации 802.1X окно входа в систему будет аутентифицировать то же имя пользователя и пароль для внешнего каталога.

    Поскольку второй этап этой аутентификации обрабатывается pam_opendirectory.so модуля и зависит от присутствия сети, первый этап (аутентификация через 802.1X в сети) обязательно должен произойти до этого. То есть это должно произойти до builtin:authenticate механизм.

    При случайном осмотре loginwindow двоичный файл плагина, кажется, что он обрабатывает такую ​​аутентификацию 802.1X - но единственный механизм, вызванный в этом плагине до builtin:authenticate является loginwindow:login. Правильно ли я полагаю, что этот механизм не только отображает запрос на вход, но и пытается выполнить аутентификацию 802.1X? (Если это так, это не только кажется немного небрежным IMHO, но также предполагает, что учетные данные из EFI / автоматического входа в систему не могут использоваться для проверки подлинности окна входа в систему 802.1X.)

builtin:forward-login,privileged

Перенаправляет успешный вход в FileVault в окно входа в OS X и избавляет от необходимости входить там. Это что-то вроде единого входа. Я отключил это в своей среде, поскольку он не использовал профиль 802.1X, который я настроил. Я бы попробовал это сделать.

OS X: как отключить автоматический вход при включенном FileVault

sudo defaults write /Library/Preferences/com.apple.loginwindow DisableFDEAutoLogin -bool YES
  1. Из того, что я помню, loginwindow: логин фактически используется для создания окна входа в систему с графическим интерфейсом пользователя, аналогично builtin: policy-banner. Так что логично порождаться раньше остальных действий. Таким образом, окно GUI - это то, что на самом деле не имеет отношения / обхода, а не сами учетные данные.

  2. Что именно вы хотели бы изменить и с какой целью? Например, если вам требуется, чтобы плагин авторизации запускался в других ситуациях, вы можете сделать это, отредактировав auth.db.

Кроме того, встроенные подсистемы: Authenticate должны обрабатывать различия между 802.1X и локальной аутентификацией.