Фон
Я намагаюся краще зрозуміти процес входу в 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-beginbuiltin: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-successloginwindow: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.)