引言
早期,公司是没有统一认证这个东西的,所以各自玩各自的。于是, confluence一个用户体系,gitlab一个用户体系,Jenkins一个用户体系等等, 开发中要用到的开源软件数不胜数,每个软件都要认证。
1 对于个人而言, 需要记住这么多账号,需要认证这么多次,就非常麻烦。
2 对于公司而言,也是需要维护这么多人的账号,这么多人的机器,这么多的服务
……所以就想统一账号来管理。
可以这样讲:市面上只要你能够想像得到的所有工具软件,全部都支持 LDAP协议。比如说你公司要安装一个项目管理工具,那么这个工具几乎必然支持 LDAP协议,你公司要安装一个 bug管理工具,这工具必然也支持 LDAP协议,你公司要安装一套软件版本管理工具,这工具也必然支持 LDAP协议。 LDAP协议的好处就是你公司的所有员工在所有这些工具里共享同一套用户名和密码,来人的时候新增一个用户就能自动访问所有系统,走人的时候一键删除就取消了他对所有系统的访问权限,这就是 LDAP。<br /> 有些领域并不像前端世界那么潮那么性感,但是缺了这个环节又总觉得很别扭。如果深入到运维的世界,你会发现大部分工具还活在上个世纪,产品设计完全反人类,比如 cn, dc, dn, ou这样的命名方式,如果不钻研个一天两天,鬼知道它在说什么,比如说 dns, dns是什么鬼?域名吗?不是,它只是某个懒惰的工程师起了 dn这么一个缩写,再加一个复数,就成了 dns,和域名服务器没有任何关系; cn是什么?中国的缩写?你想多了,这和中国没有任何关系。经过一系列这样疯狂的洗脑之后,你才能逐渐明白 LDAP到底想干什么.( [latest_tutorial_2018](https://www.sohu.com/a/284300312_283613))
why
历史原因,LDAP 协议诞生于 1988 年,比万维网(1989)的诞生还要早。
树形用户目录,树形存储结构,对组织管理建模符合直觉。
开放的标准化协议,受到广泛支持
**
作用
谁 以什么权限 访问什么
- 用户服务
管理用户的域账号、用户信息、企业通信录(与电子邮箱系统集成)、用户组管理、用户身份认证、用户授权管理、按需实施组管理策略等。在 Windows 下,有组策略管理器,如果启用域用户认证,那么这些组策略可以统一管理,方便地限制用户的权限。
- 计算机管理
管理服务器及客户端计算机账户、所有服务器及客户端计算机加入域管理并按需实施组策略,甚至可以控制计算机禁止修改壁纸。(什么?给电脑重装系统就能解除限制?那么所有域上的资源都会无法访问了。)
- 资源管理
管理打印机、文件共享服务、网络资源等实施组策略。
- 应用系统的支持
对于电子邮件(Exchange)、在线及时通讯(Lync)、企业信息管理(SharePoint)、微软 CRM,ERP 等业务系统提供数据认证(身份认证、数据集成、组织规则等)。这里不单是微软产品的集成,其它的业务系统根据公用接口的方式一样可以嵌入进来。
同类产品
联想用的就是 https://authing.cn/ , 同样是一个集成了 ldap 的服务。
微软的 Active Directory
what
OpenLDAP 1.0 (released August 1998)——past release
OpenLDAP 2.4 (released October 2007)——current
A directory is a specialized database specifically designed for searching and browsing, in additional to supporting basic lookup and update functions
Lightweight Directory Access Protocol, x.500 的 简化版。 x.500 是一个协议族。 简单而言他的重点就是DIT(Directory Information Tree)
LDAP directory servers present data arranged in tree-like hierarchies in which each entry may have zero or more subordinate entries. This structure is called the Directory Information Tree, or DIT
how
配置
这些都在 /etc/openldap/slapd.conf 里配置。 可以看到是如下的 tree 结构。
针对 module,我们可以查看说明,不同的功能需要对应不同的 module。
module:
scheme:
The cn=schema entry holds all of the schema definitions that are hard-coded in slapd. As such, the values in this entry are generated by slapd so no schema values need to be provided in the config file. The entry must still be defined though, to serve as a base for the user-defined schema to add in underneath. Schema entries must have the olcSchemaConfig objectClass.
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
database:
database mdb
#suffix "n2=lenovo,n1=gongsi"
suffix "dc=hpc,dc=com"
checkpoint 1024 15
rootdn "uid=admin,dc=hpc,dc=com"
rootpw {SSHA}1eNXf93MbfhzA/8nb0Syj6TBVHccCYQr
reference
LDAP官网: http://www.openldap.org
phpLDAPadmin官网: http://phpldapadmin.sourceforge.net/wiki/index.php/Main_Page
others
使用docker 安装 openldap
https://github.com/osixia/docker-openldap
使用docker 安装 PHPLdapAdmin
https://github.com/osixia/docker-phpLDAPadmin