CentOS 7.5 搭建LDAP账号管理系统

LDAP 的全称是 Lightweight Directory Access Protocol,即轻量级目录访问协议,它是一种开放的、厂商无关的、行业标准的应用协议,用于在 IP (Internet Protocol) 网络上访问和维护分布式目录信息服务。LDAP 的一个常见用途是提供一个存储用户名和密码的中心位置,允许不同的应用程序和服务连接到 LDAP 服务器来验证用户。具体到实际情况,一些公司在员工入职的时候会给其发放一个账号,员工可以用该账号登录所有的内部通用系统,比如:GitLab,Jenkins 和 jira 等,到员工离职的时候,原先发放的账号将一次性被回收。

能提供 LDAP 服务的开源项目有很多,这里选用较为成熟的开源服务器 OpenLDAP,下面介绍如何在CentOS 安装和配置 OpenLDAP。

安装 OpenLDAP 相关的软件

在命令行输入下面的命令去安装 OpenLDAP 服务器和客户端:

复制代码
yum -y install openldap openldap-servers openldap-clients

启动服务

启动 OpenLDAP 服务并将其设置到开机启动

bash 复制代码
systemctl start slapd.service
systemctl enable slapd.service

运行上述命令将得到如下图所示的结果:

允许外部连接

css 复制代码
firewall-cmd --permanent --add-port=389/tcp --add-port=389/udp
firewall-cmd --reload
setsebool -P allow_ypbind=1 authlogin_nsswitch_use_ldap=1
setsebool -P httpd_can_connect_ldap on

编辑默认配置

在使用 OpenLDAP 服务器之前,必须确保服务器配置正确。因此,必须检查写在 ldap.conf 文件中的默认配置。

  1. 打开 ldap.conf file
bash 复制代码
vim /etc/openldap/ldap.conf
  1. 取消以下内容的注释
shell 复制代码
#BASE   dc=example,dc=com
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666
  1. 编辑 BASE 和 URI 字段,如下
ini 复制代码
BASE    dc=ldap,dc=heyudesign,dc=cn
URI     http://121.153.198.133

将 BASE 替换为你的域名,将 URI 替换为你的完整域名或 LDAP 服务器的 IP 地址。

配置 root 用户

如果要在 LDAP 环境下执行管理任务,那么必须修改 LDAP 的 root 用户。另外必须创建 LDIF 文件,其中包含你希望在 LDAP 服务器上更改的内容,然后用 ldapadd 工具将该 LDIF 文件应用到服务器,以更改 OpenLDAP 中的内容。

下面的 9 个步骤修改 LDAP 默认的 root 用户,使其能够管理服务器中的所有条目:

  1. 在你选择的目录中创建一个 LDIF 文件。

    vim rootpw.ldif

  2. 为 root 用户创建秘密

    slappasswd -s 12345678

-s 后的参数可以替换成其他密码,上述命令将输出类似 {SSHA}pbGNe3ILso3VgHdLLZbFArwsZ3zr5t5q 的 hash 值。

  1. 往第一步创建的 LDIF 文件填写内容,如下
makefile 复制代码
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}pbGNe3ILso3VgHdLLZbFArwsZ3zr5t5q
  1. 将 LDIF 文件应用到服务器
arduino 复制代码
ldapadd -Y EXTERNAL -H ldapi:/// -f rootpw.ldif

运行上述命令得到的结果如下图所示

  1. 导入 LDAP 基本 schemas
arduino 复制代码
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
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
  1. 配置对 LDAP 服务器的访问,并将 Manager 用户添加到服务器

创建 manager.ldif 文件,写入下面的内容

vbnet 复制代码
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=Manager,dc=ldap,dc=heyudesign,dc=cn" read by * none

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

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=ldap,dc=heyudesign,dc=cn

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

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=ldap,dc=heyudesign,dc=cn" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=ldap,dc=heyudesign,dc=cn" write by * read
  • 将 olcRootPW 对应的值替换成第二步用 slappasswd 输出的值
  • 将 dc=ldap,dc=heyudesign,dc=cn 替换成实际的 BASE DN
  1. 应用manager.ldif
arduino 复制代码
ldapmodify -Y EXTERNAL -H ldapi:/// -f manager.ldif

运行上述命令得到的结果如下图所示

  1. 创建组

创建一个名为 org.ldif 的文件,写入下面的内容

makefile 复制代码
dn: dc=ldap,dc=heyudesign,dc=cn
objectClass: top
objectClass: dcObject
objectClass: organization
o: ldap Organization
dc: ldap

dn: cn=Manager,dc=ldap,dc=heyudesign,dc=cn
objectClass: organizationalRole
cn: Manager
description: LDAP Manager

dn: ou=rpausers,dc=ldap,dc=heyudesign,dc=cn
objectClass: organizationalUnit
ou: rpaUsers
  • 将 dc=ldap,dc=heyudesign,dc=cn 替换成实际的 BASE DN
  • 将 ldap 和 rpaUsers 替换成你要想的组名
  1. 应用 org.ldif
ini 复制代码
ldapadd -x -D cn=Manager,dc=ldap,dc=heyudesign,dc=cn -W -f org.ldif

根据提示输入 root 用户的密码,一切顺利将得到下图所示的结果

安装管理工具

接下来安装 PHPLDAPAdmin,用它管理 LDAP,这里涉及5个步骤

  1. 安装 PHPLDAPAdmin

    yum install -y phpldapadmin

  2. 修改 phpldapadmin.conf

bash 复制代码
vim /etc/httpd/conf.d/phpldapadmin.conf

将 phpldapadmin.conf 文件中的 Require local 改成 Require all granted,其目的是开启外网访问

  1. 修改 config.php
arduino 复制代码
vim /etc/phpldapadmin/config.php

取消以下内容的注释

php 复制代码
$config->custom->appearance['timezone'] = 'Australia/Melbourne';
// 这里写你的Base DN
$servers->setValue('server','base',array('dc=ldap,dc=heyudesign,dc=cn')); 
$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','port',389);
$servers->setValue('login','attr','dn');
$servers->setValue('appearance','show_create',true);
$servers->setValue('login','anon_bind',false); // 不允许匿名登录

注释以下内容

bash 复制代码
$servers->setValue('login','attr','uid');
  1. 启动 httpd 服务
bash 复制代码
systemctl start httpd
systemctl enable httpd
  1. 在本地浏览器访问 http://server_ip/phpldapadmin/, 将得到下图所示的内容
  1. 登录之后,界面的左侧将显示之前用 org.ldif 创建的组,如下图所示

你可以单击上图中显示的创建一个子条目按钮,新建后的条目将显示在左侧列表。上图显示了新增的子条目,一个是用户(he yu),另一个是用户所属的组(user)。

推荐阅读

  1. 在CentOS 7.5上使用GitLab CI/CD建立持续部署pipeline
相关推荐
独隅17 小时前
本地大模型训练与 API 服务部署全栈方案:基于 Ubuntu 22.04 LTS 的端到端实现指南
服务器·python·语言模型
dustcell.17 小时前
高级课前复习2--RHCSA
linux·运维·服务器
Anthony_23117 小时前
五、交换技术与VLAN
服务器·网络·网络协议·http·https·udp·信息与通信
fanruitian17 小时前
k8s 更新镜像
java·服务器·kubernetes
fanruitian17 小时前
k8s 创建service 暴漏集群ip
服务器·网络·kubernetes
Source.Liu17 小时前
【办公平台】在 Ubuntu 上部署 Synapse Matrix 服务器(本地网络版)
服务器·ubuntu
LYOBOYI12317 小时前
qml程序运行逻辑
java·服务器·数据库
袁煦丞 cpolar内网穿透实验室17 小时前
mysql_exporter+cpolar远程监控 MySQL 不卡壳!cpolar 内网穿透实验室第 712 个成功挑战
服务器·数据库·mysql·远程工作·内网穿透·cpolar
jushisi17 小时前
下载eclipse MAT(Memory Analyzer Tool)
java·服务器
源代码•宸17 小时前
GoLang八股(Go并发)
服务器·面试·golang·cap·gmp·三色标记法·混合写屏障