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
相关推荐
qwy71522925816310 分钟前
13-R数据重塑
服务器·数据库·r语言
anddddoooo3 小时前
域内证书维权
服务器·网络·网络协议·安全·网络安全·https·ssl
zhoupenghui1683 小时前
golang时间相关函数总结
服务器·前端·golang·time
努力的小T3 小时前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
不修×蝙蝠4 小时前
HTTP 协议(Ⅲ)
服务器·http·javaee·http协议
梨落秋溪、5 小时前
输入框元素覆盖冲突
java·服务器·前端
猫猫的小茶馆5 小时前
【网络编程】UDP协议
linux·服务器·网络·网络协议·ubuntu·udp
鱼嘻5 小时前
Linux自学day23-进程和线程
linux·服务器·c语言·进程和线程
爆更小小刘6 小时前
Linux下基本指令(4)
linux·运维·服务器
yuanbenshidiaos6 小时前
【linux核心命令】
linux·服务器·数据库