背景 

背景 

背景 

我正在尝试更好地了解 OS X 登录过程,以便决定实现的最佳方法VPN 单点登录

如果我错了,请纠正我,但我相信——

  1. launchd(8)调用gettyent(3)并从而确定从ttys(5)执行到loginwindow.app/dev/console

  2. 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;为用户启动登录项)。

问题

我非常想确认我对每个机制功能的理解:

  1. 他们的源代码是否公开? 我知道非builtin机制是由可在 下找到的插件定义的/System/Library/CoreServices/SecurityAgentPlugins,但我找不到它们的构建源。我也找不到builtin机制的定义位置。

  2. 如果没有可用来源,是否有任何地方记录该机制?

观察结果

  1. loginwindow:login如果被调用,如何提示输入凭据 builtin:forward-loginbuiltin:auto-login,其中任何一个都会导致 GUI 被绕过?它是否会检查此类凭据的上下文,如果存在则跳过?似乎很奇怪。

  2. 此外,正如苹果公司所述802.1X 身份验证技术白皮书:

    当配置了登录窗口模式并且用户在登录窗口输入用户名和密码时,将发生两件事。首先,登录窗口将使用用户输入的用户名和密码通过 802.1X 将计算机验证到网络。802.1X 验证成功后,登录窗口将使用相同的用户名和密码向外部目录验证。

    由于该身份验证的第二阶段由模块处理pam_opendirectory.so,并且依赖于网络的存在,因此第一阶段(通过 802.1X 进行网络身份验证)必须先于第二阶段进行。也就是说,它必须在该builtin:authenticate机制之前发生。

    从对插件二进制文件的粗略检查来看loginwindow,它似乎处理了此类 802.1X 身份验证 — 但在该插件中调用的唯一机制builtin:authenticateloginwindow:login。我是否正确地认为该机制不仅显示登录提示,而且还尝试 802.1X 身份验证?(如果是这样,这不仅在我看来有点草率,而且还表明来自 EFI/自动登录的凭据不能用于 802.1X 登录窗口身份验证。)

答案1

  1. 据我回忆,loginwindow:login 实际上用于生成 GUI 登录窗口,类似于builtin:policy-banner。因此,在其他操作之前生成它是合乎逻辑的。因此,GUI 窗口实际上是不相关/可绕过的窗口,而不是凭据本身。

  2. 您到底想修改什么,修改的目的是什么?例如,如果您需要在其他情况下调用授权插件,则可以通过编辑 auth.db 来实现。

此外,内置:身份验证子系统应该处理 802.1X 和本地身份验证之间的差异。

答案2

builtin:forward-login,privileged

将成功的 FileVault 登录转发到 OS X 登录窗口,无需在那里登录。这有点像单点登录。我在我的环境中禁用了此功能,因为它没有使用我设置的 802.1X 配置文件。我会尝试这样做。

OS X:如何在启用 FileVault 时禁用自动登录

sudo defaults write /Library/Preferences/com.apple.loginwindow DisableFDEAutoLogin -bool YES

相关内容