Latar Belakang
Saya mencoba mendapatkan pemahaman yang lebih baik tentang proses login OS X, untuk memutuskan cara terbaik untuk mencapai VPN Single Sign On .
Tolong perbaiki aku kalau aku salah, tapi aku percaya itu—
launchd(8)
panggilangettyent(3)
dan dengan demikian menentukanttys(5)
untuk mengeksekusiloginwindow.app
untuk/dev/console
.loginwindow.app
upaya untuk memperolehsystem.login.console
hak otorisasi, yang mana database otorisasi menentukan mekanisme berikut (dicantumkan bersama dengan pemahaman saya tentang fungsinya); mereka yang diistimewakan dijalankan dalamauthd
proses (sebagai root), sementara yang tidak diistimewakan dijalankan dalamSecurityAgent
proses (sebagai _securityagent):builtin:policy-banner
(menampilkan spanduk Jendela Masuk , jika disetel).loginwindow:login
(meminta kredensial).builtin:login-begin
builtin:reset-password,privileged
(melakukan reset kata sandi menggunakan ID Apple ).builtin:forward-login,privileged
(meneruskan kredensial dari EFI saat boot).builtin:auto-login,privileged
(berlaku kredensial masuk otomatis saat boot).builtin:authenticate,privileged
(dipanggilpam_authenticate(3)
untukauthorization
layanan; set nilai konteks "uid").PKINITMechanism:auth,privileged
(menginisialisasi Kerberos dengan memperoleh TGT).builtin:login-success
loginwindow:success
(mengamankan sesi login dari akses jarak jauh yang tidak sah; mencatat login dalam database utmp dan utmpx sistem; menetapkan pemilik dan izin untuk terminal konsol).HomeDirMechanism:login,privileged
(me-mount direktori home pengguna).HomeDirMechanism:status
(menampilkan progres pemasangan direktori home).MCXMechanism:login
(berlaku profil konfigurasi).loginwindow:done
(me-reset preferensi pengguna untuk memasukkan default sistem global; mengkonfigurasi mouse, keyboard, dan suara sistem menggunakan preferensi pengguna; mengatur izin grup pengguna; mengambil catatan pengguna dari Layanan Direktori dan menerapkan informasi itu ke sesi; memuat komputasi pengguna lingkungan — termasuk preferensi, variabel lingkungan, izin perangkat dan file, akses gantungan kunci, dan sebagainya; meluncurkan Dock, Finder, dan SystemUIServer; meluncurkan item login untuk pengguna).
Pertanyaan
Saya sangat ingin mengkonfirmasi pemahaman saya tentang fungsi masing-masing mekanisme:
Apakah kode sumber mereka tersedia secara terbuka? Saya tahu bahwa non-
builtin
mekanisme didefinisikan oleh plugin yang dapat ditemukan di bawah/System/Library/CoreServices/SecurityAgentPlugins
, tetapi saya tidak dapat menemukan sumber dari mana mereka dibangun. Saya juga tidak bisa menemukan di manabuiltin
mekanisme didefinisikan.Jika sumber tidak tersedia, apakah mekanisme didokumentasikan di mana saja?
Pengamatan
Bagaimana bisa
loginwindow:login
meminta kredensial jika dipanggil sebelumbuiltin:forward-login
danbuiltin:auto-login
, yang salah satunya menyebabkan GUI dilewati? Apakah ia memeriksa konteks kredensial semacam itu dan melompat sendiri jika ada? Sepertinya aneh.Selanjutnya, seperti yang dijelaskan dalam kertas putih teknis 802.1X Autentikasi Apple :
Saat Mode Jendela Masuk dikonfigurasi dan pengguna mengetikkan nama pengguna dan kata sandi di jendela masuk, dua hal akan terjadi. Pertama, jendela masuk akan mengotentikasi komputer melalui 802.1X ke jaringan menggunakan nama pengguna dan kata sandi yang dimasukkan pengguna. Setelah otentikasi 802.1X berhasil, jendela masuk akan mengotentikasi nama pengguna dan kata sandi yang sama ke direktori eksternal.
Karena tahap kedua otentikasi itu ditangani oleh
pam_opendirectory.so
modul dan tergantung pada jaringan yang ada, tahap pertama (otentikasi melalui 802.1X ke jaringan) harus terjadi sebelum itu. Artinya, itu harus terjadi sebelumbuiltin:authenticate
mekanisme.Dari pemeriksaan biasa terhadap
loginwindow
plugin biner, tampaknya ia menangani otentikasi 802.1X seperti itu — tetapi satu-satunya mekanisme yang dipanggil dalam plugin itu sebelumnyabuiltin:authenticate
adalahloginwindow:login
. Apakah saya benar dalam berpikir bahwa mekanisme ini tidak hanya menampilkan prompt login, tetapi kemudian juga mencoba otentikasi 802.1X? (Jika demikian, itu tidak hanya tampaknya IMHO sedikit ceroboh tetapi juga menunjukkan bahwa kredensial dari EFI / auto-login tidak dapat digunakan untuk otentikasi jendela masuk 802.1X.)