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 :: ziphttps://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

输入密码后,即可返回查询结果。

水平有限,敬请批评指正。安全加固部分内容有待完善。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐