目 录CONTENT

文章目录

OpenLDAP部署

简中仙
2023-05-25 / 0 评论 / 0 点赞 / 128 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2024-02-08,若内容或图片失效,请留言反馈。 本文如有错误或者侵权的地方,欢迎您批评指正!

一、什么是openLDAP

OpenLDAP是一个开源的轻量级目录访问协议(LDAP)实现。它是一种协议,用于在网络环境中查询和操作目录服务中的信息。LDAP协议被广泛用于企业环境,以提供对用户信息、组织结构、权限和其他企业相关数据的访问。

1、为什么用LDAP

使用LDAP(轻型目录访问协议)的主要原因是其开放性和灵活性。LDAP是一个工业标准的目录访问协议,被设计用于访问和操作目录服务器中的信息。它提供了一种标准的接口,使得客户端应用程序可以搜索和修改目录中的信息。

LDAP服务器的优势在于它与关系数据库相比,可以轻松地处理大量用户和组数据,并且更好地适应分布式环境。此外,LDAP服务器在查询上进行了很多优化,可以快速查询出想要的结果。

通俗来说,LDAP就像一张表,只需要用户名和口令,加上一些其他的东西,非常简单。它是一个轻量级的产品,主要目的是为了查,因此在架构和优化主要是针对读,而不是写,从效率和结构上都可以满足认证的需求。这就是为什么LDAP成为很多的统一认证的解决方案的优势所在。

此外,LDAP还支持Kerberos身份验证协议,可以实现单点登录和集中管理,为企业提供更安全、高效的用户身份验证和访问控制管理。

2、LDAP相关概念

  • dn(Distinguished Name):区分名称,LDAP中每个条目都有自己的dn,dn是该条目在整棵树中的唯一标识,如同文件系统中,带路径的文件名就是DN。

  • rdn(Relative dn):相对区别名称,好比linux中的相对路径。

  • dc(Domain Component):域名组件。其格式是将完整的域名分成几部分,如将http://example.com变成dc=example,dc=com。

  • uid(User ID):用户ID,如 san.zhang。

  • ou(Organization Unit):组织单元。

  • cn(Common Name):公共名称。

  • sn(surname):姓氏。

  • c(Country):国家,如“CN”或者“US”。

  • o(Organization):组织名,如XXX银行,XXX部门,XXX公司等等。

二、安装openldap

1、使用yum命令

# setenforce 0
# systemctl stop firewalld
# systemctl disbale firewalld
# yum install -y openldap openldap-clients openldap-devel openldap-servers compat-openldap
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# chown ldap:ldap /var/lib/ldap/DB_CONFIG
# systemctl start slapd
# systemctl status slapd
# systemctl enable slapd
# netstat -antup |grep 389
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      1982/slapd
tcp6       0      0 :::389                  :::*                    LISTEN      1982/slapd

1、安装包说明

安装包名称说明
openldapopenldap服务端和客户端必须用的库文件。
openldap-servers用于启动服务和设置. 包含单独的ldap后台守护程序。
openldap-clients用于启动服务和设置. 包含单独的ldap后台守护程序。
openldap-develdevel包,可选择进行安装。
openldap-servers-sql支持sql模块,可进行选择性安装。
migrationtools通过migrationtools实现OpenLDAP用户及用户组的添加,导入系统账户,可进行选择性安装。
compat-openldapopenldap兼容性库 其中compat-openldap这个包与主从有很大的关系

2、查看安装版本

# slapd -VV
@(#) $OpenLDAP: slapd 2.4.44 (Feb 23 2022 17:11:27) $
        mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd

3、OpenLDAP的相关配置文件信息

/etc/openldap/slapd.conf:OpenLDAP的主配置文件,记录根域信息,管理员名称,密码,日志,权限等

/etc/openldap/slapd.d/:这下面是/etc/openldap/slapd.conf配置信息生成的文件,每修改一次配置信息,这里的东西就要重新生成

/etc/openldap/schema/:OpenLDAP的schema存放的地方

/var/lib/ldap/:OpenLDAP的数据文件

/usr/share/openldap-servers/slapd.conf.obsolete 模板配置文件

/usr/share/openldap-servers/DB_CONFIG.example 模板数据库配置文件

OpenLDAP监听的端口: 默认监听端口:389(明文数据传输) 加密监听端口:636(密文数据传输)

2、docker-compose 部署openLDAP

填写自定义的ldif文件

vim ./openldap/config/init.ldif
dn: ou=People,dc=example,dc=net
objectClass: organizationalUnit
ou: people

dn: ou=Group,dc=example,dc=net
objectClass: organizationalUnit
ou: group

将该配置挂载到容器中,然后容器启动之后会执行这个文件

version: "2"
services:
  openldap:
    container_name: "openldap"
    image: "osixia/openldap:latest"
    restart: always
    environment:
      LDAP_ORGANISATION: "openldap"
      LDAP_DOMAIN: "example.com"
      LDAP_ADMIN_PASSWORD: "123456"
      LDAP_CONFIG_PASSWORD: "123456"
      TZ: Asia/Shanghai
    command: [ '--copy-service' ]
    volumes:
      - ./ldap/data:/var/lib/ldap  												# 如果需要的话,可以配置挂载持久化目录
      - ./ldap/config:/etc/ldap/slapd.d  										# 如果需要的话,可以配置挂载持久化目录
      - ./openldap/config:/container/service/slapd/assets/config/bootstrap/ldif/custom 		# 注意这里是目录挂载到目录,需要提前创建放入自定义的ldif文件
    ports:
      - 388:389

三、部署phpldapadmin

PHPLDAPadmin是一个用于管理LDAP(轻量级目录访问协议)的Web界面。它可以帮助用户轻松管理和编辑LDAP目录。

1、yum安装

安装软件源

# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# rpm -Uvh https://rpms.remirepo.net/enterprise/remi-release-7.rpm
# yum -y install epel-release
# yum-config-manager --enable remi-php74

2、安装软件

# yum install php-Smarty php74-php-fpm php74-php-gd php74-php-json php74-php-mbstring php74-php-xmlrpc php74-php-opcache php74-php-ldap -y
# systemctl start php74-php-fpm.service
# systemctl enable php74-php-fpm.service
# systemctl status php74-php-fpm.service
# yum install -y phpldapadmin

3、修改配置文件

# vim /etc/phpldapadmin/config.php
#398行,dn为使用dn登陆,cn为使用用户名登陆,可选其一
$servers->setValue('login','attr','dn');
// $servers->setValue('login','attr','uid');
#460行,关闭匿名登录,必做
$servers->setValue('login','anon_bind',false);
#519行,保证用户属性的唯一性
$servers->setValue('unique','attrs',array('mail','uid','uidNumber','cn','sn'));

4、设置nginx代理

# vim /etc/nginx/conf.d/phpldapadmin.conf
server {
        listen          8080;
        server_name     localhost;
        access_log      /var/log/nginx/phpldapadmin_access.log;
        error_log       /var/log/nginx/phpldapadmin_errors.log;
 
        root /usr/share/phpldapadmin/htdocs/;
        index index.php index.html;
 
       location ~ \.php {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
}

出现以下报错解决方案

Deprecated: Array and string offset access syntax with curly braces is deprecated in /usr/share/phpldapadmin/lib/functions.php on line 1641

# vim /usr/share/phpldapadmin/lib/functions.php
1640         if (in_array('sambaaccount',$object_classes) &&
1641                 '$' == $rdn[ strlen($rdn) - 1 ])			# 将使用大括号 {} 的数组或字符串偏移量访问语法修改为使用方括号 []
1642                 return 'nt_machine.png';
# nginx -s reload
# systemctl restart php74-php-fpm.service

访问http://ip:8080/
DN:cn=admin,dc=gaoyufu,dc=net
密码:123456

2、docker-compose部署

version: "2"
services:
  phpldapadmin:
    image: osixia/phpldapadmin:0.9.0
    container_name: phpldapadmin
    hostname: phpldapadmin
    restart: always
    environment:
      TZ: Asia/Shanghai 							# 设置容器时区与宿主机保持一致
      PHPLDAPADMIN_HTTPS: "false" 					# 是否使用https
      PHPLDAPADMIN_LDAP_HOSTS: openldap 			# 指定LDAP连接地址
    ports:
      - 8090:80
    volumes:
      - ./phpadmin:/var/www/phpldapadmin  			# 如果需要的话,可以配置挂载持久化目录

当打开phpldapadmin页面发现是英文时可以执行以下命令

docker exec -it phpldapadmin sed -i -e 's/# zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/' /etc/locale.gen && dpkg-reconfigure --frontend=noninteractive locales

四、部署self-service-password

self-service-password是一个用于重置和更改密码的Web应用程序,旨在提供一种方便的方式来管理密码。这个应用程序可以与LDAP目录进行交互,允许用户在不需要依赖管理员或访问密码的情况下更改其密码。通过self-service-password,用户可以通过一个简单的Web界面访问其密码,并在需要时进行更改。这个应用程序还提供了许多安全功能,例如密码重置链接和双因素身份验证,以保护用户的账户和数据安全。

因为self-service-password容器化部署参数过多,所以不建议使用docker部署

1、添加软件源

# vim /etc/yum.repos.d/ltb-project.repo
[ltb-project-noarch]
name=LTB project packages (noarch)
baseurl=https://ltb-project.org/rpm/$releasever/noarch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-LTB-project
# rpm --import https://ltb-project.org/wiki/lib/RPM-GPG-KEY-LTB-project

2、安装软件包

php7.4安装方法同上

# yum -y install self-service-password
# yum -y install sendmail

注:self-service-password的邮件服务使用的是sendmail而不是系统自带的postfix服务

3、使用Nginx代理

# vim /etc/nginx/conf.d/self-service-password.conf
server {
    listen 8888;			# 前端页面端口,可自行更改

    root /usr/share/self-service-password/htdocs;
    index index.php index.html index.htm;

# Make site accessible from http://localhost/
    server_name localhost;

# Disable sendfile as per https://docs.vagrantup.com/v2/synced-folders/virtualbox.html
    sendfile off;

    gzip on;
    gzip_comp_level 6;
    gzip_min_length 1000;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;
    gzip_vary on;
    gzip_proxied any;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

# Add stdout logging
    access_log /var/log/php-access.log;
    error_log /var/log/php-error.log;

# pass the PHP scripts to FastCGI server listening on socket
#
    location ~ \.php {
        #fastcgi_pass unix:/var/run/php-fpm.socket;
        fastcgi_split_path_info       ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
        try_files $fastcgi_script_name =404;
        fastcgi_read_timeout 600;
        fastcgi_pass 127.0.0.1:9000;
        include fastcgi_params;
    }

    error_page 404 /404.html;
    location = /404.html {
            root /usr/share/nginx/html;
            internal;
    }

# deny access to . files, for security
#
    location ~ /\. {
            log_not_found off;
            deny all;
    }

    location ~ /scripts {
            log_not_found off;
            deny all;
    }

}
# nginx -s reload

4、配置self-service-password服务

1、关联ldap

# cd /usr/share/self-service-password/conf/
# vim config.inc.php
$ldap_url = "ldap://127.0.0.1:389";
$ldap_starttls = false;
$ldap_binddn = "cn=admin,dc=example,dc=com";
$ldap_bindpw = '123465';
// for GSSAPI authentication, comment out ldap_bind* and uncomment ldap_krb5ccname lines
//$ldap_krb5ccname = "/path/to/krb5cc";
$ldap_base = "dc=example,dc=com";
$ldap_login_attribute = "uid";
$ldap_fullname_attribute = "cn";
$ldap_filter = "(&(objectClass=person)($ldap_login_attribute={login}))";
$ldap_use_exop_passwd = false;
$ldap_use_ppolicy_control = false;

2、设置邮件

## Mail
# LDAP mail attribute
$mail_attributes = array( "mail", "gosaMailAlternateAddress", "proxyAddresses" );
# Get mail address directly from LDAP (only first mail entry)
# and hide mail input field
# default = false
$mail_address_use_ldap = false;
# Who the email should come from
$mail_from = "132465789@163.com";
$mail_from_name = "LDAP密码重置服务";
$mail_signature = "本邮件为通过密码自助修改LDAP账号密码,无需回复,如有重置密码遇到问题可以联系运维同学";
# Notify users anytime their password is changed
$notify_on_change = true;
# PHPMailer configuration (see https://github.com/PHPMailer/PHPMailer)
$mail_sendmailpath = '/usr/sbin/sendmail';
$mail_protocol = 'smtp';
$mail_smtp_debug = 0;
$mail_debug_format = 'html';
$mail_smtp_host = 'smtp.163.com';
$mail_smtp_auth = true;
$mail_smtp_user = '132465798@163.com';
$mail_smtp_pass = '11111111111111111111';
$mail_smtp_port = 465;
$mail_smtp_timeout = 30;
$mail_smtp_keepalive = false;
$mail_smtp_secure = 'ssl';
$mail_smtp_autotls = true;
$mail_smtp_options = array();
$mail_contenttype = 'text/plain';
$mail_wordwrap = 0;
$mail_charset = 'utf-8';
$mail_priority = 3;

3、配置重置密码

$keyphrase是配置文件中的一个重要参数。它用于加密和验证密码重置链接,确保链接的安全性和有效性。

当用户请求密码重置时,系统会生成一个包含$keyphrase的加密链接,并将其发送给用户。用户点击链接后,系统会使用相同的$keyphrase来验证链接的有效性,并允许用户重置密码。

因此,$keyphrase的作用是确保密码重置链接的安全性和验证过程的正确性。建议将$keyphrase设置为一个强密码,并定期更改以增加安全性。

$keyphrase = "zzzzzzzzzzzzzzz";	

4、设置中文页面

$lang = "zh-CN";
# Logo
$logo = "images/ltb-logo.png";

五、LDAP卸载

1、停止openldap

systemctl stop slapd
systemctl disable slapd

2、卸载软件包

yum -y remove openldap-servers openldap-clients

3、删除残留文件

# 删除ldap用户
userdel ldap
# 删除数据文件
rm -rf /var/lib/ldap
# 删除openldap目录
rm -rf /etc/openldap

ldap删除重装无法启动或者启动报错main: TLS init def ctx failed: -1处理

mkdir -p /etc/openldap/certs
bash /usr/libexec/openldap/create-certdb.sh
bash /usr/libexec/openldap/generate-server-cert.sh
0

评论区