Co faktycznie robią mechanizmy autoryzacji OS X?

13

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 ...

  1. launchd(8)wywołuje gettyent(3)i tym samym określa od ttys(5)do wykonania loginwindow.appdla /dev/console.

  2. 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 ramach authdprocesu (jako root), podczas gdy te, które nie są uprzywilejowane, działają w ramach SecurityAgentprocesu (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łuje pam_authenticate(3)dla authorizationusł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:

  1. 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źć, gdzie builtinzdefiniowane są mechanizmy.

  2. Jeśli źródło nie jest dostępne, czy mechanizmy są gdziekolwiek udokumentowane?

Spostrzeżenia

  1. Jak loginwindow:loginpoprosić o podanie poświadczeń, jeśli są one wywoływane wcześniej builtin:forward-login i builtin: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.

  2. 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ć przed builtin: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:authenticatejest loginwindow: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.)

Eggyal
źródło

Odpowiedzi:

1
  1. Z tego co pamiętam loginwindow: login jest faktycznie używany do odrodzenia okna logowania GUI, podobnie jak wbudowany: policy-banner. Logiczne jest więc, aby spawnował się przed resztą akcji. Tak więc okno GUI jest tym, które w rzeczywistości jest nieistotne / możliwe do ominięcia, a nie same poświadczenia.

  2. Co dokładnie chciałbyś zmodyfikować i w jakim celu? Na przykład, jeśli chcesz wywołać wtyczkę autoryzacyjną w innych sytuacjach, możesz to zrobić, edytując auth.db.

Ponadto wbudowane: podsystemy uwierzytelniania powinny obsługiwać rozróżnianie między 802.1X a uwierzytelnianiem lokalnym.

Overmind
źródło
1
builtin:forward-login,privileged

Przekazuje pomyślne logowanie do FileVault do okna logowania OS X i pomija potrzebę zalogowania się do niego. To trochę jak logowanie jednokrotne. Wyłączam to w moim środowisku, ponieważ nie korzystałem z profilu 802.1X, który miałem skonfigurowany. Spróbowałbym to zrobić.

OS X: Jak wyłączyć automatyczne logowanie, gdy włączona jest FileVault

sudo defaults write /Library/Preferences/com.apple.loginwindow DisableFDEAutoLogin -bool YES
mistacabbage
źródło