@Linux搭建LDAP认证服务
标签: @Linux搭建LDAP认证服务 Java博客 51CTO博客
2023-04-02 18:23:34 224浏览
文章目录
- 1.Ldap概述
- 2.Ldap的用途
- 3.Ldap的数据模型
- 1》数据模型叙述
- 2》目录树简述
- 3》Ldap目录树说明
- 2.搭建LDAP服务器
- 1》环境准备
- 2》Ldap服务搭建
- 3.Ldap Web-UI安装
- 1》安装PHPLDAPAdmin
1.Ldap概述
LDAP(Light Directory Access Portocol)轻量级目录访问协议:
LDAP是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。
简单理解起来就是LADP包含一个数据库存储了树状结构组织数据,和一套协议,第三方可通过这套协议进行数据的查询与搜索的功能。它用的协议基于X.500标准的轻量级目录访问协议,是一种开放Internet标准,LADP协议是跨平台的Internt协议,总结来说LDAP是由目录数据库和一套访问协议组成的系统
现在许多产品都加入了对LDAP的支持,可以通过简单的配置与服务器做认证服务。用户只需要使用一个密码登录众多个支持LDAP协议的应用,由应用自己去LDAP Server去认证用户信息,不仅做到了用户信息的统一管理,对于应用认证也十分方便。
2.Ldap的用途
为什么使用ldap
众所周知,当一个公司规模之后,会有无数的系统进行工作,如果每一个系统都需要注册自己的用户名,每一个系统的用户名与密码可能都不一样。对个人来说就是一件折腾的事情,从公司的IT安全角度来说更是麻烦。所以需要统一认证,单点登录。
LDAP就是最适合在单点登录中使用的系统了。
因为LDAP是一个开放的,中立的,工业标准的应用协议,它支持跨平台,数据配置简单且功能单一,稳定性高且查询性能好,使用它做认证服务可降低重复开发和对接的成本
3.Ldap的数据模型
1》数据模型叙述
LDAP 的基本数据模型就是一种树状的组织数据
LDAP的数据是树状结构, 所有条目(或者对象)都定义在树结构中。条目下的树状结构称为目录信息树(DIT)。一个完整的条目有唯一可识别的名称,我们叫之为区别名(DN)。在DN的子节点下的一个单独节点或者路径,我们称之为RDU。通常一个条目(或者对象)在存储在这两种类型对象中
1)容器(container):这种对象本身可以包含其他对象。 例如:root(目录树的根元素,它实际上并不存在),c(国家/地区),ou(组织单位)和dc(域)。 容器(container)与与文件系统中的目录相当。
2)叶子节点(leaf):这种对象位于节点的末端,不能再包含其它对象。 例如person,InetOrgPerson,groupofNames。
2》目录树简述
目录树概念:
1)目录树:在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目。
2)条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)。
3)对象类:与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必须属性也会被继承下来。
4)属性:描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性有必须属性和非必须属性。LDAP里的简称概述:
1)o:organization(组织-公司)
2)ou:organization unit(组织单元-部门)
3)c:countryName(国家)
4)dc:domainComponent(域名)
5)sn:suer name(真实名称)
6)cn:common name(常用名称)
简称 |
名词全称 |
相关含义 |
dc |
Domain Component |
域名的部分,其格式是将完整的域名分成几部分;如域名为example.com变成dc=example,dc=com(一条记录的所属位置) |
ou |
Organization Unit |
组织单位,组织单位可以包含其他各种对象(包括其他组织单元),如“oa组”(一条记录的所属组织) |
cn |
Common Name |
公共名称,如“Thomas Johansson”(一条记录的名称) |
dn |
Distinguished Name |
“uid=songtao.xu,ou=oa组,dc=example,dc=com”,一条记录的位置(唯一) |
3》Ldap目录树说明
如上babs条目中:
DN:uid=babs,ou=people,dc=example,dc=com
相对于ou=people,dc=example,dc=com 节点的RDN:uid=babs ObjectClass:Person
2.搭建LDAP服务器
1》环境准备
主机 |
系统 |
服务 |
192.168.1.10 |
CentOS Linux release 7.4 |
Ldap服务器openldap2.4 |
192.168.1.11 |
CentOS Linux release 7.4 |
Ldap客户端openldap-clients2.4 |
2》Ldap服务搭建
#安装OPenLDAP安装包
shell> yum -y install openldap-servers openldap-clients
#生成密钥(记住输出结果,后续会将加密后的结果设置为初始用户的密码)
shell> slappasswd -s zeny
{SSHA}jdymV5MGrZt8iI4Wdn0dAqty+LPY0Lq9
#修改ldap目录所属用户组
shell> chown ldap:ldap /var/lib/ldap/*
#启动ldap服务
shell> systemctl restart slapd
#端口确认
shell> netstat -antup | grep -i 389
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 1149/slapd
tcp6 0 0 :::389 :::* LISTEN 1149/slapd
#导入基础模块(出现adding new entry字样表示导入成功)
shell> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
shell> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
shell> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
#配置域信息(创建changes.ldif文件自定义域,将要替换的部分更改为自己的数据)
vim /etc/openldap/schema/changes.ldif
# 修改域名
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
# 注意修改
olcSuffix: dc=zeny,dc=com
# 修改管理员用户
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
# 注意修改
olcRootDN: cn=admin,dc=zeny,dc=com
# 修改管理员密码
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
# 替换为 slappasswd 生成后的结果
olcRootPW: {SSHA}jdymV5MGrZt8iI4Wdn0dAqty+LPY0Lq9
# 修改访问权限
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=admin,dc=zeny,dc=com" read by * none
#修改dn.base
#dn.base="cn=admin,dc=zeny,dc=com" read by * none
#导入ldap配置(输出内容如下为导入成功)
shell> ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/changes.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={1}monitor,cn=config"
#创建域和组织(创建文件basedomain.ldif)
shell> cat /etc/openldap/schema/basedomain.ldif
dn: dc=zeny,dc=com
dc: zeny
objectClass: top
objectClass: domain
dn: ou=People,dc=zeny,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=zeny,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
#导入域和组织配置(密码输入初始用户密码:zeny)
shell> ldapadd -x -D cn=admin,dc=zeny,dc=com -W -f /etc/openldap/schema/basedomain.ldif
Enter LDAP Password:
adding new entry "dc=zeny,dc=com"
adding new entry "ou=People,dc=zeny,dc=com"
adding new entry "ou=Group,dc=zeny,dc=com"
#查看用户列表
shell> ldapsearch -x -b "ou=People,dc=zeny,dc=com" | grep dn
dn: ou=People,dc=zeny,dc=com
#测试配置
shell> slaptest -u
config file testing succeeded
3.Ldap Web-UI安装
管理Ldap
前面安装完OpenLDAP后,大部分用户/用户组管理操作都是通过命令行方式,操作复杂且容易出错,所以在本文中引入LDAP管理工具的安装使用说明。常见的LDAP管理工具有:
phpLDAPadmin和LDAP Admin Tool,后者是客户端工具,使用到期后需购买或者破解,笔者尝试使用一段时间发现该工具在Mac上很容易崩溃,所以在此推荐phpLDAPadmin,它是基于php开发的一个web平台,有部署过程,但维护相对简单,唯一的遗憾就是此项目只维护到2012年,所以存在较大的兼容性问题
1》安装PHPLDAPAdmin
yum安装phpldapadmin
#防火墙配置(ldapserver的默认端口为389,开通防火墙端口,否则可能登录会出错,或者直接关闭防火墙也可以
shell> firewall-cmd --zone=public --add-port=389/tcp --permanent
shell> firewall-cmd --permanent --add-service=ldap
shell> firewall-cmd --reload
#关闭SELinux
shell> setenforce 0
shell> sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#安装epel源
shell> wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/epel-release-7-11.noarch.rpm
shell> rpm -ivh epel-release-7-11.noarch.rpm
#安装phpldapadmin和依赖包
shell> yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml
shell> yum -y install phpldapadmin
-----------------------------------------------------------------------------------------------
#下载不下来,可以手动安装phpldapadmin(正常可忽略此步)
shell> wget https://nchc.dl.sourceforge.net/project/phpldapadmin/phpldapadmin-php5/1.2.3/phpldapadmin-1.2.3.tgz
shell> tar -xvzf phpldapadmin-1.2.3.tgz -C /var/www/
shell> cd /var/www/html/
shell> mv phpldapadmin-1.2.3 phpldapadmin
--------------------------------------------------------------------------------------------
#phpldapadmin文件部署到apache
shell> ln -s /usr/share/phpldapadmin /var/www
#配置修改(/etc/phpldapadmin/config.php)
vim /etc/phpldapadmin/config.php #注意行首不要有空格:
$servers->newServer('ldap_pla');
$servers->setValue('server','name','zeny-Ldap');
$servers->setValue('server','host','192.168.1.10');
$servers->setValue('server','port',389);
$servers->setValue('server','base',array('dc=zeny,dc=com'));
$servers->setValue('login','auth_type','session');
$servers->setValue('login','attr','dn');
// $servers->setValue('login','attr','uid'); //注释这里 因为修改的是php用"//"注释代码
#配置修改(/etc/httpd/conf.d/phpldapadmin.conf)
vim /etc/httpd/conf.d/phpldapadmin.conf
<Directory /usr/share/phpldapadmin/htdocs>
<IfModule mod_authz_core.c>
# Apache 2.4
Require local
#Require 172.18.238.34
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
#Apache 2.2
Order Deny,Allow
Allow from all
#Deny from all
#Allow from 127.0.0.1
#Allow from ::1
</IfModule>
</Directory>
#服务启动
shell> systemctl restart httpd
#web访问phpldapadmin
http://192.168.1.10/phpldapadmin/index.php
docker安装phpldapadmin:
配置的Ldap地址:–env PHPLDAPADMIN_LDAP_HOSTS=192.168.1.10
配置不开启HTTPS:–env PHPLDAPADMIN_HTTPS=false(默认是true)
容器运行以后访问http://host:10101即可Docker安装
#容器安装
docker run -d --privileged -p 10101:80 --name myphpldapadmin \
--env PHPLDAPADMIN_HTTPS=false --env PHPLDAPADMIN_LDAP_HOSTS=192.168.1.10 \
--detach osixia/phpldapadmin
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
展开评论