tło
Próbuję uzyskać lepsze zrozumienie procesu logowania do systemu OS X, aby wybrać najlepszy sposób uzyskania pojedynczego logowania VPN .
Popraw mnie, jeśli się mylę, ale wierzę, że ...
launchd(8)wywołujegettyent(3)i tym samym określa odttys(5)do wykonanialoginwindow.appdla/dev/console.loginwindow.apppróbuje uzyskaćsystem.login.consoleprawo autoryzacji, dla którego baza danych autoryzacji określa następujące mechanizmy (wymienione wraz z moim rozumieniem ich funkcji); te, które są uprzywilejowane, działają w ramachauthdprocesu (jako root), podczas gdy te, które nie są uprzywilejowane, działają w ramachSecurityAgentprocesu (jako _securityagent):builtin:policy-banner(wyświetla baner okna logowania , jeśli jest ustawiony).loginwindow:login(monit o podanie poświadczeń).builtin:login-beginbuiltin:reset-password,privileged(wykonuje reset hasła przy użyciu Apple ID ).builtin:forward-login,privileged(przekazuje poświadczenia z EFI podczas rozruchu).builtin:auto-login,privileged(stosuje poświadczenia automatycznego logowania podczas rozruchu).builtin:authenticate,privileged(wywołujepam_authenticate(3)dlaauthorizationusługi; ustawia wartość kontekstu „UID”).PKINITMechanism:auth,privileged(inicjuje Kerberos, uzyskując TGT).builtin:login-successloginwindow:success(zabezpiecza sesję logowania przed nieautoryzowanym dostępem zdalnym; rejestruje logowanie w bazach danych utmp i utmpx systemu; ustawia właściciela i uprawnienia dla terminala konsoli).HomeDirMechanism:login,privileged(montuje katalog domowy użytkownika).HomeDirMechanism:status(wyświetla postęp montowania katalogu domowego).MCXMechanism:login(stosuje profile konfiguracji).loginwindow:done(resetuje preferencje użytkownika, aby uwzględnić globalne ustawienia domyślne systemu; konfiguruje dźwięk myszy, klawiatury i systemu za pomocą preferencji użytkownika; ustawia uprawnienia grupy użytkownika; pobiera rekord użytkownika z usług katalogowych i stosuje te informacje do sesji; ładuje dane komputerowe użytkownika środowisko - w tym preferencje, zmienne środowiskowe, uprawnienia do urządzenia i plików, dostęp do pęku kluczy itp.; uruchamia Dock, Finder i SystemUIServer; uruchamia elementy logowania dla użytkownika).
pytania
Bardzo chciałbym potwierdzić moje zrozumienie funkcji każdego mechanizmu:
Czy ich kod źródłowy jest dostępny otwarcie? Wiem, że nie-
builtinmechanizmy są zdefiniowane przez wtyczki, które można znaleźć pod/System/Library/CoreServices/SecurityAgentPlugins, ale nie mogę znaleźć źródła, z którego zostały zbudowane. Nie mogę też znaleźć, gdziebuiltinzdefiniowane są mechanizmy.Jeśli źródło nie jest dostępne, czy mechanizmy są gdziekolwiek udokumentowane?
Spostrzeżenia
Jak
loginwindow:loginpoprosić o podanie poświadczeń, jeśli są one wywoływane wcześniejbuiltin:forward-loginibuiltin:auto-loginktóre z nich powodują pominięcie GUI? Czy sprawdza kontekst pod kątem takich poświadczeń i pomija się, jeśli są one obecne? Wydaje się dziwne.Ponadto, jak opisano w białej księdze technicznej Apple dotyczącej uwierzytelniania 802.1X :
Gdy skonfigurowany jest tryb okna logowania, a użytkownik wpisze nazwę użytkownika i hasło w oknie logowania, będą dwie rzeczy. Po pierwsze, okno logowania uwierzytelni komputer poprzez 802.1X w sieci, używając nazwy użytkownika i hasła, które wprowadził użytkownik. Po udanym uwierzytelnieniu 802.1X okno logowania uwierzytelni tę samą nazwę użytkownika i hasło do katalogu zewnętrznego.
Ponieważ drugi etap tego uwierzytelnienia jest obsługiwany przez
pam_opendirectory.somoduł i zależy od obecności sieci, pierwszy etap (uwierzytelnianie przez sieć za pośrednictwem 802.1X) musi koniecznie wystąpić przed tym. Oznacza to, że musi wystąpić przedbuiltin:authenticatemechanizmem.Z przypadkowej kontroli
loginwindowpliku binarnego wtyczki wydaje się, że obsługuje takie uwierzytelnianie 802.1X - ale jedynym mechanizmem wywoływanym przed tą wtyczkąbuiltin:authenticatejestloginwindow:login. Czy mam rację, sądząc, że ten mechanizm nie tylko wyświetla monit o zalogowanie, ale następnie podejmuje próbę uwierzytelnienia 802.1X? (Jeśli tak, to nie tylko wydaje się trochę niechlujny IMHO, ale także sugeruje, że poświadczenia z EFI / automatycznego logowania nie mogą być używane do uwierzytelniania okna logowania 802.1X.)