目录服务介绍

不同于文件系统的目录

目录的英文单词是directory,当查看关于目录服务的相关资料时,就会发现,凡是讲的是目录服务的时候,就会将directory首字母大写,无论directory是出现在文章开头还是中间位置;如果指的是文件系统的目录时,directory首字母小写。

目录服务是企业网络的核心基础软件架构

目录服务作为网络核心底层的基础架构,通常不会直接跟用户交互,它都是作为软件核心的底层架构,在这个底层的架构之上企业会安装部署各种应用系统。

  • 如此重要的服务并不被大多数人熟悉
  • 很少独立使用,与其他服务结合使用
  • 对于一些小型企业,可能不会部署目录服务,完全可以部署一个一个独立的应用系统。但是对于大型企业来说,基于底层架设一个互通的、共享的、底层的目录服务,在它基础上部署各个应用的话,这些应用之间是可以进行信息互通、资源共享,可以达到企业信息资源融合的效果。设置基于一个完善的目录服务,你可以把企业中所有的系统纳入到目录服务中,使得所有系统的底层都是打通的,这样可以实现企业级别的完整信息的大融合。
  • 微软的企业战略(给企业挖坑)

目录服务我们或多或少都使用过,最近的就是微软的活动目录。2000年时微软推出了windows2000操作系统,升级了以前的WindowsNT架构的操作系统,在Windows2000里面正式推出了活动目录这一概念。从那时开始之后,微软就开始打造自己的企业战略(给企业挖坑)。微软的认证教材升级了,加入了活动目录的考试。在之后的微软面向企业的各种应用系统上面,都开始不断的集成和结合到它的活动目录上去,如微软的Exchange邮件服务器,以前的Exchange邮件服务器都是独立部署的,但2000年之后的Exchange产品,都开始把Exchange的一部分和邮件不是太相关的功能拿出来放到活动目录里面,由活动目录进行统一的管理。之后微软的一些面向企业的产品,都基于底层的活动目录。这样的结果就是,一旦底层的基础架构目录服务用了微软的活动目录了,那将来在活动目录上部署应用服务时,邮件系统首选的肯定是Exchange,要选择的应用系统最完美的和活动目录进行集成结合使用的,肯定首选微软的产品。活动目录本身是免费的,以后用户选择使用活动目录,将来选择产品时只要微软有,那肯定首选微软的服务。

目录服务相当于一本书的目录,通过浏览目录,就大致知道哪些内容了。

目录服务把网络中所有的资源信息都要存放到目录服务里,那你只需要大概浏览一下目录服务里面的条目,就知道网络里有什么资源了。当然,目录服务只是存储的是应用服务相关的条目信息,具体的服务当然是在具体的应用系统上。

数据集中存储的应用需求

  • 集中存储、集中管理、集中定位
  • 身份认证、公钥分发、邮件路由、地址查询、应用配置、单点登录(SSO)
  • 面向大量频繁的数据查询操作,少量写操作(基本不变的数据)
  • 权限限制授权用户查询

目录服务的应用场景

  • 用户认证
  • 机器认证
  • 用户和组
  • 电话地址薄
  • 组织呈现
  • 资产跟踪
  • 集中应用配置
  • PBX / 网络设备配置

目录服务的软件架构

  • 不同于SQL的后端层级化的数据库,目录服务主要是面向查询操作,传统的SQL数据库不适用于目录服务。
  • 目录服务有自己特殊的数据库类型,叫做data类型的数据库,这种数据库是基于键值对的方式存储数据。
  • 与DNS的分布式结构更接近,在命名上通常保持一致。DNS域名可以很好的识别和标识公司的名称。
  • 标准统一的服务前端应用查询访问接口(OSI X.500)
  • 统一的客户端查询组件和协议
  • 支持通信会话加密
  • 与自建的数据库开发相比
    • 有专门针对查询服务的数据库结构类型
    • 统一标准的查询接口及通信协议(DAP)

轻量目录服务

  • LDAP(Lightweight Directory Access Protocol)
  • X.500标准 太重量了,它是基于OSI七层模型来定义的标准,事实情况,我们都是使用TCP / IP协议来通信的。我们将X.500中目录服务的拿出来,一些不太重要的舍弃掉,把X.500部分特性集提取出来之后,形成一个轻量目录服务标准,然后基于TCP / IP 协议通信(TCP 389)定义了 LDAP。
  • 可以构建面向互联网和本地网络的目录服务
  • 最常见的LDAP服务
    • 微软的活动目录 AD,企业网络资源全部加入域,统一存储、统一呈现、统一管理、安全边界
    • Novell eDirectory
  • 命名空间通常与DNS命名保持一致,在目录服务内所有存储对象都有唯一的路径名称

目录服务的命名空间

  • 全局路径:Distinguished Name(DN)
  • 相对路径:Relative Distinguished Name(RDN)
  • 目录容器:Directory Container(DC)
  • 组织单位:Organisation Unit(OU)
  • 通用名:common name(CN)
  • 数据项:entries(object、class)
    • 一组预先定义的属性集合
    • uid、姓、名、显示名、账号、邮箱、电话、地址……
  • 基础架构:Schema
    • objectClass 定义所有对象类型及其属性
    • Schema 可按应用需求扩展,每个对象在ASN. 1结构中都有自己的位置——SNMP

传统的命名空间

  • 无固定的命名规则
  • 按照地理空间命名

  • uid=babs,ou=People,dc=ex,dc=com

安装DNS的方式进行命名

image.png

LDAP协议

LDAP最初作为 TCP / IP 客户端与 X.500 目录服务网关之间的通信协议

LDAPv3

  • 强身份认证和数据加密
  • 基于证书的SSL加密
  • 使用Unicode编码实现国际化
  • Schema 可扩展

安装LDAP

修改主机名

1
2
3
4
5
6
7
sudo vim /etc/cloud/cloud.cfg
preserve_hostname: true

sudo vi /etc/hosts
# 修改host解析,将本机的ip地址解析到 ldap.lab.com

sudo hostnamectl set-hostname ldap.lab.com # 修改主机名

安装OpenLDAP

1
2
# Ubuntu linux中默认的LDAP实现
sudo apt install slapd ldap-utils

slapd 是服务器后台进程(即 LDAP server)

ldap-utils (ldap工具包)

1
2
3
4
5
ldapadd      # 添加数据
ldapdelete # 删除数据
ldapmodify # 修改
ldapsearch # 查询
ldappasswd # 修改密码

修改配置文件

1
2
3
4
sudo vim /etc/ldap/ldap.conf

BASE dc=lab,dc=com
URI ldap://ldap.lab.com:389

初始化配置

1
2
sudo dpkg-reconfigure slapd
# 目录服务的数据库类型选择MDB

验证

1
2
3
4
5
6
sudo slapcat
sudo tree /etc/ldap/slapd.d/
# 默认管理员账号是admin

ldapsearch -x -LLL -b dc=lab,dc=com
# -x参数,简单身份认证; -LLL参数 以LDIF文件格式显示结果;-b参数 基地址

基本操作

添加记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
vi add.ldif

dn: ou=People,dc=lab,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=lab,dc=com
objectClass: organizationalUnit
ou: Group

dn: cn=developers,ou=Group,dc=lab,dc=com
objectClass: posixGroup
cn: developers
gidNumber: 3000

dn: uid=zhangsan,ou=People,dc=lab,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: zhangsan
sn: zhang
givenName: san
cn: san zhang
displayName: San Zhang
uidNumber: 2000
gidNumber: 3000
userPassword: pass123
loginShell: /bin/bash
homeDirectory: /home/zhangsan/

导入到目录数据库

1
2
3
4
5
6
ldapadd -x -D cn=admin,dc=lab,dc=com -W -f add.ldif
# 参数-x 表示简单身份认证;-D表示 指定管理员;-W 表示提示输入密码;-f 指定ldif文件


# 验证
ldapsearch -x -LLL -b dc=lab,dc=com 'uid=zhangsan' cn sn gidNumber uidNumber givenName

查询LDAP对象类型

修改记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
vi modify.ldif

dn: uid=zhangsan,ou=People,dc=lab,dc=com
changetype: modify
replace: givenName
givenName: Michael
-
replace: sn
sn: Jordan


# 修改
ldapmodify -x -D cn=admin,dc=lab,dc=com -W -f modify.ldif

# 验证
ldapsearch -x -LLL -b dc=lab,dc=com uid=zhangsan cn sn gidNumber uidNumber givenName

web管理

web应用程序 ldap-account-mana(lam)

依赖一些软件包

1
2
3
4
5
6
7
8
sudo apt install apache2
sudo apt install php php-cgi libapache2-mod-php php-common php-pear php-mbstring

sudo a2enconf php7.2-cgi
sudo systemctl reload apache2
sudo systemctl restart apache2

sudo apt install ldap-account-manager

通过浏览器访问:http://192.168.1.108/lam

点击右上角的 LAM configuration

image.png

在Account types选项里

保存

简单创建账号、组

只要知道ip地址,都可以来访问管理页面的
处于安全性考虑,不希望都能访问管理页面,只希望来自安全地址的访问请求来登录管理页面。要达到这种效果,可以编辑配置文件。

1
2
3
4
5
6
sudo vi /etc/apache2/conf-enabled/ldap-account-manager.conf
#Require all granted
Require ip 127.0.0.1 192.168.10.0/24 192.168.18.0/24

# 重启服务
sudo systemctl restart apache2

Windows客户端

图形化界面集中式认证

GINA 提供 windows 系统登陆界面

  • 支持本机、域账号登录

pGina开源身份认证提供者

  • 集成并替换Windows系统默认的GINA
  • 通过插件支持大量身份验证数据存储(LDAP、MySQL、RADIUS)

下载安装稳定版:http://pgina.org

2.png

点击保存,确定

在simulation选项上可以测试,如果一切没有问题,就重启计算机

linux客户端

域名解析

1
echo "192.168.1.108 ldap.lab.com" | sudo tee -a /etc/hosts

安装客户端

1
2
3
4
5
6
7
8
sudo apt install libnss-ldap libpam-ldap ldap-utils nscd
# 安装过程指定ldap的地址
ldap://ldap.lab.com
# 指定目录的基地址
dc=lab,dc=com
# 使用v3协议
# 指定管理员账号
cn=admin,dc=lab,dc=com

修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo vi /etc/nsswitch.conf
passwd: compat systemd ldap
group: compat systemd ldap
shadow: compat ldap


sudo vi /etc/pam.d/common-password
# 删除 use_authtok

sudo vi /etc/pam.d/common-session
# 添加一行内容
session optional pam_mkhomedir.so skel=/etc/skel umask=077


# 重启服务
sudo systemctl restart nscd.service

验证

1
getent passwd zhangsan