centos 7 安装 openldap

centos 7 安装 openldap

openldap 相关名称解释及CentOS 7 配置openldap过程。

ldap的信息模型

LDAP的信息模型是建立在”条目”(entries)的基础上。一个条目是一些属性的集合,并且具有一个全局唯一的”可区分名称”DN,一个条目可以通过DN来引用。每一个条目的属性具有一个类型和一个或者多个值。类型通常是容易记忆的名称,比如”cn”是通用名称(common name) ,或者”mail”是电子邮件地址。条目的值的语法取决于属性类型。比如,cn属性可能具有一个值”Babs Jensen” 。一个mail属性可能包含”Babs@abc.com“ 。一个jpegphoto属性可能包含一幅JPEG(二进制)格式的图片。

ldap的objectClass

LDAP通过属性objectClass来控制哪一个属性必须出现或允许出现在一个条目中,它的值决定了该条目必须遵守的模式规则,可以理解为关系数据库的表结构。

objectClasss 含义
olcGlobal 全局配置文件类型,主要是cn=config.ldif的配置基
top 顶层对象
organzationa 组织,比如公司名称,顶层对象
organizationalUnit 重要,一个目录节点,通常中group,或者部门这样的含义
inetOrgPerson 重要,我们真正的用户节点为类型,person类型,叶子节点
groupOfNames 重要,分组的group类型,标记一个group节点
olcModuleList 配置块的对象

ldap常用关键字列表

ldap的entry是由名种字段构成,可以理解为关系数据库的字段。

关键字 英文全称 含义
dc Domain Component 域名的部分,其格式是将完整域名分成几部分,如域名example.com变成dc=example,dc=com
uid User Id 用户名,如“tom”
ou Organization Unit 组织单位,类似Linux文件系统中的子目录,它是一个窗口对象,组织单位可以包含其它各类对象
cn Common Name 公共名称,如”Thomas Johansson”
sn surname 姓,如“Johansson”
dn Distinguished Name 惟一辨识名,类似Linux文件系统中的绝对路径,每个对象都有一个惟一的名称,如”uid=tom,ou=market,dc=example,dc=com”,在一个目录树中DN是惟一的。
rdn Relative dn 相对辨识名,类似于文件系统中的相对路径,它是与目录树结构无关的部分,如“uid=tom”或”cn=Thomas Johansson”
c Country 国家,如“CN”或“US”等
o Organization 组织名,如“Example,Inc.”

centos 7 安装 openldap

在centos 7中使用yum安装openldap,并安装phpldapadmin管理工具。

安装openldap

yum安装openldap。

1
yum install openldap openldap-clients openldap-servers migrationtools

配置openldap

配置前的准备工作:

  • 关闭selinux

    1
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
  • 复制数据库模版

    1
    2
    cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
    chown -R ldap. /var/lib/ldap/DB_CONFIG
  • 启动slapd服务

    1
    2
    systemctl start slapd
    systemctl enable slapd # 开启加载服务

    如果启动失败,一般提示证书关相,可以如下操作:

    1
    2
    3
    4
    5
    6
    7
    cd /etc/openldap/cert
    rm ./*
    # 重新生成证书
    bash /usr/libexec/openldap/create-certdb.sh
    bash /usr/libexec/openldap/generate-server-cert.sh
    # 再次重启
    systemctl start slapd

    启动失败的第二个问题,hostname,手动添加/etc/hosts一行记录,主机IP+主机名即可。

  • 防火墙放通openldap服务

    1
    2
    firewall-cmd --permanent --add-service=ldap
    firewall-cmd --complete-reload

生成密码

使用slappasswd生成密码:

1
2
slappasswd -s your_passwd
{SSHA}m0EtqWHBpXh0O88k8+FpNx6L5doX2jVe

记住生成的密码。

新增修改密码文件

可以在家目录下创建一个目录ldif,创建ldif文件操作。示例如下:

1
2
3
4
5
vim changepwd.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}m0EtqWHBpXh0O88k8+FpNx6L5doX2jVe

以上ldif文件的内容解释如下:

  • 第一行执行配置文件,这里表示指定cn=config/olcDatabases={0}config文件。
  • 第二行changetype指定类型为修改。
  • 第三行add表示添加olcRootPW配置项。
  • 第四行指定olcRootPW配置项的值。
    默认的olcDatabase={0}config文件,里面没有olcRootPW项,执行后,会新增olcRootPW项,内容为文件中指定的加密后的字条串。

执行导入命令,修改ldap配置文件,通过-f执行文件。

1
ldapadd -Y EXTERNAL -H ldapi:/// -f changepwd.ldif

导入schema文件

这些schema文件位于/etc/openldap/schema/目录中,schema控制着条目拥有哪些对象、类型和属性,可以自行选择需要的进行导入。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ldapadd -Y EXTERNAL -H ldapi:/// -f channgepwd.ldif 
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/core.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif

修改域名

添加一个域名文件,编辑自己的域名信息,管理员为admin。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
vim changedomain.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=admin,dc=example,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=example,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}m0EtqWHBpXh0O88k8+FpNx6L5doX2jVe

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by read
olcAccess: {2}to * by dn="cn=admin,dc=example,dc=com" write by * read

导入域名ldif文件。

1
ldapmodify -Y EXTERNAL -H ldapi:/// -f changedomain.ldif

启动memberof功能

添加add-memberof.ldif文件,并导入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dn: cn=module{0},cn=config
cn: module{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

添加refint1.ldif文件

1
2
3
4
vim refint1.ldif
dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint

添加refint2.ldif文件

1
2
3
4
5
6
7
dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: refint
olcRefintAttribute: memberof uniqueMember manager owner

依次导入创建的ldif文件。

1
2
3
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f add-memberof.ldif
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif

创建组织,创建admin角色

创建base.ldif文件,并导入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: example com
dc: example

dn: cn=admin,dc=example,dc=com
objectClass: organizationalRole
cn: admin

dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=example,dc=com
objectClass: organizationalRole
cn: Group

执行密码,添加配置项,导入输入配置的密码。

1
ldapadd -x -D cn=admin,dc=example,dc=com -W -f base.ldif

安装ldapadmin

ldap安装好后,可以安装web管理界面phpldapadmin。centos 7 默认的源中是php5。如果是php7,会有报错。

1
yum install phpldapadmin

更改httpd配置

修改apache的phpldapadmin文件,配置外网访问。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
vim /etc/httpd/conf.d/phpldapadmin.conf
# 配置示例,更改Require行。
#
# Web-based tool for managing LDAP servers
#

Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs

<Directory /usr/share/phpldapadmin/htdocs>
<IfModule mod_authz_core.c>
# Apache 2.4
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory>

修改配置用DN登录phpldapadmin

修改配置行示例如下:

1
2
3
4
5
6
7
8
9
10
11
vim /etc/phpldapadmin/config.php
--------------------------------
# 398行,默认使用uid登录,改用cn
// $servers->setValue('login','attr','dn');
$servers->setValue('login','attr','cn');
# 460行,关闭匿名登录。
/* Enable anonymous bind login. */
$servers->setValue('login','anon_bind',false);
# 519行,设置用户属性的唯一性。
occur with other attributes have the same value. */
$servers->setValue('unique','attrs',array('mail','uid','uidNumber','cn','sn'));

启动apache

启动httpd和设置自启动。

1
2
3
4
5
6
systemctl start httpd
systemctl enable httpd
# 防火墙放通httpd
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --complete-reload

登录phpldapadmin

使用浏览器访问http://server_ip/phpldapadmin。即可。打开后登录测试。


centos 7 安装 openldap
https://ywmy.xyz/2022/04/30/centos-7-安装-openldap/
作者
ian
发布于
2022年4月30日
许可协议