OS X授权机制实际上做了什么?

背景

我试图收集更好地了解OS Xlogin过程,以决定实现VPN单点login的最佳方式。

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

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

  2. loginwindow.app尝试获取system.login.console授权权限,授权数据库为其指定以下机制(与我对其function的理解一起列出); 那些在authd进程中运行的特权(以root身份),而那些在SecurityAgent进程中没有特权的进程(如_securityagent):

    • builtin:policy-banner (显示login窗口横幅 ,如果设置)。
    • loginwindow:login (提示input凭证)。
    • builtin:login-begin
    • builtin:reset-password,privileged ( 使用Apple ID执行密码重置 )。
    • builtin:forward-login,privileged (在启动时从EFI转发凭据)。
    • builtin:auto-login,privileged (启动时应用自动login凭据)。
    • builtin:authenticate,privileged (为authorization服务调用pam_authenticate(3) ;设置“uid”上下文值)。
    • PKINITMechanism:auth,privileged (通过获取TGT来初始化Kerberos)。
    • builtin:login-success
    • loginwindow:success (确保login会话不受未经授权的远程访问;将loginlogging在系统的utmp和utmpx数据库中;设置控制台terminal的所有者和权限)。
    • HomeDirMechanism:login,privileged (挂载用户的主目录)。
    • HomeDirMechanism:status (显示主目录挂载的进度)。
    • MCXMechanism:login (应用configuration文件)。
    • loginwindow:done (重置用户的首选项以包含全局系统默认值;使用用户的首选项configuration鼠标,键盘和系统声音;设置用户的组权限;从目录服务检索用户logging并将该信息应用于会话;用户的计算环境 – 包括首选项,环境variables,设备和文件权限,钥匙串访问等等;启动Dock,Finder和SystemUIServer;启动用户的login项目。

问题

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

  1. 他们的源代码是否公开? 我知道非builtin机制是通过可以在/System/Library/CoreServices/SecurityAgentPlugins下find的插件来定义的,但是我找不到它们的来源。 我也不能findbuiltin机制的定义。

  2. 如果来源不可用,是否在任何地方logging了机制?

意见

  1. loginwindow:login如果 builtin:forward-login 之前调用loginwindow:loginloginwindow:login提示input凭证builtin:forward-loginbuiltin:auto-login ,其中任何一个都会导致GUI被绕过? 它是否检查这些证书的背景,如果他们在场,就跳过? 看起来很奇怪。

  2. 而且,正如苹果的802.1Xauthentication技术白皮书所述:

    当login窗口模式被configuration并且用户在login窗口input用户名和密码时,会发生两件事情。 首先,login窗口将使用用户input的用户名和密码通过802.1X向networkingvalidation计算机。 802.1Xauthentication成功后,login窗口会对外部目录authentication相同的用户名和密码。

    由于该authentication的第二阶段由pam_opendirectory.so模块处理并且依赖于存在的networking,所以第一阶段(通过802.1X对networking进行authentication)必须在此之前发生。 也就是说,它必须在builtin:authenticate之前进行builtin:authenticate机制。

    从对loginwindow插件二进制文件的随意检查看来,它似乎处理了这种802.1Xauthentication,但是在builtin:authenticate之前在该插件中调用的唯一机制是loginwindow:login 。 我是否认为这种机制不仅显示login提示,而且还尝试802.1Xvalidation? (如果是这样的话,那么不仅看起来有点sl IM恕我直言,而且还表明来自EFI /自动login的凭证不能用于802.1Xlogin窗口身份validation。)

  1. 从我记得的loginwindow:login实际上用于产生GUIlogin窗口,类似于内置:policy-banner。 所以在其余的行动之前产生是合乎逻辑的。 所以GUI窗口实际上是不相关/可绕过的,而不是证书本身。

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

此外,内置:authentication子系统应处理802.1X和本地authentication之间的差异。

 builtin:forward-login,privileged 

将成功的FileVaultlogin转移到OS Xlogin窗口并跳过需要login的地方。 这有点像单点login。 我在我的环境中禁用了它,因为它没有使用我设置的802.1Xconfiguration文件。 我会尝试做到这一点。

OS X:如何启用FileVault时禁用自动login

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