LDAP服务
基本概念
Openldap 官方入口 ===》 OpenLDAP Software 2.6 Administrator’s Guide
LDAP定义
LDAP是轻量目录访问协议,英文全称是LIGHTWEIGHT DIRECTORY ACCESS PROTOCOL,一般都简称为LDAP。
读写效率非常高: 对读操作进行优化的一种数据库,在读写比例大于7比1的情况下,LDAP会体现出极高的性能。这个特性正适合了身份认证的需要。
开放的标准协议: 不同于SQL数据库,LDAP的客户端是跨平台的,并且对几乎所有的程序语言都有标准的API接口。即使是改变了LDAP数据库产品的提供厂商,开发人员也不用担心需要修改程序才能适应新的数据库产品。这个优势是使用SQL语言进行查询的关系型数据库难以达到的。
强认证方式:可以达到很高的安全级别。在国际化方面,LDAP使用了UTF-8编码来存储各种语言的字符。
OpenLDAP开源实现: OpenLDAP还包含了很多有创造性的新功能,能满足大多数使用者的要求。OpenLDAP是其中最轻便且消耗系统资源最少的一个。OpenLDAP是开源软件,近年国内很多公司开发的LDAP产品都是基于OpenLDAP开发的。
灵活添加数据类型:LDAP是根据schema的内容定义各种属性之间的从属关系及匹配模式的。例如在关系型数据库中如果要为用户增加一个属性,就要在用户表中增加一个字段,在拥有庞大数量用户的情况下是十分困难的,需要改变表结构。但LDAP只需要在schema中加入新的属性,不会由于用户的属性增多而影响查询性能。
数据存储是树结构:整棵树的任何一个分支都可以单独放在一个服务器中进行分布式管理,不仅有利于做服务器的负载均衡,还方便了跨地域的服务器部署。这个优势在查询负载大或企业在不同地域都设有分公司的时候体现尤为明显。
LDAP的特点
1.LDAP 是一种网络协议而不是数据库,而且LDAP的目录不是关系型的,没有RDBMS那么复杂,
2.LDAP不支持数据库的Transaction机制,纯粹的无状态、请求-响应的工作模式。
3.LDAP不能存储BLOB,LDAP的读写操作是非对称的,读非常方便,写比较麻烦,
4.LDAP支持复杂的查询过滤器(filter),可以完成很多类似数据库的查询功能。
5.LDAP使用树状结构,接近于公司组织结构、文件目录结构、域名结构等我们耳熟能详的东东。 LDAP使用简单、接口标准,并支持SSL访问。
LDAP的主要应用场景
1.网络服务:DNS服务
2.统一认证服务:
3.Linux PAM (ssh, login, cvs. . . )
4.Apache访问控制
5.各种服务登录(ftpd, php based, perl based, python based. . . )
6.个人信息类,如地址簿
7.服务器信息,如帐号管理、邮件服务等
产品
LDAP从下面厂商获得广泛支持:
Apache(通过Apache目录服务器)
Apple(通过Open Directory)
AT&T
Banyan
HP
IBM/Lotus
ISODE(通过M-Vault server)
Microsoft(通过Active Directory)
Netscape(现在是Sun Microsystems和Red Hat的产品)
Novell(通过eDirectory)
OctetString(通过VDE服务器)
Oracle(通过Oracle Internet Directory)
Red Hat(通过Fedora目录服务器)
西门子公司(通过DirX服务器)
Sun(通过iPlanet目录服务器)
此外还有开源/自由软件的实现——如OpenLDAPApache HTTP Server使用代理服务器(通过模块mod_proxy)支持LDAP。
ldap的信息模型
LDAP的信息模型是建立在"条目"(entries)的基础上。一个条目是一些属性的集合,并且具有一个全局唯一的"可区分名称"DN,一个条目可以通过DN来引用。每一个条目的属性具有一个类型和一个或者多个值。类型通常是容易记忆的名称,比如"cn"是通用名称(common name) ,或者"mail"是电子邮件地址。条目的值的语法取决于属性类型。比如,cn属性可能具有一个值"Babs Jensen" 。一个mail属性可能包含"bbs@kevin.com" 。一个jpegphoto属性可能包含一幅JPEG(二进制)格式的图片。
LDAP的objectClass
LDAP通过属性objectClass来控制哪一个属性必须出现或允许出现在一个条目中,它的值决定了该条目必须遵守的模式规则。可以理解为关系数据库的表结构。接下来会用到的objectClass有
LDAP常用关键字列表
ldap的entry是由各种字段构成,可以理解为关系数据库的字段。
这里,我们把dn当做用户唯一主键, cn是common name,应该等同于用户名,因为用户名必须唯一,通常为邮箱前缀,比如ryan.miao. sn作为姓氏, uid作为用户id。通常用户id也是唯一的。所以在使用ldap做认证的时候,大概逻辑如下:
- 配置ldap host, admin, admin pass
- 用户登录时传递username
- 读取配置的ldap信息,查询cn或者uid等于username的数据
- 取出第一个记录, 获得dn,根据dn和password再次去ldap服务器认证。即我们必须保证cn或uid是全局唯一的,认证通常需要进行两次。原因就在于dn没办法根据用户名计算出来。
LDAP用户组织模型
OpenLDAP部署
OpenLDAP服务端
OpenLDAP客户端配置
验证
getent group
getent passwd
id
ldap命令
ldap主要命令有ldapadd, ldapmodify, ldapsearch. 我们用到的操作项有
//ldap密码加密
[root@sysadmin slapd.d]# slappasswd -s 123456
{SSHA}L7+DyjMa7U7XOU/V0euIKa1ef+xBoLf9
//搜索信息
ldapsearch -LL -Y EXTERNAL -H ldapi:/// -b dc=test,dc=com
//添加用户,组信息
ldapadd -x -D 'cn=admin,dc=test,dc=com' -W -f test.ldif
//修改信息交互式
ldapmodify -a -H ldap://192.168.3.50:389 -D "cn=admin,dc=test,dc=com" -w 123456
//删除用户或者组
ldapdelete -x -H ldap://192.168.3.50:389 -D "cn=admin,dc=test,dc=com" -w 123456 "uid=admin,ou=People,dc=test,dc=com"
ldapdelete -x -H ldap://192.168.3.50:389 -D "cn=admin,dc=test,dc=com" -w 123456 "cn=testgroup,ou=Group,dc=test,dc=com"
ldapdelete -x -H ldap://192.168.3.50:389 -D "cn=admin,dc=test,dc=com" -w 123456 "cn=osadmin,ou=Group,dc=test,dc=com"
管理工具
Ldapadmin
Download link ===⇒ 访问LDAP Admin官网下载