背景
我正在尝试更好地了解 OS X 登录过程,以便决定实现的最佳方法VPN 单点登录。
如果我错了,请纠正我,但我相信——
launchd(8)
调用gettyent(3)
并从而确定从ttys(5)
执行到loginwindow.app
的/dev/console
。loginwindow.app
尝试获取system.login.console
授权权,授权数据库为此指定了以下机制(列出并附上我对其功能的理解);具有特权的在进程内运行authd
(作为 root),而没有特权的在进程内运行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
,其中任何一个都会导致 GUI 被绕过?它是否会检查此类凭据的上下文,如果存在则跳过?似乎很奇怪。此外,正如苹果公司所述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 登录窗口身份验证。)
答案1
据我回忆,loginwindow:login 实际上用于生成 GUI 登录窗口,类似于builtin:policy-banner。因此,在其他操作之前生成它是合乎逻辑的。因此,GUI 窗口实际上是不相关/可绕过的窗口,而不是凭据本身。
您到底想修改什么,修改的目的是什么?例如,如果您需要在其他情况下调用授权插件,则可以通过编辑 auth.db 来实现。
此外,内置:身份验证子系统应该处理 802.1X 和本地身份验证之间的差异。
答案2
builtin:forward-login,privileged
将成功的 FileVault 登录转发到 OS X 登录窗口,无需在那里登录。这有点像单点登录。我在我的环境中禁用了此功能,因为它没有使用我设置的 802.1X 配置文件。我会尝试这样做。
sudo defaults write /Library/Preferences/com.apple.loginwindow DisableFDEAutoLogin -bool YES