- 1 信息安全简介
- 1.1 信息安全发展史
- 1.2 信息安全等级保护
- 2 安全 OS
- 2.1 UNIX 系统安全
- 2.1.1 设置健壮的密码
- 2.1.2 删除所有的特殊账户
- 2.1.3 关闭不需要的服务
- 2.1.4 远程登陆管理
- 2.1.5 限制 IP 访问
- 2.1.6 日志监控
- 2.2 Linux 系统安全
- Linux 安全设置手册
- Linux 服务器安全加固
- Linux 防火墙
- SELinux
- SSH 免密登陆
- 2.3 Windows 系统安全
- Windows 常见安全隐患
- 防火墙-Microsoft Defender
- 本章参考
- 3 访问控制技术
- 3.1 基于角色的访问控制 RBAC
- 基于 RBAC 的延展-用户组(租户)
- 示例 1:Python Django 后台管理
- 示例 2:Python flask_appbuilder 后台管理
- 3.2 认证
- 3.2.1 认证机制
- 3.2.2 OpenID
- 3.2.3 LDAP
- 3.2.4 Kerberos
- 3.2.5 数字签名
- 3.2.6 基于证书的认证
- 3.3 授权
- 3.3.1 OAuth
- 3.4 HTTPS
- 3.4.1 HTTPS 原理
- 3.4.2 证书
- 3.4.3 自签名证书
- 本节参考
- 案例
- 天网 MAZE 的信用卡机制
- S3 认证机制
- 云盘认证机制
- 双因子认证
- 扫码登陆
- 单点登陆 SSO
- 本章参考
- 4 安全编程
- 4.1 内存管理
- 4.2 安全编程实践
- 4.2.1 使用断言进行防止错误
- 4.3 语言相关的安全编码
- 4.3.1 net 中使用安全函数
- 4.3.2 PHP 代码执行漏洞
- 4.4 源码保护
- Java 源码保护
- python 源码保护
- 本章参考
- 5 安全算法
- 6 安全架构
- 云安全
- 云安全事件案例
- 云计算带来的安全挑战
- 应用:安全云/云查杀
- 业界案例
- 华为的安全白皮书
- 参考资料
- 附录
- 安全相关法律法规
- 个人信息安全
- 云安全标准与组织
- 国际
- 国内
3.2.3 LDAP
3.2.3.1 目录服务
目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,就好象 Linux/Unix 系统中的文件目录一样。目录数据库和关 系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字 一样。
目录服务是由目录数据库和一套访问协议组成的系统。类似以下的信息适合储存在目录中:
- 企业员工信息,如姓名、电话、邮箱等;
- 公用证书和安全密钥;
- 公司的物理设备信息,如服务器,它的 IP 地址、存放位置、厂商、购买时间等;
表格 2 目录服务软件比较
简介 | 特性 | |
---|---|---|
LDAP | 轻量目录访问协议(Lightweight Directory Access Protocol) 的缩写。基于 X.500 标准,最新版本 3.0 | 支持 TCP/IP。 查询快但写慢。 C/S 模型,Server 用于存储数据,Client 提供操作目录信息树的工具。 |
X.500 | 构成全球分布式的目录服务系统的协议 | 严格按照 ISO 七层协议,较复杂。 主要运行在 UNIX 系统。 |
Active Directory | ||
ApacheDS |
3.2.3.2 LDAP 简介
Ldap (Lightweight Directory Access Protocol),轻量目录访问协议,提供被称为目录服务的信息服务,特别是基于 x.500(构成全球分布式的目录服务系统的协议)的目录服务。
- Ldap 运行在 TCP/IP 或其他面向连接的传输服务之上。
- Ldap 同时是一个 IETF 标准跟踪协议,在
轻量级目录访问协议(Ldap ) 技术规范路线图
RFC4510 中被指定。 - Ldap 软件来源于 OpenLDAP 项目,该项目是一个由志愿者组成的团队。
表格 3 LDAP 协议的版本
发布时间 | 特性 | |
---|---|---|
1.0 | 1993 | 共有四类 10 种操作:查询类操作,如搜索、比较;更新类操作,如添加条目、删除条目、修改条目、修改条目名;认证类操作,如绑定、解绑定;其它操作,如放弃和扩展操作。 |
2.0 | ||
3.0 | 1997 | 不是一个单一的协议,而是一个协议群组。 |
说明:
- LDAP 中的安全模型:主要通过身份认证、安全通道和访问控制来实现。
- 身份认证在 LDAP 中提供三种认证机制,即匿名、基本认证和 SASL(Simple Authentication and Secure Layer)认证。
- 通讯安全:LDAP 中提供了基于 SSL/TLS 的通讯安全保障。SSL/TLS 是基于 PKI 信息安全技术,是目前 Internet 上广泛采用的安全服务。
- 访问控制:LDAP,用户数据管理和访问标识是一体的。基于策略语句来实现的,无论是访问控制的数据对象,还是访问控制的主体对象,均是与这些对象在树中的位置和对象本身的数据特征相关。
2. LDAP 的衍生版本 ,有以下三种,皆使用 LDAP 协议,但后两种使用额外专有信息指定其使用方式。
ldap://
: 一项基本 LDAP 协议,允许对目录服务进行结构化访问。ldaps://
: 此衍生版本用于通过 SSL/TLS 实现 LDAP 表达。普通 LDAP 流量未经加密,不过大多数 LDAP 实现方案支持此功能。这种 LDAP 连接加密方法实际已经被弃用,建议大家使用 STARTTLS 作为替代。如果大家在非安全网络上使用 LDAP,则强烈建议使用加密机制。ldapi://
: 用于通过 IPC 表达 LDAP。其通常用于安全接入本地 LDAP 系统以实现管理用途。其能够内部嵌套而非公开网络端口实现通信。
图 2 LDAP 组织数据的方式(DIT~Data Information Tree 数据信息树)
说明:树型目录。
- 条目 Entry:也叫记录项,是 LDAP 中最基本的颗粒,就像字典中的词条,或者是数据库中的记录。通常对 LDAP 的添加、删除、更改、检索都是以条目为基本对象的。
- DN:Distinguished Name,每一个条目都有一个唯一的标识名。
- Base DN: LDAP 目录树的最顶部即根结点,如上图的
Base DN="dc=mydomain,dc=org"
。 - RDN:一般指 DN 逗号最左边的部分,特指管理 LDAP 中信息的最高权限用户。
通过 DN 的层次型语法结构,可以方便地表示出条目在 LDAP 树中的位置,通常用于检索。
- Attribute: 属性,每个条目都可以有很多属性(Attribute),比如常见的人都有姓名、地址、电话等属性。每个属性都有名称及对应的值,属性值可以有单个、多个,比如你有多个邮箱。
- ObjectClass: 对象类,对象类是属性的集合,通过对象类可以方便的定义条目类型。每个条目可以直接继承多个对象类,这样就继承了各种属性。对象类有三种类型:结构类型(Structural)、抽象类型(Abstract) 和辅助类型(Auxiliary)。
- 结构类型是最基本的类型,它规定了对象实体的基本属性,每个条目属于且仅属于一个结构型对象类。
- 抽象类型可以是结构类型或其他抽象类型父类,它将对象属性中共性的部分组织在一起,称为其他类的模板,条目不能直接集成抽象型对象类。
- 辅助类型规定了对象实体的扩展属性。每个条目至少有一个结构性对象类。
表格 4 LDAP 基本术语
概述 | 别名 | 语法 | 描述 | 值(举例) |
---|---|---|---|---|
commonName | cn/uid | Directory String | 姓名 | sean |
surname | sn | Directory String | 姓 | Chow |
organizationalUnitName | ou | Directory String | 单位(部门)名称 | IT_SECTION |
organization | o | Directory String | 组织(公司)名称 | example |
telephoneNumber | Telephone Number | 电话号码 | 110 | |
owner | DN | 该条目拥有者 | cn=doubao,ou=ops,dc=shuyun | |
jpegPhoto | Binary | JPEG 照片 | ||
objectClass | 对象类 | organizationalPerson | ||
Entry | 条目 | |||
Distinguished Name | DN | 每一个条目都有一个唯一的标识名。 | ||
DC | 一条记录所属区域 |
3.2.3.3 LDAP 使用
LDIF
LDIF(LDAP Data Interchange Format,数据交换格式)是 LDAP 数据库信息的一种文本格式,用于数据的导入导出,每行都是 属性: 值
对,见 openldap ldif 格式示例
LDAP 服务端配置
OpenLDAP(2.4.3x) 服务器安装配置方法见 这里 。
LDAP 客户端模块支持
PHP 默认并不启用 LDAP 支持, php 的 LDAP 模块依赖于 OpenLDAP 或 bind9.net 提供的客户端 LDAP 库,你必须在编译的时候使用 --with-ldap[=DIR] 才行,如果你想要 SASL 支持,那还必须使用 --with-ldap-sasl[=DIR] 选项,而且你的系统中必须有 sasl.h 头文件才行。
LDAP 客户端访问
LDAP 中也是利用登陆名和密码进行验证,LDAP 中会定义一个属性 password,用来存放用户密码,而登陆名使用较多的都是 mail 地址。那怎么样才能正确的用 LDAP 进行身份验证呢,下面是一个正确而又通用的 步骤 (五大步基于 LDAP 的一个 两次绑定
验证方法):
说明:绑定有两种,即 WEB 服务器的用户绑定和请求用户的绑定。实际使用中可只需一次绑定即用户的绑定(如支持匿名绑定搜索)。
- 从客户端得到登陆名和密码。注意这里的登陆名和密码一开始并没有被用到。
- bind:先匿名绑定 bind 到 LDAP 服务器,如果 LDAP 服务器没有启用匿名绑定,一般会提供一个默认的用户,用这个进行绑定即可。(若绑定失败,即可认定 LDAP 验证失败)
- search 搜索:,当上一步绑定成功以后,需要执行一个搜索,而 filter 就是用登陆名来构造,形如:
(|(uid=$login)(mail=$login))
,这里的 login 就是登陆名。搜索执行完毕后,需要对结果进行判断,如果只返回一个 entry,这个就是包含了该用户信息的 entry,可以得到该 entry 的 DN,后面使用。如果返回不止一个或者没有返回,说明用户名输入有误,应该退出验证并返回错误信息。(可将搜索返回的信息作为注册用户信息) - 再次 bind 用户:上一步执行时得到了用户信息所在的 entry 的 DN,这里就需要用这个 DN 和第一步中得到的 password 重新绑定 LDAP 服务器。
- bind 用户结果的处理:如果能成功绑定,那么就说明验证成功,如果不行,则应该返回密码错误的信息。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论