(一)环境信息
1,系统环境
2,域信息(本章节使用)
(二)应用部署
1,ladp部署
1、 yum方式安装OpenLDAP服务
2、拷贝数据库配置配置文件,并启动服务
3、slappasswd生成OpenLDAP管理员密码
4、导入基本的模式
5、在OpenLDAP DB上配置域信息
2,安装phpLDAPadmin实现通过Web管理LDAP服务
1,部署httpd
2,部署php应用
3,部署phpldapadmin(LDAP的web管理平台)
4,测试访问http://ip:port/ldapadmin
5,使用dn账户登录(dn=admin,dc=test,dc=cn)
6,对象信息说明
7,创建组和用户模板
8,导出域中全部信息
(三)附上脚本,仅适合初始搭建使用!!!!
1,脚本内容
2,搭建ldap自助修改密码系统Self Service Password
3,注意事项
(四)docker-compose启动Ldap+web管理+自助密码修改
END:参考文章
(一)环境信息
1,系统环境
项目Value
OScentos
CPU,MEM1核1G
DISK40G
2,域信息(本章节使用)
注意:以下内容均自定义。

项目Value
DNcn=admin,dc=test,dc=cn
CNadmin
DCtest
DCcn
(二)应用部署
1,ladp部署
1、 yum方式安装OpenLDAP服务
yum -y install openldap-servers openldap-clients
1
2、拷贝数据库配置配置文件,并启动服务
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap. /var/lib/ldap/DB_CONFIG
systemctl start slapd
systemctl enable slapd

3、slappasswd生成OpenLDAP管理员密码
注意:OpenLDAP管理员密码,记录下来(后边有个管理员密码,两者的区别个人并没有没有去了解)

slappasswd


vim chrootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}+YIJ4gVMNx+8OlYYYbjFtCvTZTfzisjO

ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif


4、导入基本的模式
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
5、在OpenLDAP DB上配置域信息
注意:版本不同会遇到数据文件名的数字不是2的

使用slappasswd 生成管理员的密码(上文提到的管理员密码,大概是域的账户密码,个人理解)

slappasswd


vim 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=test,dc=cn" read by * none

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

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

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}IMDL0ohcloXXLulIlGDhub62cvtwwzWw

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess

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

注意:创建初始目录结构(个人理解),这个需要命令行创建

vim basedomain.ldif
1
dn: dc=test,dc=cn
objectClass: top
objectClass: dcObject
objectclass: organization
o: Test Cloud
dc: test

dn: cn=admin,dc=test,dc=cn
objectClass: organizationalRole
cn: admin
description: Directory Manager

dn: ou=People,dc=test,dc=cn
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=test,dc=cn
objectClass: organizationalUnit
ou: Group


ldapadd -x -D cn=admin,dc=test,dc=cn -W -f basedomain.ldif
1
注意:输入Manager的密码(上文提到的第二个)

2,安装phpLDAPadmin实现通过Web管理LDAP服务
1,部署httpd
yum install -y httpd
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf_bak
vim /etc/httpd/conf/httpd.conf
#95行下面加一行(95gg),指定地址(域名/ip)及端口
95 #ServerName www.example.com:80
96 ServerName www.walkingcloud.cn
#在151行处改为
AllowOverride All
#164行处改为
DirectoryIndex index.html index.php index.cgi
#在最下面添加如下两行
ServerTokens Prod
KeepAlive On


systemctl start httpd
systemctl enable httpd.service

2,部署php应用
yum install php php-mbstring php-pear
systemctl restart httpd

3,部署phpldapadmin(LDAP的web管理平台)
yum --enablerepo=epel -y install phpldapadmin
vim /etc/phpldapadmin/config.php
注意:397行取消注释,398行注释掉

397 $servers->setValue('login','attr','dn');
398 //$servers->setValue('login','attr','uid');

vim /etc/httpd/conf.d/phpldapadmin.conf
#
# 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 local
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
#Deny from all
Allow from all
#Allow from 127.0.0.1
Allow from ::1
</IfModule>
</Directory>


注意:遇到以下报错
You don’t have permission to access /ldapadmin on this server
可以通过修改httpd配置文件 httpd.conf。

vim /etc/httpd/conf/httpd.conf
1
修改前

<Directory />
AllowOverride none
Require all denied
</Directory>

修改后:

<Directory />
Options Indexes FollowSymLinks
AllowOverride None
</Directory>

4,测试访问http://ip:port/ldapadmin


5,使用dn账户登录(dn=admin,dc=test,dc=cn)


6,对象信息说明
更多请参考ldap objectclass - Fuzengjie - 博客园

objectClass: 描述了实体所表现的对象类型。objectClass存在于任意实体中,并且至少包含两个属性值,其中的一个值必须是 top
aliasedObjectName: 如果包含这个属性的实体是 alias 的话,那么目录服务就使用 aliasedObjectName
cn: X.500 的 commonName 属性。包含一个对象的名字,如果对象是 person 的时候, cn 经常代表用户的全名
sn: 是 X.500 的 surname 属性,保存了 person 的 family name 。
serialNumber: 保存了 一个设备的序列号
c: 保存了 一个两位数字的 ISO 国家代码 (countryName)
l: 保存了 地域名称,例如城市,乡镇或者其他的地理区域 (localityName)
st: 保存了 州或者省的全名 (stateOrProvinceName)
street: 保存了 实体对应的对象的物理地址,例如包裹的邮寄地址。 (streetAddress)
o: 保存了 组织的名字。 (organizationName)
ou: 保存了 组织单元的名称 (organizationalUnitName)
description: 保存了 对象的一个易于理解的 描述。

7,创建组和用户模板
ldapadd -x -D 'cn=admin,dc=test,dc=cn' -f READAFA.ldif -H ldap://localhost -w <password>
1
# yunwei, GROUP, test.cn
dn: cn=yunwei,ou=GROUP,dc=test,dc=cn
cn: yunwei
gidNumber: 500
objectClass: posixGroup
objectClass: top

# yangyang, yunwei, GROUP, test.cn
dn: cn=yangyang,cn=yunwei,ou=GROUP,dc=test,dc=cn
givenName: yang
sn: yang
uid: yangyang
homeDirectory: /home/users/yangyang
loginShell: /usr/sbin/nologin
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
uidNumber: 1001
gidNumber: 500
cn: yangyang
userPassword:: MTIzNDU2

8,导出域中全部信息
ldapsearch -D 用于验证的binddb -w '对应密码' -H ldap://localhost (-p ldap服务器端口 -h ldap服务器地址) -b 'dc=test,dc=cn' "ou=*或者ou=Group(可添加过滤条件精确匹配)"
1
(三)附上脚本,仅适合初始搭建使用!!!!
1,脚本内容
注意:初始目录可能创建失败,可在命令行手动执行

#!/bin/bash
HALPPSFE="ldappass.txt"
HALPANPSFE="ldapadminpass.txt"
yum -y install openldap-servers openldap-clients expect >/dev/null
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap. /var/lib/ldap/DB_CONFIG
systemctl start slapd
systemctl enable slapd
read -p $'\n请输入LDAP密码并记录:\n' -e LDAPPASS
expect <<-EOF >$HALPPSFE
set timeout 10
spawn -noecho slappasswd
expect {
"*assword:*" {send "$LDAPPASS\n";exp_continue}
"*assword:*" {send "$LDAPPASS\n";exp_continue}
}
EOF
HALDAPPASS=`tail -n 1 ${HALPPSFE}`
echo $HALDAPPASS
cat >chrootpw.ldif<<-EOF
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: $HALDAPPASS
EOF
ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
read -p $'\n请输入LDAPADMIN密码并记录:\n' -e LDAPADMINPASS
expect <<-EOF >$HALPANPSFE
set timeout 10
spawn -noecho slappasswd
expect {
"New password:" {send "$LDAPADMINPASS\n";exp_continue}
"Re-enter new password:" {send "$LDAPADMINPASS\n";exp_continue}
}
EOF
HALDAPADMINPASS=`tail -n 1 ${HALPANPSFE}`
echo $HALDAPADMINPASS
read -p $'\n请输入你的CN,例如:cn=【admin】,dc=test,dc=cn,括号内的内容为你需要输入的自定义CN:\n' -e CN
while [ -z $CN ]
do
read -p $'你输入了一个空的CN,请重新输入\n' -e CN
done
read -p $'\n请输入你的DC,例如:cn=admin,dc=【test】,dc=cn括号内的内容为你需要输入的自定义DC:\n' -e DC
while [ -z $DC ]
do
read -p $'你输入了一个空的DC,请重新输入\n' -e DC
done
read -p $'\n请输入你的DC,例如:cn=admin,dc=test,dc=【cn】括号内的内容为你需要输入的自定义DC:\n' -e Dc
while [ -z $Dc ]
do
read -p $'你输入了一个空的DC,请重新输入\n' -e Dc
done
echo -e "\n你的LDAP密码为:$LDAPPASS
你的域为cn=$CN,dc=$DC,dc=$Dc,LDAPADMIN密码为:$LDAPADMINPASS\n
请你记录,10s后开始后续写入执行。。。"
sleep 10s
cat >chdomain.ldif<<-EOF
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=$CN,dc=$DC,dc=$Dc" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=$DC,dc=$Dc

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=$CN,dc=$DC,dc=$Dc

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: $HALDAPADMINPASS

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=$CN,dc=$DC,dc=$Dc" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=$CN,dc=$DC,dc=$Dc" write by * read
EOF
ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
read -p $'请输入你要创建的组名,例如【Group】(ldapadmin无法创建)这里是写死的,未做判断,不要跳过:\n' -e OU
read -p $'请输入你要创建的组名,例如【People】(ldapadmin无法创建)这里是写死的,未做判断,不要跳过:\n' -e Ou
cat >basedomain.ldif<<-EOF
dn: dc=$DC,dc=$Dc
objectClass: top
objectClass: dcObject
objectclass: organization
o: Test Cloud
dc: $DC

dn: cn=$CN,dc=$DC,dc=$Dc
objectClass: organizationalRole
cn: $CN
description: Directory Manager

dn: ou=$OU,dc=$DC,dc=$Dc
objectClass: organizationalUnit
ou: $OU

dn: ou=$Ou,dc=$DC,dc=$Dc
objectClass: organizationalUnit
ou: $Ou
EOF
expect <<-EOF
set timeout 10
spawn -noecho ldapadd -x -D cn=$CN,dc=$DC,dc=$Dc -W -f basedomain.ldif
expect {
"*assword:*" {send "$LDAPADMINPASS\n";exp_continue}
}
EOF
echo -e "\nldapserver部署完成,5s后开始部署ldapphpadmin。。。"
sleep 5s
yum install -y httpd mod_ssl>/dev/null
WEFILE="/etc/httpd/conf.d/welcome.conf"
if [ -e "$WEFILE" ];then
mv $WEFILE ${WEFILE}_bak
else
:
fi
TIME=`date +%Y%m%d%H%M`
HDFILE="/etc/httpd/conf/httpd.conf"
cp $HDFILE /tmp/httpd.conf-$TIME
read -p $'请输入你期望的httpd监听的端口号:\n' -e LISTEN
sed -i "s/^Listen.*/Listen $LISTEN/g" $HDFILE
grep "AllowOverride All" $HDFILE
if [ $? -ne 0 ];then
sed -i "151s/AllowOverride None/AllowOverride all/g" $HDFILE
if [ $? -ne 0 ];then
echo "151s/AllowOverride None/AllowOverride all/g $HDFILE失败"
else
:
fi
else
:
fi
JUD=`sed -n "/^ServerName.*/p" $HDFILE`
echo "$JUD"
if [ -z "$JUD" ];then
read -p $'请输入你的ip/域名:\n' -e DOMAIN
sed -i "/^#ServerName.*www.example.com:80/a\ServerName $DOMAIN" $HDFILE
else
read -p $'已存在以上servrname,是否继续新增,需要请选择【yes】,忽略请回车' -e CHOO
while [ "$CHOO" == "yes" ]
do
TIME=`date +%Y%m%d%H%M`
cp $HDFILE /tmp/httpd.conf-$TIME
read -p $'请输入你的ip/域名:\n' -e DOMAIN
sed -i "/^#ServerName.*www.example.com:80/a\ServerName $DOMAIN" $HDFILE
JUD=`sed -n "/^ServerName.*/p" $HDFILE`
read -p $'已存在$JUD,是否新增,需要请选择【yes】,忽略请回车' -e CHOO
done
echo "非新增操作,请手动查找修改httpd.conf文件"
fi
sed -i "s/.*DirectoryIndex.*index.*/ DirectoryIndex index.html index.php index.cgi/g" $HDFILE
grep "ServerTokens Prod" $HDFILE >/dev/null
if [ $? -ne 0 ];then
echo -e "\nServerTokens Prod\nKeepAlive On" >> $HDFILE
systemctl start httpd
systemctl enable httpd.service
else
systemctl start httpd
systemctl enable httpd.service
fi
yum -y install php php-mbstring php-pear >/dev/null
systemctl restart httpd
yum --enablerepo=epel -y install phpldapadmin >/dev/null
PHPLPANFE="/etc/phpldapadmin/config.php"
TIME=`date +%Y%m%d%H%M`
cp $PHPLPANFE /tmp/config.php-$TIME
sed -i "397s/.*/\$servers->setValue('login','attr','dn');/g" $PHPLPANFE
sed -i "398s/.*/\/\/ $servers->setValue('login','attr','uid');/g" $PHPLPANFE
HDPHPLPANFE="/etc/httpd/conf.d/phpldapadmin.conf"
cp $HDPHPLPANFE /tmp/phpldapadmin.conf-$TIME
cat >$HDPHPLPANFE<<-EOF
#
# 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 local
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Allow from all
Allow from ::1
</IfModule>
</Directory>
EOF
systemctl restart httpd

1
#脚本中有下载httpd的mod_ssl模块,在/etc/httpd/conf.d/ssl.conf中配置证书文件地址

2,搭建ldap自助修改密码系统Self Service Password
安装应用
Self Service Password:yum install https://ltb-project.org/rpm/6Server/noarch/self-service-password-1.1-1.el6.noarch.rpm
配置apache: /etc/httpd/conf.d/self-service-password.conf

NameVirtualHost *:80
<VirtualHost *:80>
ServerName changepasswd.xxxxx.net
DocumentRoot /usr/share/self-service-password
DirectoryIndex index.php
AddDefaultCharset UTF-8
<Directory "/usr/share/self-service-password">
AllowOverride None
Require all granted
</Directory>
LogLevel warn
ErrorLog /var/log/httpd/ssp_error_log
CustomLog /var/log/httpd/ssp_access_log combined
</VirtualHost>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
配置Self Service Password,支持密码修改和邮件重置: vim /usr/share/self-service-password/conf/config.inc.php

#关闭 问题验证 和 短信验证(视个人需要):

$use_questions=false;
$use_sms= false;

#配置 LDAP
    $ldap_url = "ldap://ldap.xxxxx.net";
    $ldap_starttls = false;
    $ldap_binddn = "cn=Manager,dc=ldap,dc=xxxxxx,dc=net";
    $ldap_bindpw = "xxxxxxxxx";
    $ldap_base = "dc=ldap,dc=xxxxxx,dc=net";
    $ldap_login_attribute = "cn";
    $ldap_fullname_attribute = "cn";
    $ldap_filter = "(&(objectClass=person)($ldap_login_attribute={login}))";
$who_change_password = "manager"; #指定LDAP 以什么用户身份更改密码
$keyphrase = "admintestcn"; #更改短语。

#配置邮件
    $mail_from = "[email protected]";
    $mail_from_name = "企业账号密码重置";
    $mail_signature = "";
$notify_on_change = true; #密码修改成功后,向用户发送通知邮件
    $mail_sendmailpath = '/usr/sbin/sendmail'; #需安装sendmail服务 yum install -y sendmail
    $mail_protocol = 'smtp';
    $mail_smtp_debug = 0;
    $mail_debug_format = 'html';
    $mail_smtp_host = 'smtp.gmail.com';
    $mail_smtp_auth = true;
    $mail_smtp_user = '[email protected]';
    $mail_smtp_pass = 'xxxxxx';
    $mail_smtp_port = 587;
    $mail_smtp_timeout = 30;
    $mail_smtp_keepalive = false;
    $mail_smtp_secure = 'tls';
    $mail_contenttype = 'text/plain';
    $mail_wordwrap = 0;
    $mail_charset = 'utf-8';
    $mail_priority = 3;
    $mail_newline = PHP_EOL;


配置完成,登录网页访问,通过网页修改账号密码验证

3,注意事项
注意:执行shell脚本时报错:/bin/bash^M: 坏的解释器: 没有那个文件或目录,是因为该文件在windows系统上打开过,关闭后其中的换行符号和Linux的不同,导致这个报错,我们可以通过 sed命令 与正则的配合将文件中的换行符号替换成linux的形式

sed -i 's/\r$//' mocha.sh
1
(四)docker-compose启动Ldap+web管理+自助密码修改
点击跳转到文章地址

END:参考文章
CentOS7下搭建OpenLDAP服务器 - 腾讯云开发者社区-腾讯云


————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/haodayizhizhuzhu/article/details/129081815

09-25 09:56