前言:
这几天在改进一个过去的脚本,该脚本根据用户所属的认证域,自动把该部门的所有共享资源,在用户登陆之后,自动地安装,便于用户访问使用。在我的环境中的域有三种情况:AD(微软的Active Directory目录服务),OD(Apple的Open Directory目录服务)以及Local(本地登陆服务)。之前,因为只考虑了比较简单的情况,比如本地只有一个特定的管理员用户,其它都是AD网络用户,而且机器配置AD认证插件中,没有打开Mobile用户,所以,判断一个用户的所属域,可以很简单地使用下面的命令:
dscl . list /Users/$userName
这个命令在本地用户库中查找该用户,找到了,就认为是本地用户。
但是问题是,如果开启Mobile选项,那么一个其它域认证的用户,第一次登陆后,系统也会在本地用户库中生成该用户。因为Mobile选项的意思是,所有在这台机器上登陆过的用户,都可以在没有该认证服务时的任何其它地方登陆;也就是,该用户可以拿着这台电脑回家/出差继续工作,或者在没有网络联机的情况下登陆。这样一来,上面的命令就会误判该用户是本地用户。
其实解决的方式也很简单,比如判断用户是否属于一个特定目录服务的用户组,也可以完成判断。
不过,通过网上的搜索后,发现了更多的OSX系统认证命令的使用和内部机制,所以,记录下来整理下思路。
LKDC:
自从10.5之后,苹果引进了新的认证机制,它为苹果机之间简单的一对一共享提供SSO(Single-Sign-On)认证服务, 这个就是Local KDC,简称LKDC.
对于KDC的作用, 以及Kerberos认证机制协议的详细内容,网上一大堆,当然最权威的还要说是麻省理工的