背景
我试图更好地理解OS X登录过程,以便确定实现VPN Single Sign On的最佳方法。
如果我错了,请纠正我,但我相信-
launchd(8)
调用gettyent(3)
,并且因此确定从ttys(5)
执行loginwindow.app
对/dev/console
。loginwindow.app
尝试获取system.login.console
授权,授权数据库为此指定了以下机制(与我对其功能的理解一起列出);那些特权的authd
进程在进程内运行(作为根用户),而那些没有特权的SecurityAgent
进程在进程内运行(作为_securityagent):builtin:policy-banner
(显示“ 登录窗口”横幅,如果已设置)。loginwindow:login
(提示输入凭据)。builtin:login-begin
builtin: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初始化Kerberos)。builtin:login-success
loginwindow: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身份验证技术白皮书中所述:
配置登录窗口模式并在登录窗口中输入用户名和密码后,将发生两件事。首先,登录窗口将使用用户输入的用户名和密码通过802.1X对计算机进行身份验证。802.1X身份验证成功后,登录窗口将向外部目录验证相同的用户名和密码。
由于该认证的第二阶段由
pam_opendirectory.so
模块处理,并且取决于存在的网络,因此第一阶段(通过802.1X认证到网络)必须在此之前发生。也就是说,它必须在builtin:authenticate
机制之前发生。从对
loginwindow
插件二进制文件的随意检查来看,它似乎可以处理802.1X身份验证-但在该插件之前调用的唯一机制builtin:authenticate
是loginwindow:login
。我认为这种机制不仅会显示登录提示,还会尝试802.1X身份验证,是否正确?(如果是这样,这不仅看起来有点草率,恕我直言,而且表明EFI /自动登录的凭据不能用于802.1X登录窗口身份验证。)