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 slapdsystemctl start slapd
5.openLDAP根本
openLDAP中利用slappasswd来天生密码哈希,再将哈希写入配置文件来修正密码
设置OpenLDAP的管理员根密码,此密码用于全体安装过程
slappasswd -s hao12345678New password: Re-enter new password: {SSHA}8FIP/p+sQ5pxECw5bKbHC7WNbnEzpb4+
6.创建chrootpw.ldif文件,写入如下配置(如:vi /tmp/chrootpw.ldif)
dn: olcDatabase={0}config,cn=configchangetype: modifyadd: olcRootPWolcRootPW: {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 startedSASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=authSASL SSF: 0modifying 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=configchangetype: modifyreplace: olcAccessolcAccess: {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 nonedn:olcDatabase={2}mdb,cn=configchangetype: modifyreplace: olcSuffixolcSuffix: dc=mfyxw,dc=comdn:olcDatabase={2}mdb,cn=configchangetype: modifyreplace: olcRootDNolcRootDN:cn=admin,dc=mfyxw,dc=comdn:olcDatabase={2}mdb,cn=configchangetype: modifyreplace: olcRootPWolcRootPW: {SSHA}8FIP/p+sQ5pxECw5bKbHC7WNbnEzpb4+dn:olcDatabase={2}mdb,cn=configchangetype: modifyadd: olcAccessolcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=mfyxw,dc=com" write by anonymous auth by self write by noneolcAccess: {1}to dn.base="" by readolcAccess: {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 startedSASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=authSASL SSF: 0modifying 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=configcn: modulle{0}objectClass: olcModuleListobjectclass: topolcModuleload: memberof.laolcModulePath: /usr/lib64/openldapdn: olcOverlay={0}memberof,olcDatabase={2}mdb,cn=configobjectClass: olcConfigobjectClass: olcMemberOfobjectClass: olcOverlayConfigobjectClass: topolcOverlay: memberofolcMemberOfDangling: ignoreolcMemberOfRefInt: TRUEolcMemberOfGroupOC: groupOfUniqueNamesolcMemberOfMemberAD: uniqueMemberolcMemberOfMemberOfAD: memberOf
11.创建refint1.ldif文件并写入如下配置
dn: cn=module{0},cn=configadd: olcmoduleloadolcmoduleload: refint
12.创建refint2.ldif文件并写入如下配置
dn: olcOverlay=refint,olcDatabase={2}mdb,cn=configobjectClass: olcConfigobjectClass: olcOverlayconfigobjectClass: olcRefintConfigobjectClass: topolcOverlay: refintolcRefintAttribute: 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=comobjectClass: topobjectClass: dcObjectobjectClass: organizationo: mapledc: mfyxwdn: cn=admin,dc=mfyxw,dc=comobjectClass: organizationalRolecn: admindn: ou=People,dc=mfyxw,dc=comobjectClass: organizationalUnitou: Peopledn: ou=Group,dc=mfyxw,dc=comobjectClass: organizationalRolecn: Group
载入修正
ldapadd -x -D cn=admin,dc=mfyxw,dc=com -W -f base.ldifEnter 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=configchangetype: modifyadd: olcDisallowsolcDisallows: bind_anondn: cn=configchangetype: modifyadd: olcRequiresolcRequires: authcdn: olcDatabase={-1}frontend,cn=configchangetype:modifyadd: olcRequiresolcRequires: authc
载入修正
ldapadd -Y EXTERNAL -H ldapi:/// -f disabled_anon.ldifSASL/EXTERNAL authentication startedSASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=authSASL SSF: 0modifying 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-ldapdnf -y install php74-php-ldap
17.添加nginx的源
vi /etc/yum.repos.d/nginx.repo
[nginx-stable]name=nginx stable repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=1enabled=1gpgkey=https://nginx.org/keys/nginx_signing.keymodule_hotfixes=true[nginx-mainline]name=nginx mainline repobaseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/gpgcheck=1enabled=0gpgkey=https://nginx.org/keys/nginx_signing.keymodule_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.socklisten = 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.comdn: dc=mfyxw,dc=comobjectClass: topobjectClass: dcObjectobjectClass: organizationo: Maple Companydc: mfyxw# admin, mfyxw.comdn: cn=admin,dc=mfyxw,dc=comobjectClass: organizationalRolecn: admin# People, mfyxw.comdn: ou=People,dc=mfyxw,dc=comobjectClass: organizationalUnitou: People# Group, mfyxw.comdn: ou=Group,dc=mfyxw,dc=comobjectClass: organizationalRolecn: Groupou: Group# search resultsearch: 2result: 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=configchangetype: modifyreplace: olcRootPWolcRootPW: {SSHA}r+OePPYRhIopx6qw1WNC1bQ3gCzi8E1h
运行如下命令修正管理员根密码
[root@servertest tmp]# ldapadd -Y EXTERNAL -H ldapi:/// -f changepwd.ldifSASL/EXTERNAL authentication startedSASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=authSASL SSF: 0modifying entry "olcDatabase={0}config,cn=config"
创建域管理员密码文件changedomain.ldif
dn: olcDatabase={2}mdb,cn=configchangetype: modifyreplace: olcRootPWolcRootPW: {SSHA}0ainWmcTshqjOR8nyNyhknYChWBfcHxp
运行如下命令修正域管理员密码
[root@servertest tmp]# ldapmodify -Y EXTERNAL -H ldapi:/// -f chandomainpw.ldif SASL/EXTERNAL authentication startedSASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=authSASL SSF: 0modifying entry "olcDatabase={2}mdb,cn=config"
为LDAP用户设置密码
ldappasswd -H ldapi:/// -Y EXTERNAL -S "cn=maple,ou=people,dc=mfyxw,dc=com"
查看ldap版本号及检测
slapd -VVslaptest -u
加载日志模块
创建日志模块文件 loglevel.ldif
dn: cn=configchangetype: modifyreplace: olclogLevelolcLogLevel: stats
运行如下命令添加日志
[root@servertest tmp]# ldapmodify -Y EXTERNAL -H ldapi:/// -f loglevel.ldifSASL/EXTERNAL authentication startedSASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=authSASL SSF: 0modifying entry "cn=config"
配置rsyslog.conf
cat <<EOF> /etc/rsyslog.conflocal4. /var/log/slapd.logEOF
创建日志文件并授权
touch /var/log/slapd.logchown ldap.ldap /var/log/slapd.log
重启rsyslog
systemctl restart rsyslog