LDAP服务器部署(openldap、nginx、LAM)
本文详细记录了在OpenEuler-24.03-LTS-SP1离线环境下部署OpenLDAP服务的完整过程。主要内容包括:1)安装OpenLDAP并进行初始配置,包括设置管理员密码、修改数据库配置、导入schema等;2)通过LAM(LDAP Account Manager)实现图形化管理,包括Nginx+PHP环境搭建、LAM安装与配置;3)安全加固,配置LDAPS加密通信。文中提供了详细的命令
1 部署环境
OpenEuler-24.03-LTS-SP1
离线环境,部署了本地软件源(系统光盘)。
已搭建DNS服务器,并添加A记录:lam.dong.net
2 安装软件并启动服务
dnf install openldap openldap-clients
systemctl start slapd
systemctl status slapd
systemctl enable slapd
3 初始配置
3.1 设置管理员密码
slappasswd -s 123456
生成:{SSHA}……,需要复制。
3.2 修改配置
openldap默认有{0}config、{1}monitor、{2}mdb、{-1}frontend等4个数据库,其中0号数据库为动态运行配置,1号数据库为系统核心配置,2号数据库存储组织价格和用户信息,-1号数据库用于前端命令交互和管理。其中主要配置集中在-1号数据库的权限配置、2号数据库的域名配置、1号数据库的域名配置等。
其中:{0} 代表第一个被加载,{1} 代表 第二个被加载,{2} 代表 第三个被加载……{-1} 代表最后一个被加载
新版本openldap不提倡直接编辑配置文件方式进行初始化,建议统一使用ldap命令开局。
3.2.1 查看数据库
ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" "olcDatabase={2}mdb"
显示如下(查询其他数据库配置,只需修改最后的数据库名称):
dn: olcDatabase={2}mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {2}Mdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=my-domain,dc=com
olcRootDN: cn=Manager,dc=my-domain,dc=com
……
3.2.2 新建初始化ldif文件
依次修改以下内容:
- {2}mdb:修改olcSuffix、olcRootDN项,添加olcRootPW项。
- {1}monitor:修改olcAccess项。
- {-1}frontend:添加olcAccess
新建ldif配置文件
#新建目录
mkdir /etc/openldap/modify
#新建3个ldif文件
touch /etc/openldap/modify/start{0..2}.ldif
#依次写入初始化配置
vi /etc/openldap/modify/start0.ldif
依次在start0.ldif、start1.ldif、start2.ldif写入以下内容(注意:必须严格检查格式,不要混入中文字符,行尾不要有空格,全文不要有空行,否则会报错):
#start0.ldif
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=dong,dc=net
-
replace: olcRootDN
olcRootDN: cn=Manager,dc=dong,dc=net
-
add: olcRootPW
olcRootPW: {SSHA}……
-replace: olcAccess
olcAccess: {0}to attrs=userPassword by anonymous auth
olcAccess: {1}to dn.subtree="dc=dong,dc=net" by dn.exact="uid=queryuser,ou=People,dc=dong,dc=net" read
olcAccess: {2}to * by self write
olcAccess: {3}to * by dn.exact="cn=root,cn=peercred,cn=external,cn=auth" manage
olcAccess: {4}to * by * none#start1.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: to *
by dn.exact="cn=root,cn=peercred,cn=external,cn=auth" read
by dn.base="cn=Manager,dc=dong,dc=net" read
by * none#start2.ldif
dn: olcDatabase={-1}frontend,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to dn.base="" by * read
olcAccess: {1}to dn.base="cn=Subschema" by * read
olcAccess: {2}to attrs=userPassword by anonymous auth
olcAccess: {3}to * by self write
olcAccess: {4}to * by dn.exact="cn=root,cn=peercred,cn=external,cn=auth" manage
olcAccess: {5}to * by * none
changetype有4种类型:modify为编辑属性、add为新增条目、delete为删除条目、modrdn为重命名或移动条目。modify又分3种类型:replace为替换、add为新增、delete为删除。
olcAccess对数据库访问权限进行限制
to attrs=userPassword :针对userPassword属性by self write :允许用户自己修改密码by anonymous auth :允许匿名用户进行认证by users none :拒绝普通用户查看密码to * :针对所有属性by * read :允许所有用户读取
3.2.3 依次导入ldif文件
ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/modify/start0.ldif
ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/modify/start1.ldif
ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/modify/start2.ldif
特别注意:从网站复制过去直接粘贴,大概率会有格式错误,必须详细检查。
导入成功后执行以下命令测试数据库,返回“config file testing succeeded"表示通过。
slaptest -u
3.2.4 导入schema
可以查看现有schema。
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b "cn=schema,cn=config" "dn"
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
结合实际导入所需schema,以cosine.ldif为例。所有schema文件都在/etc/openldap/schema文件夹下,可自行了解其用途。
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/namedobject.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/msuser.ldif
导入后需要重启slapd。
4 安装LAM
安装LAM(ldapaccountmanager),通过图形界面管理openldap。
4.1 安装nginx+php
dnf install nginx php php-fpm
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf~
systemctl start php-fpm
systemctl start nginx
修改php-fpm默认用户与nginx默认用户相同(可以避免诸多文件夹管理权限问题,也可以不修改这里,但后面要根据提示信息,逐个修改文件夹权限),并指定lam站点目录位置:
#查看php-fpm默认用户
ps aux | grep php-fpm
#修改php-fpm配置文件
vi /etc/php-fpm.d/www.conf
查找用户名和用户组,并修改如下:
user = nginx
group = nginx
新建lam.conf配置文件:
#新建nginx配置文件
vi /etc/nginx/conf.d/lam.conf
#编辑完成后测试配置文件
nginx -t
编辑内容如下:
server {
listen 80;
listen [::]:80;
server_name lam.dong.net;
root /var/www/lam;# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;error_page 404 /404.html;
location = /404.html {
}error_page 500 502 503 504 /50x.html;
location = /50x.html {
}location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
重启服务并设置开机自启:
systemctl restart php-fpm
systemctl enable php-fpm
systemctl restart nginx
systemctl enable nginx
4.2 安装LAM
离线环境,先下载安装包,将所有文件复制到安装目录,并设置相关权限。
tar xjf ldap-account-manager-<version>.tar.bz2
cd ldap-account-manager-<version>
cp -r ./* /var/www/lam/
#修改安装目录属主为nginx:nginx(于nginx用户保持一致)
chown -R nginx:nginx /var/www/lam
#添加配置文件,并修改权限
cp /var/www/lam/config/config.cfg.sample /var/www/lam/config/config.cfg
chown nginx:nginx /var/www/lam/config/config.cfg
此时已经可以访问lam界面(lam.dong.net),提示文件夹权限和扩展插件问题,设置SELinux值,并按要求按照软件即可。
#设置sebool值,解决文件夹权限问题
setsebool -P httpd_anon_write on
#如果上述设置无法解决权限问题,可以临时关闭selinux,然后排查问题
setenforce 0
#解决软件依赖问题
dnf install php-ldap php-gd php-gmp
仍然报"Your PHP has not ZIP support."错误。
如果可以联网:
dnf install libzip php-pecl-zip
如果不能联网,下载ZIP扩展:
PECL :: Package :: zip
https://pecl.php.net/package/zip
dnf install libzip libzip-devel
tar zxvf zip-<version>.tgz
cd zip-<version>
phpize
./configure --with-php-config=$(which php-config) --enable-zip
make && make install
编辑以下配置文件:
vi /etc/php.ini
添加以下内容:
extension=zip.so
重启服务,验证LAM是否正常工作。
systemctl restart php-fpm
systemctl restart nginx
至此,LAM页面已正常显示。
4.3 LAM初始化
- 根据LAM页面提示输入LAM管理员密码并提交(此处的管理员密码于ldap管理员密码并不是一个概念,这里的密码仅用于访问lam服务器使用),然后输入刚才设置的LAM管理员密码,进入配置页面。
- 可以不做配置,点击”保存“,点击右上角”LAM配置,选择第二项编辑服务器配置文件,新建配置文件,在“Add profile”部分输入名称、密码(此处的密码是指配置文件的密码)、类型,点击“Add”后输入上一步配置的lam服务器密码,保存后进入服务器配置界面,选择语言为”简体中文(中国)“,时区为“Asia/Beijing”;保存。
- 登录后,实现中文图形界面操作,自行探索,不做赘述。
5 LAM的基本操作
5.1 LAM的连接设置
延续上述步骤的登录界面,在“通用设置”下:
修改“合法用户列表”内容为:cn=Manager,dc=dong,dc=net
修改“树状结构后缀”内容为:dc=dong,dc=net
在“账号类型”下:
修改"用户“的”LDAP后缀“为:ou=People,dc=dong,dc=net
修改"组“的”LDAP后缀“为:ou=group,dc=dong,dc=net
其他选项结合自身需要配置,点击左下角保存。
5.2 对LDAP的操作
延续上述步骤,现在进入LDAP服务器登录页面,用户名为Manager,密码为LDAP管理员密码。
初次进入管理界面,会提示创建LDAP后缀,点击“建立”。
现在就可以自行创建用户和组,可以新建组Admin,然后新建用户queryuser,并设置密码。
可以使用以下命令验证新建用户和组的结果:
#本机测试使用如下命令
ldapsearch -x -D "uid=queryuser,ou=People,dc=dong,dc=net" -W -b "dc=dong,dc=net"
#其他终端测试使用以下命令
ldapsearch -H ldap://lam.dong.net:389 -x -b "dc=dong,dc=net" -D "uid=queryuser,ou=People,dc=dong,dc=net" -W
如果命令执行不成功,则将其中的用户名替换成为“cn=Manager,dc=dong,dc=net"测试并排查故障。
6 安全加固(ldaps)
生成ssl密钥和证书,并修改证书属主:
openssl genrsa -out /etc/ssl/private/ldap.key 2048
chown ldap:ldap /etc/ssl/private/ldap.key
openssl req -new -x509 -days 365 -subj "/CN=ldap.dong.net" \
-key /etc/ssl/private/ldap.key \
-out /etc/openldap/certs/ldap.crt
chown ldap:ldap /etc/openldap/certs/ldap.crt
新建tsl.ldif配置文件,内容如下:
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/openldap/certs/ldap.crt
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/ldap.crt
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldap.key
动态导入tls.ldif文件:
ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/modify/tls.ldif
将自签名证书添加到系统信任库:
cp /etc/openldap/certs/ldap.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust
查看证书内容并进行ldaps连接测试:
openssl s_client -connect ldap.dong.net:636 -showcerts
ldapsearch -H ldaps://ldap.dong.net:636 -x -b "dc=dong,dc=net" -D "cn=Manager,dc=dong,dc=net" -W
输入密码后,即可返回查询结果。
水平有限,敬请批评指正。安全加固部分内容有待完善。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)