我试图收集更好地了解OS Xlogin过程,以决定实现VPN单点login的最佳方式。
如果我错了,请纠正我,但我相信 –
launchd(8)
调用gettyent(3)
,从而决定从ttys(5)
为/dev/console
执行loginwindow.app
。
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的理解:
他们的源代码是否公开? 我知道非builtin
机制是通过可以在/System/Library/CoreServices/SecurityAgentPlugins
下find的插件来定义的,但是我找不到它们的来源。 我也不能findbuiltin
机制的定义。
如果来源不可用,是否在任何地方logging了机制?
loginwindow:login
如果在 builtin:forward-login
之前调用loginwindow:login
, loginwindow:login
提示input凭证builtin:forward-login
和builtin:auto-login
,其中任何一个都会导致GUI被绕过? 它是否检查这些证书的背景,如果他们在场,就跳过? 看起来很奇怪。
而且,正如苹果的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。)
从我记得的loginwindow:login实际上用于产生GUIlogin窗口,类似于内置:policy-banner。 所以在其余的行动之前产生是合乎逻辑的。 所以GUI窗口实际上是不相关/可绕过的,而不是证书本身。
你到底想修改什么,达到什么目的? 例如,如果您需要在其他情况下调用授权插件,则可以通过编辑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