目录
- 1 OpenLDAP简介
- 1.1 LDAP介绍
- 1、什么LDAP
- 2、为什么要使用LDAP
- 3、LDAP 的特点
- 4、LDAP常用关键字
- 5、LDAP的objectClass
- 6、LADP使用场景
- 1.2 OpenLDAP介绍
- 1、什么OpenLDAP
- 2、OpenLDAP特点
- 3、OpenLDAP的组件
- 2 OpenLDAP安装
- 3 简单使用
- 3.1 创建用户
- 1、创建ou
- 2、创建Group
- 3、创建User Account
- 4、 为用户填写其他属性
1 OpenLDAP简介
1.1 LDAP介绍
1、什么LDAP
LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是一种用于访问分布式目录服务的网络协议。它提供了一种标准化的方法来查询和操作目录中的信息,这些信息通常以树状结构组织,用于存储用户、组织和其他实体的数据。
2、为什么要使用LDAP
LDAP是开放的Internet标准,市场上或者开源社区的绝大多数软件都支持LDAP协议。简单来说,LDAP协议最大的好处就是能统一管理用户密码,如果有新人报道,只需要创建一个用户就能登录公司的所有平台(gitlab、jumpserver、监控等等),离职时一键删除即可。
3、LDAP 的特点
LDAP有如下特定:
- 1.目录结构:LDAP 目录是树状结构组织,每个节点称为条目(Entry),每个条目包含属性(Attributes)。
- 2.基于标准的协议:LDAP 遵循一系列 RFC(Request for Comments)文档,确保了不同系统间的兼容性和互操作性。
- 3.分层命名空间:LDAP 使用分层的命名空间(称为 Distinguished Names, DN),用于唯一标识目录中的每个条目。
- 4.搜索和访问控制:LDAP 提供了强大的搜索功能,允许用户根据属性值查询条目。同时,它支持复杂的访问控制机制,以保护目录数据的安全。
- 5.可扩展性:LDAP 支持通过添加新的条目和属性来扩展目录结构,同时保持向后兼容性。
4、LDAP常用关键字
- dn(Distinguished Name):区分名称,LDAP中每个条目都有自己的dn,dn是该条目在整棵树中的唯一标识,如同文件系统中,带路径的文件名就是DN。
- rdn(Relative dn):相对区别名称,好比linux中的相对路径。
- dc(Domain Component):域名组件。其格式是将完整的域名分成几部分,如将http://example.com变成dc=example,dc=com。
- uid(User ID):用户ID,如 san.zhang。
- ou(Organization Unit):组织单元。
- cn(Common Name):公共名称。
- sn(surname):姓氏。
- c(Country):国家,如“CN”或者“US”。
- o(Organization):组织名,如XXX银行,XXX部门,XXX公司等等。
这里把dn当做用户唯一主键, cn是common name,应该等同于用户名,因为用户名必须唯一,通常为邮箱前缀,比如ryan.miao. sn作为姓氏, uid作为用户id。通常用户id也是唯一的。所以在使用ldap做认证的时候,大概逻辑如下: - 配置ldap host, admin, admin pass
- 用户登录时传递username
- 读取配置的ldap信息,查询cn或者uid等于username的数据
- 取出第一个记录, 获得dn, 根据dn和password再次去ldap服务器认证。即必须保证cn或uid是全局唯一的
5、LDAP的objectClass
objectClass | 含义 |
---|---|
olcGlobal | 全局配置文件类型, 主要是cn=config.ldif 的配置项 |
top | 顶层的对象 |
organization | 组织,比如公司名称,顶层的对象 |
organizationalUnit | 重要, 一个目录节点,通常是group,或者部门这样的含义 |
inetOrgPerson | 重要, 我们真正的用户节点类型,person类型, 叶子节点 |
groupOfNames | 重要, 分组的group类型,标记一个group节点olcModuleList配置模块的对象 |
6、LADP使用场景
LDAP 通常用于以下场景:
- 身份验证:验证用户身份,允许或拒绝对系统资源的访问。
- 授权:管理用户权限,控制对目录数据的访问。
- 目录服务:存储和检索关于用户、组织结构和其他实体的信息。
- 单点登录(SSO):作为身份提供者,允许用户使用一组凭据访问多个相关但独立的系统。
1.2 OpenLDAP介绍
1、什么OpenLDAP
OpenLDAP 是 LDAP 协议的一个开源实现,由 OpenLDAP 项目提供。它包括服务器、客户端库、工具和示例应用程序,用于构建和操作 LDAP 目录服务。OpenLDAP 可以运行在多种操作系统上,包括 Linux、Unix、Windows 等。
2、OpenLDAP特点
OpenLADP的特点如下:
- 1.开源:OpenLDAP 是开源软件,可以自由下载、使用和修改。
- 2.跨平台:OpenLDAP 可以在多种操作系统上运行,包括 Linux、Unix、Windows 等。
- 3.灵活性:OpenLDAP 支持自定义模式(Schemas),允许管理员定义新的数据类型和对象类,以满足特定的业务需求。
- 4.安全性:OpenLDAP 支持多种安全机制,包括 TLS/SSL 加密、SASL 认证等,确保数据传输的安全性。
- 5.性能:OpenLDAP 经过优化,能够处理大量的并发访问和复杂的搜索操作。
- 6.工具和库:OpenLDAP 提供了一系列工具和库,方便开发者集成和操作 LDAP 服务。
3、OpenLDAP的组件
OpenLDAP有四个主要组件:
- slapd -独立的LDAP守护进程和相关的模块和工具
- lloadd—独立的LDAP负载均衡代理服务器
- 实现LDAP协议和ASN.1基本编码规则的库
- 客户端软件:ldapsearch、ldapadd、ldapdelete等
此外,OpenLDAP项目还有许多子项目:
- Java 的LDAP类库
- JDBC-LDAP - Java JDBC-LDAP桥接驱动
- ldapc++ -用于c++的LDAP类库
- 内存映射数据库库
2 OpenLDAP安装
环境:Ubuntu 22.04
使用docker安装
mkdir ldap
cd ldap
vim docker-compose.yaml
#######
version: '2'
services:
openldap:
image: osixia/openldap:1.5.0 ### 如果有私有仓库可以从自己的私有仓库拉取镜像
container_name: openldap
restart: always
environment:
LDAP_LOG_LEVEL: "256"
LDAP_ORGANISATION: "test" ### 您的组织名称
LDAP_DOMAIN: "smile.test" ### 公司域名
LDAP_BASE_DN: "dc=smile,dc=test" ### 根据域名组成
LDAP_ADMIN_PASSWORD: "smile123" ### 密码自己来设置
LDAP_CONFIG_PASSWORD: "smile123"
LDAP_READONLY_USER: "false"
#LDAP_READONLY_USER_USERNAME: "readonly"
#LDAP_READONLY_USER_PASSWORD: "readonly"
LDAP_RFC2307BIS_SCHEMA: "false"
LDAP_BACKEND: "mdb"
#LDAP_TLS: "true"
#LDAP_TLS_CRT_FILENAME: "smile.test.pem"
#LDAP_TLS_KEY_FILENAME: "smile.test.key"
#LDAP_TLS_DH_PARAM_FILENAME: "dhparam.pem"
#LDAP_TLS_CA_CRT_FILENAME: "ca.crt"
#LDAP_TLS_ENFORCE: "false"
#LDAP_TLS_CIPHER_SUITE: "SECURE256:-VERS-SSL3.0"
# LDAP_TLS_VERIFY_CLIENT: "demand"
LDAP_REPLICATION: "false"
#LDAP_REPLICATION_CONFIG_SYNCPROV: 'binddn="cn=admin,cn=config" bindmethod=simple credentials="$$LDAP_CONFIG_PASSWORD" searchbase="cn=config" type=refreshAndPersist retry="60 +" timeout=1 starttls=critical'
#LDAP_REPLICATION_DB_SYNCPROV: 'binddn="cn=admin,$$LDAP_BASE_DN" bindmethod=simple credentials="$$LDAP_ADMIN_PASSWORD" searchbase="$$LDAP_BASE_DN" type=refreshAndPersist interval=00:00:00:10 retry="60 +" timeout=1 starttls=critical'
#LDAP_REPLICATION_HOSTS: "#PYTHON2BASH:['ldap://ldap.example.org','ldap://ldap2.example.org']"
KEEP_EXISTING_CONFIG: "false"
LDAP_REMOVE_CONFIG_AFTER_SETUP: "true"
#LDAP_SSL_HELPER_PREFIX: "ldap"
tty: true
stdin_open: true
volumes:
- /opt/openldap/ldap:/var/lib/ldap
- /opt/openldap/slapd.d:/etc/ldap/slapd.d
- /opt/openldap/certs:/container/service/lapd/assets/certs
ports:
- "389:389"
- "636:636"
# For replication to work correctly, domainname and hostname must be
# set correctly so that "hostname"."domainname" equates to the
# fully-qualified domain name for the host.
domainname: "smile.test"
hostname: "ldap-server"
phpldapadmin:
image: osixia/phpldapadmin:latest
container_name: phpldapadmin
restart: always
environment:
PHPLDAPADMIN_LDAP_HOSTS: "openldap" ### 如果部署后登录不进去有可能是这里出了问题,直接换为部署openldap服务的公网IP试试
PHPLDAPADMIN_HTTPS: "false"
ports:
- "50081:80"
depends_on:
- openldap
self-service-password:
container_name: self-service-password
image: tiredofit/self-service-password:latest
restart: always
ports:
- "50080:80"
environment:
- LDAP_SERVER=ldap://openldap:389
- LDAP_BINDDN=cn=admin,dc=smile,dc=test
- LDAP_BINDPASS=XXXX
- LDAP_BASE_SEARCH=dc=smile,dc=test
- MAIL_FROM=it@open.com
- MAIL_FROM_NAME=账号自助服务平台
- SMTP_DEBUG=0
- SMTP_HOST=smtp.qiye.aliyun.com
- SMTP_USER=it@open.com
- SMTP_PASS=jYda52VZ8Ftw1111
- SMTP_PORT=465
- SMTP_SECURE_TYPE=ssl
- SMTP_AUTH_ON=true
- NOTIFY_ON_CHANGE=true
volumes:
- /etc/localtime:/etc/localtime
- /opt/openldap/self-service-password/htdocs:/www/ssp
- /opt/openldap/self-service-password/logs:/www/logs
deploy:
resources:
limits:
memory: 2G
reservations:
memory: 512M
### 运行
docker-compose up -d
登录地址:ip:50081
用户名:LDAP_BINDDN cn=admin,dc=smile,dc=test
密码:LDAP_ADMIN_PASSWORD
3 简单使用
3.1 创建用户
这里先在dc下面创建一个ou=group和一个ou=person。暂时先不按部分区分,如果想再按部分区分则就先创建一个ou,再在该ou下创建一个ou=group即可。
1、创建ou
提交后可以看到如下:
创建 group 和 person 两个ou
2、创建Group
在ou=group下创建dev
3、创建User Account
在ou=people下创建用户
4、 为用户填写其他属性
为用户添加真实姓名和邮箱(有些系统需要用户的这两个信息!比如gitlab)
再添加一个属性,此时选择:Email
配置完成后的效果: