Фон
Я намагаюся краще зрозуміти процес входу в 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
(ініціалізує Керберос, отримуючи 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 Authentication :
Коли налаштовано режим вікна входу, а користувач набере ім’я та пароль користувача у вікні входу, відбудуться дві речі. По-перше, вікно для входу в систему підтвердить автентифікацію комп'ютера через мережу 802.1X, використовуючи ім’я користувача та пароль, введені користувачем. Після того, як аутентифікація 802.1X буде успішною, вікно входу підтвердить аутентифікацію того ж імені користувача та пароля у зовнішній каталог.
Оскільки другий етап цієї аутентифікації обробляється
pam_opendirectory.so
модулем і залежить від присутності мережі, перша стадія (автентифікація через мережу 802.1X) повинна обов'язково проходити до цього. Тобто воно має відбуватися передbuiltin:authenticate
механізмом.З випадкового огляду
loginwindow
бінарного модуля плагіну, здається, він обробляє таку аутентифікацію 802.1X, але єдиним механізмом, на який посилався цей плагін,builtin:authenticate
єloginwindow:login
. Чи правильно я вважаю, що цей механізм не тільки відображає запит на вхід, але й намагається перевірити автентифікацію 802.1X? (Якщо так, це не тільки здається трохи неохайним IMHO, але також дозволяє припустити, що облікові дані з EFI / auto-login не можна використовувати для аутентифікації вікна входу 802.1X.)