OpenLDAP使用指南
一、OpenLDAP部署及配置
通过yum安装
yum install openldap openldap-servers openldap-clients openldap-devel compat-openldap -y
#已测试版本号:openldap-2.4.44-24.el7_9.x86_64拷贝数据库模板
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG修改目录属主
chown -R ldap.ldap /etc/openldap && chown -R ldap.ldap /var/lib/ldap启动LDAP服务 & 开机启动
systemctl start slapd && systemctl enable slapd将所有schema导入
ls /etc/openldap/schema/*.ldif | while read f; do ldapadd -Y EXTERNAL -H ldapi:/// -f $f; done生成密文密码
slappasswd -s <密码>
{SSHA}9313evuK6fgnD0BAF28hJ7f9cqKGoWOu新增olcRootPW属性
vim add_passwd.ldif
文件内容
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}9313evuK6fgnD0BAF28hJ7f9cqKGoWOu
#应用ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f add_passwd.ldif查看root密码
ldapsearch -H ldapi:// -LLL -Q -Y EXTERNAL -b "cn=config" "(olcRootDN=*)" dn olcRootDN olcRootPW创建domain ldif文件
vim domain.ldif
#文件内容
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=domain,dc=com" read by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=domain,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=domain,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}9313evuK6fgnD0BAF28hJ7f9cqKGoWOu
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=domain,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=domain,dc=com" write by * read
#应用ldif文件
ldapmodify -Y EXTERNAL -H ldapi:/// -f domain.ldif创建域的配置属性
vim base_domain.ldif
#文件内容
dn: dc=domain,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: domain com
dc: domain
dn: cn=Manager,dc=domain,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager
dn: ou=People,dc=domain,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=domain,dc=com
objectClass: organizationalUnit
ou: Group
#应用ldif文件
ldapadd -x -D cn=Manager,dc=domain,dc=com -W -f base_domain.ldif
#输入密码后执行验证是否成功
ldapsearch -LLL -W -x -D "cn=Manager,dc=domain,dc=com" -H ldap://localhost -b "dc=domain,dc=com"禁止匿名登录
vim disable_anon.ldif
#文件内容
dn: cn=config
changetype: modify
add: olcDisallows
olcDisallows: bind_anon
dn: cn=config
changetype: modify
add: olcRequires
olcRequires: authc
dn: olcDatabase={-1}frontend,cn=config
changetype: modify
add: olcRequires
olcRequires: authc
#应用ldif文件
ldapadd -Y EXTERNAL -H ldapi:/// -f disable_anon.ldif二、通过phpldapadmin进行管理
安装phpldapadmin
yum install epel-release -y && yum install phpldapadmin -yphpldapadmin配置文件
vim /usr/share/phpldapadmin/config/config.php
#这里默认为使用uid登录,修改为dn登录,取消配置文件中的注释即可。
$servers->setValue('login','attr','dn');
//$servers->setValue('login','attr','uid');
#设置中文语言
$config->custom->appearance['language'] = 'zh_CN'
将此配置添加到配置文件的最后即可。
#此配置文件内可以修改监听端口等参数修改apache的phpldapadmin.conf配置文件
#(默认配置文件只允许local访问)
vim /etc/httpd/conf.d/phpldapadmin.conf
将 Require local 修改为>> Require all granted启动apache服务 & 开机启动
systemctl start httpd && systemctl enable httpd访问phpldapadmin
http://ip/phpldapadmin登录名:cn=Manager,dc=ywngo,dc=com密码:**********三、使用SLDAP(SSL证书加密)
(建设中...)
四、启用MemberOf属性
4.1 创建memberof_conf.ldif文件
cat > memberof_conf.ldif<<EOF
dn: cn=module{0},cn=config
cn: modulle{0}
objectClass: olcModuleList
objectclass: top
olcModuleload: memberof.la
olcModulePath: /usr/lib64/openldap
dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfUniqueNames
olcMemberOfMemberAD: uniqueMember
olcMemberOfMemberOfAD: memberOf
EOF4.2 创建refint1.ldif文件
cat > refint1.ldif <<EOF
dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint
EOF4.3 创建refint2.ldif文件
cat > refint2.ldif << EOF
dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: refint
olcRefintAttribute: memberof uniqueMember manager owner
EOF4.4 导入配置文件
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberof_conf.ldif
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif4.5 验证
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn | grep olcOverlay
#输出内容:
dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
dn: olcOverlay={1}refint,olcDatabase={2}hdb,cn=config
#有第二行表示成功。只有一行则未添加。五、LDAP基本概念
OpenLDAP是一款轻量级目录访问协议(Lightweight DirectoryAccess Protocol,LDAP),属于开源集中账号管理架构的实现。
OpenLDAP默认以Berkeley DB作为后端数据库。
OpenLDAP目录中的信息是按照树形结构进行组织的。
目前OpenLDAP目录架构分为两种:一种为互联网命名组织架构;另一种为企业级命名组织架构。
版本差异
OpenLDAP的2.3以上版本,使用slapd-config来配置slapd。老版本中的slapd.conf文件即将被弃用。slapd-config也是树形结构的,配置树的根是cn=config。在OpenLDAP2.4版本中,配置OpenLDAP的方法有两种:一种通过修改配置文件实现配置,另一种通过修改数据库的形式完成配置。
端口
默认slapd进程使用TCP协议,默认使用的端口为389(通过SSL协议加密后,slapd进程使用663端口)。
schema
schema是OpenLDAP软件的重要组成部分,主要用于控制目录树中各种条目所拥有的对象类以及各种属性的定义,并通过自身内部规范机制限定目录树条目所遵循的逻辑结构以及定义规范,保证整个目录树没有非法条目数据,避免不合法的条目存在目录树中,从而保障整个目录树信息的完整性、唯一性。
LDIF文件
LDIF(LDAP Data Interchanged Format)文件是“轻量级目录访问协议数据交换格式”,用于存储LDAP配置信息及目录内容的标准文件格式。LDIF文件用于交换数据还可以实现数据的导入、导出、数据修改等。
LDIF文件的注意事项:
1.每行的结尾不允许有空格或制表符。
2.允许相关属性可以重复赋值并使用。
3.以#号开头的行为注释。
4.所有赋值方式为:属性:[空格]值。
5.各个条目之间要空一行,以作分隔。LDIF文件存取OpenLDAP条目标准格式如下
#注释,用于对条目进行解释
dn:条目名称
objectClass(对象类): 值
objectClass(对象类): 值对象标识符在LDAP内部数据库引用的数字标识。
缩写解释
| 序号 | 缩写 | 名称 | 作用 | 示例 |
|---|---|---|---|---|
| 1 | DC | 域名称 | 一条记录的所属域, | 格式是将一条完整的记录分为几部分。例如:google.com - dc=google,dc=com |
| 2 | UID | 用户ID | 一条记录的ID,每个uid是唯一的 | |
| 3 | OU | 组织单位 | 一条记录的所属组织 | 一个组织单位可以包含其它各种对象,包括其它组织单元。 |
| 4 | CN | 公共名称 | 一条记录的名称 | 例如:Thomas Johansson |
| 5 | SN | 姓 | 一个人的姓 | |
| 6 | DN | 一条记录的路径 | 这是一个地址、一条记录的路径 | |
| 7 | RDN | 相对域名解析 | 类似系统内的相对路径,对目录树结构无关。 | 例如:uid=tom 或 cn=Thomas Johansson |
建立组织架构
DC是根,代表组织例如公司。
1.建立部门OU
建立一个OU可以专门用来保存部门分组,在这个OU下面建立 Generic: Posix Group组,可以用多个部门来命名,PG有一个GID参数,用于在后面建立个人用户的时候,将用户归属到某个部门。
2.建立用户OU
建立一个用户OU,OU可以根据部门划分建立多个,然后开始建立个人用户Generic: User Account,个人用户可以设置姓名、密码,所属组。