OSX: 判断用户/系统的所属域以及LKDC
2013-12-03 13:05
330 查看
前言:
这几天在改进一个过去的脚本,该脚本根据用户所属的认证域,自动把该部门的所有共享资源,在用户登陆之后,自动地安装,便于用户访问使用。在我的环境中的域有三种情况:AD(微软的Active Directory目录服务),OD(Apple的Open Directory目录服务)以及Local(本地登陆服务)。之前,因为只考虑了比较简单的情况,比如本地只有一个特定的管理员用户,其它都是AD网络用户,而且机器配置AD认证插件中,没有打开Mobile用户,所以,判断一个用户的所属域,可以很简单地使用下面的命令:
但是问题是,如果开启Mobile选项,那么一个其它域认证的用户,第一次登陆后,系统也会在本地用户库中生成该用户。因为Mobile选项的意思是,所有在这台机器上登陆过的用户,都可以在没有该认证服务时的任何其它地方登陆;也就是,该用户可以拿着这台电脑回家/出差继续工作,或者在没有网络联机的情况下登陆。这样一来,上面的命令就会误判该用户是本地用户。
其实解决的方式也很简单,比如判断用户是否属于一个特定目录服务的用户组,也可以完成判断。
不过,通过网上的搜索后,发现了更多的OSX系统认证命令的使用和内部机制,所以,记录下来整理下思路。
LKDC:
自从10.5之后,苹果引进了新的认证机制,它为苹果机之间简单的一对一共享提供SSO(Single-Sign-On)认证服务, 这个就是Local KDC,简称LKDC.
对于KDC的作用, 以及Kerberos认证机制协议的详细内容,网上一大堆,当然最权威的还要说是麻省理工的官方网站了。
每一个苹果系统,都有自己的KDC(Key Distribution Center),当一个用户访问机器的一个服务时,向KDC请求,KDC根据用户的情况,发给他一个Key用于访问该服务。
在OS X系统初始化的时候,它会为本台电脑,生成一个证书,这个证书可以在system钥匙链中找到,如下图。它是使用SHA1加密的。
在钥匙链中的com.apple.kerberos.kdc证书中的最后的Fingerprints,可以看到SHA1加密的证书的字符形式,
在命令行中,怎么找到呢,既然本地用户要得到本地的认证,那么在用户信息中应该有体现,那么就找找看:
不难发现就在AuthenticationAuthority中就有相关的信息,那么:
上面的方法的限制:居于上面的分析,这个方法,只适用于OS X 10.5之后的系统,也就是支持LKDC的系统内。
LKDC用途:
OD在管理电脑帐户的时候也会使用机器本身的LKDC证书。在一台机器加入到OD的时候,虽然加入的时候使用的是机器名,但是苹果的OD也会使用机器本身的LKDC证书。比如laptopA电脑帐户在OD中的记录是:
为了解决这个问题,使用下面的命令来重新生成一个,就可以解决问题了。
LKDC的用途不仅如此简单,当你使用在你的苹果机上登陆了Apple ID/iClound后,OS X使用LKDC证书来建立加密的IPSec连接,以实现基于广域Bonjour的临时应答式点对点的会话,这不仅限与屏幕和文件共享,从MobileMe就开始提供的远程控制你的Mac的功能-这个Mac的一个用户要与MobileMe/iCloud帐户关联,那么MobileMe/iCloud的帐户所有者就可以远程连接到该Mac.
找出所有的域:
还记得从前说过的金三角架构吧,就是AD-OD-Client架构的连接,也就是AD用户提供用户认证,OD提供用户/电脑配置管理的架构模式。就目前普遍的情况来说,苹果电脑的用户认证使用最多的就是AD, OD, Local这三个域,当然其它Linux/Unix的LDAPv3的实现,也是基于同样的原理,这里没有环境,所以只能就前面三个做试验。这三个域通过不同的组合实现在不同网络环境中的对客户端的管理。比如单独的AD, AD+Local(Mobile用户的一种),
OD(苹果网络用户的一种),OD+Local, AD+OD, AD+OD+Local等等,管理员可以根据不同的管理需求和网络环境实施。
即便是同样的网络环境,基于管理的需求,也可能使用不同的方式。那么使用什么办法可以比较通用地解释当前电脑的连接域的实际情况呢?
通过尝试,使用odutil show nodenames可以把每个节点域的名称罗列出来,然后使用注入dscl命令就可以遍历访问所有节点域了。
下面就是一个比较普通的AD+OD+Local的节点域的例子:
Ref:
LKDC question: http://www.afp548.com/forums/topic/lkdc-question/ Peer-To-Peer Kerberos: http://www.painless-security.com/blog/2007/10/31/p2p-kerberos
LKDC: http://dreness.com/wikimedia/index.php?title=LKDC
Back to My Mac: http://en.wikipedia.org/wiki/Back_to_My_Mac
这几天在改进一个过去的脚本,该脚本根据用户所属的认证域,自动把该部门的所有共享资源,在用户登陆之后,自动地安装,便于用户访问使用。在我的环境中的域有三种情况: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认证机制协议的详细内容,网上一大堆,当然最权威的还要说是麻省理工的官方网站了。
每一个苹果系统,都有自己的KDC(Key Distribution Center),当一个用户访问机器的一个服务时,向KDC请求,KDC根据用户的情况,发给他一个Key用于访问该服务。
在OS X系统初始化的时候,它会为本台电脑,生成一个证书,这个证书可以在system钥匙链中找到,如下图。它是使用SHA1加密的。
在钥匙链中的com.apple.kerberos.kdc证书中的最后的Fingerprints,可以看到SHA1加密的证书的字符形式,
在命令行中,怎么找到呢,既然本地用户要得到本地的认证,那么在用户信息中应该有体现,那么就找找看:
dscl . read /Users/$(users)
不难发现就在AuthenticationAuthority中就有相关的信息,那么:
dscl . read /Users/$(users) AuthenticationAuthority | grep $(users)@LKDC:为了验证一个用户的认证域是不是本地,可以使用上面的命令。
上面的方法的限制:居于上面的分析,这个方法,只适用于OS X 10.5之后的系统,也就是支持LKDC的系统内。
LKDC用途:
OD在管理电脑帐户的时候也会使用机器本身的LKDC证书。在一台机器加入到OD的时候,虽然加入的时候使用的是机器名,但是苹果的OD也会使用机器本身的LKDC证书。比如laptopA电脑帐户在OD中的记录是:
1) laptopA$ 2) laptopA.local$ 3) LKDC:SHA1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx$最后的就是LKDC证书。这样有可能出现问题,比如,使用克隆的方式制作的内部系统镜像后,把这个系统应用到另外一台机器后,这两台机器会得到相同的LKDC证书,那么第二台相同LKDC证书的机器加入OD的时候,虽然两台机器使用不同的机器名,OD还会报错说具有相同LKDC证书的机器已经加入过了。这个证书和我们上面看到的com.apple.kerberos.kdc证书一模一样。
为了解决这个问题,使用下面的命令来重新生成一个,就可以解决问题了。
rm -fr /var/db/krb5kdc /usr/libexec/configureLocalKDC
LKDC的用途不仅如此简单,当你使用在你的苹果机上登陆了Apple ID/iClound后,OS X使用LKDC证书来建立加密的IPSec连接,以实现基于广域Bonjour的临时应答式点对点的会话,这不仅限与屏幕和文件共享,从MobileMe就开始提供的远程控制你的Mac的功能-这个Mac的一个用户要与MobileMe/iCloud帐户关联,那么MobileMe/iCloud的帐户所有者就可以远程连接到该Mac.
找出所有的域:
还记得从前说过的金三角架构吧,就是AD-OD-Client架构的连接,也就是AD用户提供用户认证,OD提供用户/电脑配置管理的架构模式。就目前普遍的情况来说,苹果电脑的用户认证使用最多的就是AD, OD, Local这三个域,当然其它Linux/Unix的LDAPv3的实现,也是基于同样的原理,这里没有环境,所以只能就前面三个做试验。这三个域通过不同的组合实现在不同网络环境中的对客户端的管理。比如单独的AD, AD+Local(Mobile用户的一种),
OD(苹果网络用户的一种),OD+Local, AD+OD, AD+OD+Local等等,管理员可以根据不同的管理需求和网络环境实施。
即便是同样的网络环境,基于管理的需求,也可能使用不同的方式。那么使用什么办法可以比较通用地解释当前电脑的连接域的实际情况呢?
通过尝试,使用odutil show nodenames可以把每个节点域的名称罗列出来,然后使用注入dscl命令就可以遍历访问所有节点域了。
下面就是一个比较普通的AD+OD+Local的节点域的例子:
Nodenames: Name State Refs Type External Locked Hidden ----------------------------------------- ------ ---- ------------ -------- ------ ------ /Active Directory Online 2 X X /Active Directory/EDU Online 14 /Active Directory/EDU/All Domains Online 17 Virtual node /Active Directory/EDU/Global Catalog Online 18 Virtual node X /Active Directory/EDU/ebc.bc.com 2 Virtual node X /Active Directory/EDU/edu.ebc.com Online 15 Virtual node X /Active Directory/EDU/org.ebc.com Online 5 Virtual node X /Active Directory/EDU/public.ebc.com 2 /Active Directory/EDU/tss.ebc.com 2 Virtual node X /Configure Online 1 X X /Contacts Online 3 /LDAPv3 Online 2 X X /LDAPv3/S379ees2.edu.ebc.com Online 15 /Local 2 X X /Local/Default Online 30 X /NIS 1 X X /Search Online 39
Ref:
LKDC question: http://www.afp548.com/forums/topic/lkdc-question/ Peer-To-Peer Kerberos: http://www.painless-security.com/blog/2007/10/31/p2p-kerberos
LKDC: http://dreness.com/wikimedia/index.php?title=LKDC
Back to My Mac: http://en.wikipedia.org/wiki/Back_to_My_Mac
相关文章推荐
- OSX: 判断用户/系统的所属域以及LKDC
- 微信扫描下载提示以及js判断用户手机系统
- 判断Android系统程序以及用户安装的程序
- linux底层内存管理--用户空间的分级分配系统以及懒惰的含义
- 调用android系统的图库以及截图来让用户自定义界面背景
- OSX脚本:禁止系统自动添加AppStore图标到用户Dock上
- linux系统用户以及用户组管理
- 安卓判断系统相机授权状态以及调用系统相机
- django1.6 使用userprofile 以及一些关于用户系统的总结
- 获取系统磁盘类型信息以及判断是否是U盘
- OSX脚本:禁止系统自动添加AppStore图标到用户Dock上
- 邮件服务系列之四基于虚拟用户的虚拟域的邮件系统(安装courier-authlib以及部分配置方法)
- 通过宏判断VS编译版本以及系统平台
- 判断 网络是否通常,以及判断用户使用的网络类型,时2G\3G\还是wifi
- yii接值方式判断以及获取当前用户ip
- Linux登录系统后了解用户、用户组、登录的终端以及root用户强制指定终端用户下线的小结
- 地磅称量系统之(37~39) 直接向数据库的数据表WtBill添加测试数据以及绑定用户控件和使用编码的方式控制dataGridView控件的每列属性和添加数据数据库的表中不存在的字段(非绑定列)
- 完成系统登录程序,从命令行输入用户名和密码,如果没有输入用户名和密码,则提示输入用户名和密码;如果输入了用户名但是没有输入密码,则提示用户输入密码,然后判断用户名是否是mldn,密码是否是hello,
- 多语言支持:系统界面以及用户产生内容
- shell 脚本 判断用户是管理员还是系统用户还是普通用户脚本