LDAP基础知识
1. LDAP介绍 2. LDAP数据结构 3. LDAP数据推送 4. Windows域环境中的LDAP 5. 使用域环境中的LDAP认证WEB应用 6. 参考资料 |
1. LDAP介绍
LDAP - LIGHT DIRECTORY ACCESS PROTOCOL,是轻型目录访问协议,它具备以下特征
- 像电话簿,并专门针对查询进行了优化
- 采用树型结构进行存放,一个叶子结点为一条记录
- 针对以下数据的存储是相当有效的,公司员工资料与组织结构、客户资料、计算机管理相关信息、软件包配置信息、公钥证书与密钥等,也正是因为它的这些特点,LDAP也被微软活动目录用作组织企业计算机、员工、策略、资源等的手段之一,稍后对LDAP的讲解也将基于Windows AD进行
2. LDAP数据结构
1)DN组成以及其标识
- DN, 分发名称组件,一个索引,也相当于目录,如果要访问目录中的数据,必需先查找索引
- o, 企业名称
- c, 国别码
- DC, 域名组件,表示DC后的内容为域名的一部份,如"DC=COMPUS,DC=COM"
- OU, 组织单位组件,表示后面的内容一个组织单位名称,如"人事部","计算机"等
- CN, 通用名称组件,一般名称,可以表示一个对象,也可以表示存储一个存储数据的组,需要看它在DN中的位置
- BASE-DN, 基准DN,前面已经说过,LDAP的数据作为树形结构进行存储,这个BASE-DN就是树根了,企业中所有的数据都必须存储到树根下面,BASE-DN的标准结构有两种,一种采用企业名称作为BASE-DN, 比如,
2)DN举例
··前面已经说过,DN就相当于一个目录(或者说路径),就像在操作系统中,我如果想查看/DATA/COMPANY/Customer.csv文件的内容,我就必须定位/DATA/COMPANY/Customer.csv这个文件,而它的内容就相当于一个记录,同样道理,在LDAP中采用一种叫作分发名称的结构对数据进行索引,为了方便理解,现列举几个WINDOWS域环境中的几个常用的DN
··"CN=USERS,DC=CAMPUS,DC=COM" 记录了域环境中所有的用户以及其相关信息,该索引在LINUX系统中就相当于/etc/passwd,/etc/shadow文件
··CN=COMPUTERS,DC=CAMPUS,DC=COM 记录了域环境中所有的计算机相关信息,在LINUX系统中相当于/etc/hosts文件
··CN=GROUPS,DC=CAMPUS,DC=COM => /etc/groups 记录了域环境中所有的用户组
3) 记录
; 记录就相当一个文件具体的内容,但对于LDAP来,具有一定的格式,以下是个合格的记录格式
- -----------------------------
- objectClass: top
- objectClass: person
- objectClass: organizationalPerson
- objectClass: user
- objectClass: computer
- cn: sys
- distinguishedName: CN=sys,CN=Computers,DC=campus,DC=com
- instanceType: 4
- whenCreated: 20110801145206.0Z
- whenChanged: 20110807060858.0Z
- uSNCreated: 28792
- uSNChanged: 29059
- name: sys
- objectGUID: c30356dc-c16a-4839-a6a5-f7ba41bee3fc
- userAccountControl: 69632
- badPwdCount: 0
- codePage: 0
- countryCode: 0
- badPasswordTime: 0
- lastLogoff: 0
- lastLogon: 129572557781972500
- localPolicyFlags: 0
- pwdLastSet: 129571709386957500
- primaryGroupID: 515
- objectSid: S-1-5-21-3860249643-2907460077-2127510712-1123
- accountExpires: 9223372036854775807
- logonCount: 40
- sAMAccountName: sys$
- sAMAccountType: 805306369
- dNSHostName: sys.campus.com
- servicePrincipalName: HOST/sys.campus.com
- servicePrincipalName: HOST/SYS
- objectCategory: CN=Computer,CN=Schema,CN=Configuration,DC=campus,DC=com
- isCriticalSystemObject: FALSE
- -----------------------------
; 哇,好复杂……,不过不用怕,其实其关键也就是由一组组"Key:Value"组成的而已,我们知道,要表达出一个对象的特征,我们就要用很多组这样的"K:V"对,比如,要描述一头猪的样子,我们可以说他有四条腿,两只长耳朵,两只眼睛,这样我们的记录就可以写成
- -----------------------------
- DN: OU=3号猪圈, O=华阳养猪场, C=中国
- 类别: 大沙文猪
- 编号: 9527
- 眼睛: 2
- 腿: 4
- 耳朵: 2
- 耳朵形状: 长
- -----------------------------
这样我如果要找一头编号为9527的猪,就要先到华阳养猪场……,貌似走远了
写了这么多,我其实就想说一条记录的组成,其实很简单,仅此而已,我们的数据检索,也就是查找这些"PV"对而已,当然为了这个记录能够跟国际接轨,有一些字段是不能被省略的,就像全世界的人都有2条腿(呃)一样
3. LDAP服务器数据推送
; 事实上,一个企业可能有多个分支机构,而每个分支机构也可能有自己的LDAP服务器,那么在企业中,这些LDAP服务器数据是怎样进行同步的呢,总结起来,同步的方式就两种,推(PUSH),拉(PULL)
- PUSH, LDAP服务器每隔一段时间就会将自己的服务器传送到企业中其它的LDAP服务器中
- PULL, LDAP服务器每隔一段时间把其它LDAP服务器内容下载到本机
4. 域环境中的LDAP
我们知道,国际标准中的LDAP查询是不需要用户名与密码的,但是你知道,我们要介绍的是微软,所以,就有点特殊了-对微软的LDAP,也即域控进行查询操作时,需要进行一次绑定操作绑定一个合法用户才能进行查询操作,稍后我们讲学习如何进行绑定操作以及进行查询
注意,进行以下的操作先假设你已安装好两台虚拟机,一台Windows Server 2003,其IP地址为10.0.0.4,一台CentOS 5.5 Final,其IP地址为10.0.0.1,再假设Server2003域控(其域为CAMPUS.COM)部署完成且CENTOS已经加 入到域中,什么,你不会?请参考文章末尾的参考资料…… |
1)探索Windows Active Directory中数据与LDAP结构的关系
我们先按"Windows+R"键,然后输入"MSTSC",然后连接我们的域控制器,输入凭据,登录,如下图,我们已经连接到控制器并打开"Active Directory 用户和计算机",图1
现在我们新建一个组织单位,Linux,好现在我们查看LINUX这个组织单位在LDAP中是怎么表示的,请看(正点)
- $ ldapsearch -x -b "dc=CAMPUS,dc=COM" \
- -D "CAMPUS\cc" -w "MYPASS" \
- -h 10.0.0.4 | less
然后我们输入"/Linux"(不含引号,如图2),我们就看到了他的DN,也就是路径为:OU=Linux,DC=CAMPUS,DC=COM
也就是说,我们查找所有组织单位为LINUX的元素的话,就可以通过以下命令进行查找了,如下
- $ ldapsearch -x -b "OU=Linux,dc=CAMPUS,dc=COM" \
- -D "CAMPUS\cc" -w "MYPASS" \
- -h 10.0.0.4 | less
因为我们没有在Linux这个组织单位中添加任何东西,所以我们就只能查到它的TOP目录了(就相当于文件路径中的当前目录了),见图3
等等,貌似我应该对"LDAPSEARCH"这个命令进行一下解释。
- ldapsearch这个命令位于软件包OPENLDAP,可以使用"yum install openldap"进行安装
- "-x"指明进行简单认证,后面的"-D"以及"-w"指明其用户名与密码,说明,"-D"选项指定的用户名可以采用下列2种格式之一,"短域名\用户名","用户名@域名",在WINDOWS系统中,它分别表示NT4格式的登录名以及新版的登录名,最好采用EMAIL格式的登录名进行绑定
- "-h"指明LDAP服务器地址
好了通过同样的方法,我可以找到我们的用户名所在的目录了。
5. 使用WINDOWS LDAP服务器认证LINUX WEB服务
上面我们已经讲了怎样对ACTIVE DIRECTORY中的数据进行查找,那我们怎样将它的数据用于我们伟大的LINUX的认证事业呢,马上揭晓
1)项目目标,根据业务需要我们在CENTOS环境下抢建了一个内部CMS系统,为了避免重复地构建密码数据库以及企业员工反复注册带来的多余工作,现在决定对此CMS实施基本身份认证,其数据源为企业中已部署好的ACTIVE DIRECTORY数据库
2)目标实现
既然要采用LDAP进行认证,我们必须在APACHE中加载mod_authz_ldap.so认证模块然后修改CMS主机的配置文件
$ vi /etc/httpd/conf/httpd.conf
- --------------------------
- DocumentRoot /DATA/www/default
- ServerName: www.CAMPUS.COM
"/DATA/www/default/CMS" >- AuthName Enterprise Member Authentication
- AuthType Basic
- AuthzLDAPMethod ldap
- AuthzLDAPAuthoritative on
- AuthzLDAPServer x.x.x.x:xxx
- AuthzLDAPUserBase OU=SS,DC=CAMPUS,DC=COM
- AuthzLDAPUserScope subtree
- AuthzLDAPUserKey sAMAccountName
- AuthzLDAPBindDN [email protected]
- AuthzLDAPBindPassword xxx
- Require valid-user
- --------------------------
; 说明: 对OU为SS,所在域为CAMPUS.COM的用户提供认证
; 如果要为Users中的对象进行认证,要使用下列命令
; AuthzLDAPUserBase CN=Users,DC=CAMPUS,DC=COM
; AuthzLDAPUserScope subtree
; 如果用户DN为 "CN=xxxx,OU=xxx,DC=CAMPUS,DC=COM" 而你的BASE为 "OU=xxx,DC=CAMPUS,DC=COM"你的"AuthzLDAPUserScope"就该是"subtree"
; BASE的情况是针对一个用户进行认证的情况
;“AuthzLDAPUserBase"选项只能是一个
; 可以使用"net ads search 'SAMACCOUNTNAME=xxx'来确认其DN
; 关于APACHE基本身份认证的的内容请参阅APACHE基本认证的相关内容
现在我们重新APACHE服务
$ service httpd restart
测试
图4、弹出基本认证对话框
图5、认证成功,用户名为CC
6. 参考资料
* LINUX加入域的那些儿
* 将LINUX加入到WINDOWS域
* APACHE基本认证
后记:本文由"冯晓天"于2011年8月21日发表于"51CTO",稍后会提供本文件PDF文档上传,此信息与文章内容为一整体,请不要修改或者删除,打字不容易,写文章更难,谢谢合作。 |