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.app
dla/dev/console
.loginwindow.app
próbuje uzyskaćsystem.login.console
prawo 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 ramachauthd
procesu (jako root), podczas gdy te, które nie są uprzywilejowane, działają w ramachSecurityAgent
procesu (jako _securityagent):builtin:policy-banner
(wyświetla baner okna logowania , jeśli jest ustawiony).loginwindow:login
(monit o podanie poświadczeń).builtin:login-begin
builtin: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)
dlaauthorization
usługi; ustawia wartość kontekstu „UID”).PKINITMechanism:auth,privileged
(inicjuje Kerberos, uzyskując TGT).builtin:login-success
loginwindow: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-
builtin
mechanizmy 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źć, gdziebuiltin
zdefiniowane są mechanizmy.Jeśli źródło nie jest dostępne, czy mechanizmy są gdziekolwiek udokumentowane?
Spostrzeżenia
Jak
loginwindow:login
poprosić o podanie poświadczeń, jeśli są one wywoływane wcześniejbuiltin:forward-login
ibuiltin:auto-login
któ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.so
moduł 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:authenticate
mechanizmem.Z przypadkowej kontroli
loginwindow
pliku binarnego wtyczki wydaje się, że obsługuje takie uwierzytelnianie 802.1X - ale jedynym mechanizmem wywoływanym przed tą wtyczkąbuiltin:authenticate
jestloginwindow: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.)