@Linux搭建LDAP认证服务

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(常用名称)

简称名词全称相关含义
dcDomain Component域名的部分,其格式是将完整的域名分成几部分;如域名为example.com变成dc=example,dc=com(一条记录的所属位置)
ouOrganization Unit组织单位,组织单位可以包含其他各种对象(包括其他组织单元),如“oa组”(一条记录的所属组织)
cnCommon Name公共名称,如“Thomas Johansson”(一条记录的名称)
dnDistinguished 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.10CentOS Linux release 7.4Ldap服务器openldap2.4
192.168.1.11CentOS Linux release 7.4Ldap客户端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

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值