ubuntu server-LDAP

LDAP

看书前先看目录

理解

不同于文件系统的目录(D/d) -> 首字母大写是目录服务,首字母小写的文件系统目录

目录服务是企业网络的核心基础结构

1
2
3
4
- 如此重要的服务并不被大多数熟悉
- 很少独立使用,与其他服务结合使用
- 微软的企业战略(埋坑: 一旦底层用了微软的AD,你以后的一些肯定也要用我的集成的产品)
- 类似: 每一本书都有自己的目录

数据集中存储的应用需求

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

我是否应该使用目录服务(根据自己公司情况)

1
2
3
4
5
6
7
8
- 用户认证
- 机器认证
- 用户和组
- 电话地址薄
- 组织呈现
- 资产跟踪
- 集中应用配置
- PEX / 网络设备配置

DAP

软件架构

  • 不同与SQL的后端层级化数据库(主要面向查询操作
  • 与DNS的分布式结构更接近,命名上通常与DBS命名保持一致(在目录服务内所有存储对象都有唯一的路径名称)
  • 数据库基于键值对的方式存储数据
  • 标准统一的服务前端应用查询访问接口(基于OSI协议栈, X.500)
  • 统一的客户端查询组件和协议(C/S)
  • 支持通信会话加密
  • Directory information tree (DIT)

与自建数据库开发相比

  • 专门针对查询服务的数据库结构类型
  • 统一标准的查询结构以及通信协议(DAP ->目录访问协议)

LDAP

Lightweight Directoy Access Protocol 轻量目录访问服务

  • 命名上通常与DBS命名保持一致(在目录服务内所有存储对象都有唯一的路径名称)
  • 数据库基于键值对的方式存储数据
  • X.500标准的部分特性集, 各厂商不同
  • 基于TCP/IP协议通信(TCP 389)
  • 可构建面向互联网和本地网络的目录服务

最常见的LDAP服务

1
2
3
4
# 微软的活动目录 AD
企业网络资源全部加入域,统一存储、统一呈现、统一管理、安全边界

# Novell eDirectory

命名空间

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 全局路径: Distinguished Name (DN)
# 相对路径: Relative Distinguished
# 目录容器: Directory Container (DC)   每一层
# 组织单位:  Organisation Unit (OU)     通常按照部门划分
# 数据项: entries (object, class)
        一组预先定义的属性集合
        uid, 姓,名,帐号,邮箱,电话, 照片...

# 基础架构:Schema
        objectClass 定义所有对象类型及其属性
        Schame 可按应用需要扩展(美国对象在ASN.1结构中都有自己的位置 -- SNMP)

# 通用名: common name (CN)

传统命名空间

  • 无固定的命名规则
  • 按照地理空间命名
1
2
# 写法
uid=babs, ou=People, dc=example, dc=com

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

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

安装并配置LDAP

拿出一台服务器作为专门的LDAP的服务器,以后的身份认证都使用集中的LDAP的(不局限与操作系统,Web应用也可以,只要程序支持ldap就可以使用这个做身份认证)

先修改主机名:

1
2
3
4
5
6
7
sudo sed -i 's/preserve_hostname:false /preserve_hostname:true /g' /etc/cloud/cloud.cfg

echo "192.168.0.104 ldap.lab.com" | sudo tee -a /etc/hosts  # ip地址与名称的解析关系
# 修改主机名
sudo hostnamectl set-hostname ldap.lab.com

reboot

安装 OpenLDAP

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# Ubuntu Linux中默认的LDAP实现
sudo apt install slapd ldap-utils
# slapd 是服务端和后台进程(即LDAP server)
# ldap-utils  (ldap工具)
    ldapadd       # 添加数据
    ldapdelete    # 删除数据
    ldapmodify    # 修改
    ldapsearch    # 查询(最常使用)
    ldappasswd    # 修改密码
    ... ...

修改配置文件

1
2
3
4
  
# sudo vim /etc/ldap/ldap.conf
BASE    dc=lab,dc=com    # 目前和dns的域名保持一直即可
URI     ldap://ldap.lab.com:389    # 可以通过这个地址对..进行查询

初始化配置

1
2
3
4
5
# 一次就够了!!!
sudo dpkg-reconfigure slapd

# 还可以设置一次密码
# 数据库建议选择MDB

验证

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 多种验证方式
sudo slapcat

sudo tree /etc/ldap/slapd.d/   # 有内容就可

# 默认管理员帐号 admin

ldapsearch -x -LLL -b dc=lab,dc=com 
ldapsearch -x -LLL -b dc=lab,dc=com dn  # 后面的内容是筛选
# -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
30
31
32
33
# 保存信息到文件
# vim add.ldif

# ou: 物理的层级结构划分
dn: ou=People,dc=lab,dc=com
objectClass: organizationalUnit
ou: People
# 物理的
dn: ou=Group,dc=lab,dc=com  # ou的名称叫Group, 一个对象只能在一个ou中, ou是物理上的
objectClass: organizationalUnit
ou: Group

# 逻辑的
# 组帐号s
dn: cn=delevopment,ou=Group,dc=lab,dc=com   # 创建一个组,cn别名
objectClass: organizationalUnit
cn: delevopment
gidNumber: 3000
# 用户帐号
dn: uid=zhangsan,ou=People,dc=lab,dc=com   # 创建一个组,cn别名
objectClass: inetOrgPerson    # 继承某些对象类型
objectClass: posixAccount
objectClass: shadowAccount
uid: zhangsan
sn: zhang
givenName: san
cn: san zhang     # 别名
displayName: San Zhang
uidNumber: 2000
gidNumber: 3000    # 让用户加入某个组
userPassword: 123465
loginShell: /bin/bash
homeDirectory: /home/zhangsan/

导入:

1
2
3
4
5
ldapadd -x -D cn=admin,dc=lab,dc=com -W -f add.ldif
# -x    简单身份验证
# -D    指定管理员帐号(完整的别名: cn=admin,dc=lab,dc=com)   
# -W    提示输入密码
# -f    指定ldif文件

验证

1
2
3
4
ldapsearch -x -LLL -b dc=lab,dc=com 'uid=zhangsan' cn sn gidNumber uidNumber givenName

# 查看属性类型和值 参考网址
https://ldapwiki.com/wiki/ObkectClass#Types

修改数据 跟上面是类似的

Web管理

手动写配置太麻烦,图形化的简化了操作 Web应用程序(有很多种): ldap-account-manager (lam)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
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


# ldap-account-manager使用的数据库使用的是目录服务的数据库,但是他的数据也没有写到数据库中,而是存在了配置文件中
# 访问即可
# http:/192.168.0.104/lam

# 点击右上角 LAM configuration 配置  edit server... , 进行简单配置
# 其他配置根据自己需求来改

设置安全访问

1
2
3
4
5
sudo vim /etc/apache2/conf-enabled/ldap-account-manager.conf
    #Require all granted    注释掉所有ip可访问
    Require ip 127.0.0.1 192.168.0.0/24

# 重启服务

其他ldap基于web的管理工具

1
2
3
4
5
6
# phpLDAPAdmin
sudo apt install phpldapadmin

# 创建组帐号 
# 创建帐号
# ...

客户端

Windows客户端

win自带的GINA提供Windows系统登录界面, 支持本机、域账户登陆

pGina开源身份认证提供者 - 集成并替换window系统默认的GINA - 通过插件支持大量身份验证数据存储(LDAP, MySQL, RADIUS) - http://pgina.org 下载安装稳定版

进行一些配置

Linux客户端

域名解析

1
echo "192.168.0.104 ldap.lab.com" |sudo trr -a /etc/hostss

安装客户端

1
2
3
4
5
sudo apt install libnss-ldap libpam-ldap ldap-utils nscd
# 指定一些参数
ldap://ldap.lab.com
dc=lab,dc=com
cn=admin,dc=lab,dc=com

修改配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# sudo vim /etc/nsswitch.conf
passswd: compat systemd ldap
group: compat systemd    ldap
shadow: compat ldap


# sudo vim /etc/pam.d/common-password
    删除 use_authtok 这一小块

# sudo vim /etc/pam.d/common-session
    session optional  pam_mkhomedir.so skel=/etc/skel umask=077   # 允许创建用户主目录
 
sudo systemctl restart nscd.service

# 验证
getent passwd zhangsan 

reboot

# 登录的时候,点击 not list 才能进入刚才的帐号
0%