Я пытаюсь лучше понять процесс входа в OS X, чтобы решить, как лучше всего достичь Единый вход VPN.
Пожалуйста, поправьте меня, если я ошибаюсь, но я считаю, что ...
launchd(8)
звонки gettyent(3)
и таким образом определяет из ttys(5)
выполнить loginwindow.app
для /dev/console
.
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; запускает элементы входа для пользователя).Хочу подтвердить свое понимание функции каждого механизма:
Доступен ли их исходный код открыто? Я знаю, что не-builtin
механизмы определяются плагинами, которые можно найти в /System/Library/CoreServices/SecurityAgentPlugins
, но я не могу найти источник, из которого они были построены. Я также не могу найти, где builtin
определены механизмы.
Если источник недоступен, документированы ли механизмы где-нибудь?
Как может loginwindow:login
запрашивать учетные данные, если он запущен перед builtin:forward-login
и builtin:auto-login
, любой из которых вызывает обход графического интерфейса? Проверяет ли он контекст на наличие таких учетных данных и пропускает ли они себя, если они есть? Кажется странным.
Кроме того, как описано в 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
Из того, что я помню, loginwindow: логин фактически используется для создания окна входа в систему с графическим интерфейсом пользователя, аналогично builtin: policy-banner. Так что логично порождаться раньше остальных действий. Таким образом, окно GUI - это то, что на самом деле не имеет отношения / обхода, а не сами учетные данные.
Что именно вы хотели бы изменить и с какой целью? Например, если вам требуется, чтобы плагин авторизации запускался в других ситуациях, вы можете сделать это, отредактировав auth.db.
Кроме того, встроенные подсистемы: Authenticate должны обрабатывать различия между 802.1X и локальной аутентификацией.