CentOS 7中可能默认提供了openLDAP-server包,本教程是以ALmaLINUX(8.5)部署
1.安装OpenLDAP
由于CentOS8的仓库中取消了对OpenLDAP-server包的支持.这里使用Symas提供的第三方仓库
dnf -y install wget net-tools tar unzip
wget -O /etc/yum.repos.d/openldap.repo https://repo.symas.com/configs/SOFL/rhel8/sofl.repo
2.建立源的缓存
dnf makecache
3.安装openldap
dnf install -y symas-openldap-servers symas-openldap-clients
4.自启动并启动openldap
systemctl enable slapd
systemctl start slapd
5.openLDAP基础
openLDAP中使用slappasswd来生成密码哈希,再将哈希写入配置文件来修改密码
设置OpenLDAP的管理员根密码,此密码用于整个安装过程
slappasswd -s hao12345678
New password:
Re-enter new password:
{SSHA}8FIP/p+sQ5pxECw5bKbHC7WNbnEzpb4+
6.创建chrootpw.ldif文件,写入如下配置(如:vi /tmp/chrootpw.ldif)
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}8FIP/p+sQ5pxECw5bKbHC7WNbnEzpb4+
第一行:执行配置文件,这里表示指定为cn=config/olcDatabase={0}config文件.你可以在/etc/openldap/slapd.d目录下就能找到此文件
第二行 changetype指定类型为修改
第三行 add表示添加olcRootPW配置项
第四行 指定olcRootPW配置项的值
在执行ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif之前,olcDatabase={0}config文件,里面是没有olcRootPW这个项.执行看,再次查看,会发现已经添加有此项
注释:
(1).dn配置文件,这里指定为/etc/openldap/slapd.d/cn=config/olcDatabase={0}config文件
(2).changetype指定类型为 modity,更改
(3).add表示添加 olcRootPW配置项
(4).指定olcRootPW配置荐的值
执行如下命令将配置中的操作动态载入openLDAP服务器
ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
#输出如下内容表示成功
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
7.导入基本schema
openldap server默认提供了一些基本schema位于/etc/openldap/schema目录下,这些schema控制着条目拥有哪些对象类和属性,可以自行选择需要的进入导入,这里将所有schema都导入进入
ls /etc/openldap/schema/*.ldif | xargs -I {} ldapadd -Y EXTERNAL -H ldapi:/// -f {}
8.修改域并创建域管理帐户
使用slappasswd命令为域管理员帐户创建密码,记录哈希
首先要生成经处理后的目录管理者明文密码
创建chdomain.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=mfyxw,dc=com" read
by * none
dn:olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mfyxw,dc=com
dn:olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN:cn=admin,dc=mfyxw,dc=com
dn:olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}8FIP/p+sQ5pxECw5bKbHC7WNbnEzpb4+
dn:olcDatabase={2}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
by dn="cn=admin,dc=mfyxw,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=mfyxw,dc=com" write
by * read
olcSuffix:用于保存域信息,更新为自己的域
olcRootDN: 根的DN(唯一识别名),根的区别名,它用于根管理员在此节点下做所有的管理
olcRootPW: LDAP的管理员的根的密码,刚才执行slappasswd命令生成的加密内容
9.载入修改
ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
#如下是运行成功
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"
modifying entry "olcDatabase={2}mdb,cn=config"
modifying entry "olcDatabase={2}mdb,cn=config"
modifying entry "olcDatabase={2}mdb,cn=config"
modifying entry "olcDatabase={2}mdb,cn=config"
启用memberof模块(开启memberof支持并新增用户支持memberof配置)
这个模块的作用是当你建一个组的时候,把一些用户添加到这个组里去,它会自动给这些用户添加一个memberOf属性,有很多应用需要检查这个属性
10.创建add_memberof.ldif文件并写入如下配置
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}mdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfUniqueNames
olcMemberOfMemberAD: uniqueMember
olcMemberOfMemberOfAD: memberOf
11.创建refint1.ldif文件并写入如下配置
dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint
12.创建refint2.ldif文件并写入如下配置
dn: olcOverlay=refint,olcDatabase={2}mdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayconfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: refint
olcRefintAttribute: memberof uniqueMember manager owner
13.依次执行如下命令
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f add_memberof.ldif
输出结果:adding new entry "cn=module{0},cn=config"
输出结果:adding new entry "olcOverlay={0}memberof,olcDatabase={2}mdb,cn=config"
dapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
输出结果:modifying entry "cn=module{0},cn=config"
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif
输出结果:adding new entry "olcOverlay=refint,olcDatabase={2}mdb,cn=config"
14.创建组织及管理角色
下面来创建一个叫做Maple的组织,并在其下创建一个admin的组织角色(该组织角色内的用户具有管理整个LDAP的权限)和People和Group两个组织单元
创建base.ldif文件并写入如下配置
dn: dc=mfyxw,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: maple
dc: mfyxw
dn: cn=admin,dc=mfyxw,dc=com
objectClass: organizationalRole
cn: admin
dn: ou=People,dc=mfyxw,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=mfyxw,dc=com
objectClass: organizationalRole
cn: Group
载入修改
ldapadd -x -D cn=admin,dc=mfyxw,dc=com -W -f base.ldif
Enter LDAP Password:
adding new entry "dc=mfyxw,dc=com"
adding new entry "cn=admin,dc=mfyxw,dc=com"
adding new entry "ou=People,dc=mfyxw,dc=com"
adding new entry "ou=Group,dc=mfyxw,dc=com"
通过以上的所有步骤,就已经设置好了一个LDAP目录树:其中基准dc=mfyxw,dc=com是该树的根节点,其下有一个管理域cn=admin,dc=mfyxw,dc=com和两个组织单元ou=People,dc=mfyxw,dc=com和ou=Group,dc=mfyxw,dc=com
15.关闭匿名访问
创建disabled_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
载入修改
ldapadd -Y EXTERNAL -H ldapi:/// -f disabled_anon.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
modifying entry "cn=config"
modifying entry "olcDatabase={-1}frontend,cn=config"
通过以上的所有
16.安装phpLDAPadmin
此业务需要增加php-ldap模块支持
使用Remi提供的仓库的php,使用如下命令安装
dnf install -y dnf-utils https://rpms.remirepo.net/enterprise/remi-release-8.rpm
#查询php的版本
dnf module list php -y
#重置php列表
dnf module list reset php -y
#启用php8.1
dnf -y module enable php:remi-7.4
#安装php81-php-ldap
dnf -y install php74-php-ldap
17.添加nginx的源
vi /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
18.安装nginx
dnf makecache && dnf -y install nginx
19.安装php
dnf -y install php74 php74-php-ldap php-fpm php-ldap php-xml php-cli php-common php-devel
修改php-fpm的www.conf文件
vi /etc/php-fpm.d/www.conf
;listen = /run/php-fpm/www.sock
listen = 127.0.0.1:9000
由于CentOS8中默认不提供openLDAP-serers包,phpLDAPadmin包也默认不提供
可以直接在Release- leenooks/phpLDAPadmin上下载release包
phpLDAPadmin的github地址: https://github.com/leenooks/phpLDAPadmin/releases
cd /usr/share/nginx/html && \
wget https://github.com/leenooks/phpLDAPadmin/archive/refs/tags/1.2.6.3.tar.gz
将下载好的包移动到Nginx的web根目录下,解压并重命名为pla
tar xf 1.2.6.3.tar.gz && mv phpLDAPadmin-1.2.6.3 phpLDAPadmin && \
cp phpLDAPadmin/config/config.php.example phpLDAPadmin/config/config.php && \
chown -R nginx.nginx /usr/share/nginx/html
本次配置中使用二级域名mapleldap访问该业务,设置好DNS解析后在Nginx中根据实际情况增加配置
(/etc/nginx/nginx.conf)
server {
listen 443 ssl;
server_name mapleldap.mfyxw.com;
root /usr/share/nginx/html/phpLDAPadmin/htdocs/;
location / {
index index.php;
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param HTTPS on;
include fastcgi_params;
}
}
}
20.启动nginx和php
systemctl enable php-fpm && systemctl start php-fpm && \
systemctl enable nginx && systemctl start nginx
phpLDAPadmin目录下的config目录,将config.php.example复制为config.php
配置DN登录(修改/usr/share/nginx/html/phpLDAPadmin/config/config.php)
默认使用UID或DN登录,修改为cn
$servers->setValue('login','attr','cn');
关闭匿名
$servers->setValue('login','anon_bind',false);
设置用户属性的唯一性,这里使用了cn和sn,以确保用户名的唯一性
$servers->setValue('unique','attrs',array('mail','uid','uidNumber','cn','sn'));
去除警告信息
$config->custom->appearance['hide_template_warning'] = true;
服务验证
执行命令,查看是否安装成功
[root@servertest tmp]# ldapsearch -H ldap://192.168.80.33:389 -w H@oskksk7777 -D "cn=admin,dc=mfyxw,dc=com" -b "dc=mfyxw,dc=com"
#或者使用下面命令,会提示输入密码
[root@servertest tmp]#ldapsearch -H ldap://192.168.80.33:389 -W -D "cn=admin,dc=mfyxw,dc=com" -b "dc=mfyxw,dc=com"
# extended LDIF
#
# LDAPv3
# base <dc=mfyxw,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# mfyxw.com
dn: dc=mfyxw,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Maple Company
dc: mfyxw
# admin, mfyxw.com
dn: cn=admin,dc=mfyxw,dc=com
objectClass: organizationalRole
cn: admin
# People, mfyxw.com
dn: ou=People,dc=mfyxw,dc=com
objectClass: organizationalUnit
ou: People
# Group, mfyxw.com
dn: ou=Group,dc=mfyxw,dc=com
objectClass: organizationalRole
cn: Group
ou: Group
# search result
search: 2
result: 0 Success
# numResponses: 5
# numEntries: 4
-H | 执行主机IP及端口 |
-w | 绑定DN的密码 |
-D | 所绑定的服务器的DN |
-b | 指定搜索起始点 |
附上忘记管理员密码修改方法
生成管理员密码
slappasswd -s H@oskksk7777
{SSHA}r+OePPYRhIopx6qw1WNC1bQ3gCzi8E1h
创建修改管理员根密码文件: changerootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}r+OePPYRhIopx6qw1WNC1bQ3gCzi8E1h
运行如下命令修改管理员根密码
[root@servertest tmp]# ldapadd -Y EXTERNAL -H ldapi:/// -f changepwd.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
创建域管理员密码文件changedomain.ldif
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}0ainWmcTshqjOR8nyNyhknYChWBfcHxp
运行如下命令修改域管理员密码
[root@servertest tmp]# ldapmodify -Y EXTERNAL -H ldapi:/// -f chandomainpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}mdb,cn=config"
为LDAP用户设置密码
ldappasswd -H ldapi:/// -Y EXTERNAL -S "cn=maple,ou=people,dc=mfyxw,dc=com"
查看ldap版本号及检测
slapd -VV
slaptest -u
加载日志模块
创建日志模块文件 loglevel.ldif
dn: cn=config
changetype: modify
replace: olclogLevel
olcLogLevel: stats
运行如下命令添加日志
[root@servertest tmp]# ldapmodify -Y EXTERNAL -H ldapi:/// -f loglevel.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
配置rsyslog.conf
cat <<EOF> /etc/rsyslog.conf
local4.* /var/log/slapd.log
EOF
创建日志文件并授权
touch /var/log/slapd.log
chown ldap.ldap /var/log/slapd.log
重启rsyslog
systemctl restart rsyslog