待手绾青丝

待手绾青丝

待手绾青丝

庭中三千梨花树,再无一朵入我心。 心中只你一朵,似在心中,不在心中,可望可念可想不可及。

109 文章数
2 评论数
来首音乐
光阴似箭
今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

第一篇:统一账号统一认证系统介绍

2022-04-24 / 0 评论 / 430 阅读 / 0 点赞

统一账号统一认证系统介绍

一、为什么需要统一账号/统一认证

没人喜欢记忆一大堆混乱的账号和密码,员工不喜欢,企业更不喜欢。

    企业要高效解决业务和研发问题,必须在初创期规划搭建必要的企业软件和研发工具,也就是进行IT基础设施中软件部分的选型、配置和部署。在大型企业,这样的工作会有专门的IT基础设施部门和内部工具部门负责,而在初创企业,这类工作往往需要由CTO布置,甚至亲自完成。当然,这一过程也是CTO对研发部门贯彻管理和研发思路,同时对企业总体提供IT支持设施的过程。
    
    在公司软件基础设施中,最基础的部分就是统一账号和统一认证,这一体系相当于一张访问软件系统的“员工卡”。它能基于对每个员工的唯一账号、密码、以及其它信息的管理,简化和串联不同软件系统的身份管理、统一登录和权限控制,让员工方便地通过同一套用户名密码登录公司的大部分系统完成工作,也让行政和IT人员一站式地管理任何员工的账号和权限。

二、为什么选择LDAP

初创公司选择统一账号的方案只需要考虑两个问题:广泛兼容和自有可控。

1、历史原因

   LDAP 协议诞生于 1988 年,比万维网的诞生还要早。1989 年英国科学家蒂姆·伯纳斯-李发明了万维网。因此沿用至今。

2、树形结构方便理解

树形用户目录,树形存储结构,对组织管理建模符合直觉。

3、广泛兼容

    开放的标准化协议,受到广泛支持。
    广泛兼容指应该选择有最多的软件和工具支持的统一账号方案:应选取不论是哪种操作系统下的软件、不论是云端还是本地部署、不论是开源产品还是收费软件、不论是研发用工具还是其它部门常用软件,都应能顺利接入的方案。

4、自有可控

    自有可控指这样的方案应该有可靠的私有部署和本地存储方案:无需向第三方长期采购,且随着公司规模的扩大,支持灵活的功能增加、字段增加、组织结构修改、以及复杂权限管控。

5、不建议使用其他产品

    因为以上两个考虑,我不建议初创公司选用知名云办公套件或大型OA自行设计提供的统一账户管理接口,原因是兼容软件不全,迁移成本高。也不建议选择不成熟、不可控的LDAP-as-a-service类云服务产品。

6、选择LDAP

    满足以上两个需求且最适合初创企业的,是LDAP(Light Directory Access Protocol)这项被广泛支持的协议。这是一个轻量、灵活、通用、长期可靠、可自有部署的目录服务协议。所谓目录服务,本质上是一个适合规划组织和账户结构的数据库标准和实现。各类软件可以通过类似数据库查询的形式,统一存取LDAP内的数据,以实现账号管理和登录认证的统一。
    软件选型方面,目前兼容LDAP协议的最主流实现方案有二:Linux操作系统下开源的OpenLDAP,以及Windows Server操作系统下闭源的Active Directory。在实际选型中,只要按照操作系统的熟悉程度两者择一即可。

三、什么是LDAP

LDAP 的全称是 Lightweight Directory Access Protocol,「轻量目录访问协议」。

    划重点,LDAP 「是一个协议」,约定了 Client 与 Server 之间的信息交互格式、使用的端口号、认证方式等内容。而 「LDAP 协议的实现」,有着众多版本,例如微软的 Active Directory 是 LDAP 在 Windows 上的实现,AD 实现了 LDAP 所需的树形数据库、具体如何解析请求数据并到数据库查询然后返回结果等功能。再例如 OpenLDAP 是可以运行在 Linux 上的 LDAP 协议的开源实现。而我们平常说的 LDAP Server,一般指的是安装并配置了 Active Directory、OpenLDAP 这些程序的服务器。

四、LDAP和AD的关系和区别

    LDAP是轻量目录访问协议(Lightweight Directory Access Protocol)的缩写,LDAP标准实际上是在X.500标准基础上产生的一个简化版本

    AD是windows Active Directory的缩写,AD应该是LDAP的一个应用实例,而不应该是LDAP本身。比如:windows域控的用户、权限管理应该是微软公司使用LDAP存储了一些数据来解决域控这个具体问题,

    只是AD顺便还提供了用户接口,也可以利用Active Directory当做LDAP服务器存放一些自己的东西而已。比如LDAP是关系型数据库,微软自己在库中建立了几个表,每个表都定义好了字段。显然这些表和字段都是根据微软自己的需求定制的,而不是LDAP协议的规定。然后微软将LDAP做了一些封装接口,用户可以利用这些接口写程序操作LDAP,使得Active Directory也成了一个LDAP服务器。

   总之:Active Directory = LDAP服务器+LDAP应用(Windows域控)。Active Directory先实现一个LDAP服务器,然后自己先用这个LDAP服务器实现了自己的一个具体应用(域控

五、LDAP协议的功能

    要说 LDAP 协议能解决什么问题,那不得不提 AD。AD 是 Windows 服务器上最强大的功能,AD 是基于 LDAP 协议的一套解决方案(LDAP 服务器 + 应用),解决了细粒度的权限控制。核心:「谁 以什么权限 访问什么」。

1、用户服务

    管理用户的域账号、用户信息、企业通信录(与电子邮箱系统集成)、用户组管理、用户身份认证、用户授权管理、按需实施组管理策略等。在 Windows 下,有组策略管理器,如果启用域用户认证,那么这些组策略可以统一管理,方便地限制用户的权限。

2、计算机管理

    管理服务器及客户端计算机账户、所有服务器及客户端计算机加入域管理并按需实施组策略,甚至可以控制计算机禁止修改壁纸。(什么?给电脑重装系统就能解除限制?那么所有域上的资源都会无法访问了。)

3、资源管理

管理打印机、文件共享服务、网络资源等实施组策略。

4、应用系统的支持

    对于电子邮件(Exchange)、在线及时通讯(Lync)、企业信息管理(SharePoint)、微软 CRM,ERP 等业务系统提供数据认证(身份认证、数据集成、组织规则等)。这里不单是微软产品的集成,其它的业务系统根据公用接口的方式一样可以嵌入进来。

5、哪些软件和工具可以和统一账号/认证集成?

    下面列出一些常用的支持LDAP作为统一登录认证后端数据库的软件和工具。CTO在为公司建设软件工具体系时,可以直接参照下表选型。事实上,大多数包含账号体系的企业级软件,尤其是技术研发相关的软件,都支持LDAP账号。

| 类型 | 典型产品 | | -------------------- | ------------------------------------------------------------ | | 电子邮件服务 | 大多数主流邮件服务软件,以及全球市场销售的绝大多数云端邮件服务 | | 企业通信录和日历 | 大多数兼容CardDav和CalDav协议的通信录的日历协作产品 | | 研发综合管理 | Gitlab、Gerrit、Github Enterprise,Phabricator等 | | 知识管理 | Confluence,MediaWiki等大多数知识管理、知识库、知识协作产品 | | 企业网盘 | OwnCloud,NextCloud等 | | 项目、错误、集成管理 | JIRA、Trello、Bugzilla、Redmine、Jenkins | | 数据看板 | Grafana、Apache、Superset | | 实时通信 | Slack、Mattermost、IBM Sametime等 | | wifi接入 | 部分企业级路由器、大部分路由器网关软件,OpenWRT | | 虚拟专线 | OpenVPN | | 证书管理 | OpenSSH | | 等等。。。 | 等等。。 |

六、LDAP解析

1、什么叫轻量

    LDAP 协议之前有一个 X.500 DAP 协议规范,该协议十分复杂,是一个重量级的协议,后来对 X.500

    进行了简化,诞生了 LDAP 协议,与 X.500 相比变得较为轻量。由 X.500 DAP -> LDAP,其实 LDAP 协议依然复杂。

2、树状目录

目录指的是用户目录,用户目录长这样:

复杂一点的是这样:

还有这样的

     目录服务就是按照「树状」存储信息的模式。目录服务的数据类型主要是「字符型」, 而不是关系数据库提供的整数、浮点数、日期、货币等类型。为了检索的需要添加了 BIN(二进制数据)、CIS(忽略大小写)、CES(大小写敏感)、TEL(电话型)等语法(Syntax)。同样也不提供象关系数据库中普遍包含的大量的函数。目录有很强的查询(读)功能,适合于进行大量数据的检索;但目录一般只执行简单的更新(写)操作,不支持批量更新所需要的事务处理功能;它主要面向数据的查询服务(查询和修改操作比一般是大于 10:1),不提供事务的回滚(rollback)机制;目录具有广泛复制信息的能力,适合于多个目录服务器同步/更新。

3、LDAP 数据库的信息组织形式

    目录服务的数据库以「树形方式」存储数据,也是一种 NoSQL。需要注意的是这是推荐的底层数据存储方式,因为目录服务查询比写入要多得多,所以使用树形数据库存储要有优势。但其实也可以使用 MySQL 或 MongoDB 这样的数据库「当做 LDAP 数据源」。LDAP 只是一个「协议」,约定的是 C/S 之间的通信方式。理论上服务器只要能够处理所有 LDAP 协议规定的操作,并返回正确的结果就可以。

4、专有名词解释

    在上面的用户目录中,有许多英文缩写。其实并不神秘,只是一些单词的缩写,接下来我们解释一些专有名词。在与 LDAP 打交道的过程中,这些名词一定会频繁遇到。

1.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.

    LDAP 目录服务器将信息以树形的方式组织,每一项都可以包含 0 个或多个子项。这样的结构叫做目录信息树。

    目录信息树可以类比我们的「磁盘文件系统目录树」,上面的定义是官方定义,理解起来,DIT 就是指像文件系统一样的目录结构树。

2.Entry 项

在用户目录中,你看到的每一行,都可以叫做一项,不论是叶子节点还是中间的节点。

项包含一个 DN,一些属性,一些对象类。

5、Root DSE(Root DSA-specific entry)根节点项

    每个 LDAP 服务器必须对外暴露一个特殊的「项」,叫做 root DSE,这个项的 DN 是空字符串。这个项是根节点,描述了 LDAP 服务器自身的信息和能力。例如你可以在下图看到 LDAP 服务器支持的功能,LDAP 协议版本等信息。

6、dn(Distinguished Name)分辨名和rdn(Relative Distinguished Name)相对分辨名

    dn 如下图白色方框中的内容,「分辨名」用于唯一标识一个「项」,以及他在目录信息树中的位置。可以和文件系统中文件路径类比。类似于关系型数据库中的主键。dn 字符串从左向右,各组成部分依次向树根靠近。
    
    Rdn 就是「键值对」,如下图黄色方框中的内容。dn 由若干个 rdn 组成,以逗号分隔。

7、(Distinguished Name)(域名组成)

    将 http://example.comexample.com 这样的域名,拆成 dc=example,dc=com 这样的形式。

8、o(Organization)组织机构、公司

    在 dn 中可能会包含 o=公司 这样的组成部分,这里的 o 指代组织机构。

9、ou(Organization Unit)组织单元、部门

在 dn 中可能会包含 ou=某某部门 这样的组成部分,这里的 ou 指代组织单元。

10、Object Classes

    每个「项」里面包含若干个 Object Classes,「Object Class」 指定了本项中必须、可能包含的「属性」,相当于 MySQL 中的建表语句。包含某个 Object Class 的项,必须满足 Object Class 中约定的规范。如下图,「person objectClass」 中规定了 cn 和 sn 属性必须存在,在这一「项」的属性中,你可以看到 cn 和 sn 被加粗显示了。

下图是 person Object class 的定义,规定了拥有此 Object class 的**「项」**需要拥有的属性:

七、使用要点

1、搭建和配置LDAP服务

    应优先考虑选择使用OpenLDAP或Microsoft Active Directory作为服务端软件。
    对于域名是ctoabc.xyz的公司,LDAP服务名称和接入名称应设置为dc=ctoabc, dc=xyz,管理员访问名称一般为cn=admin, dc=ctoabc, dc=xyz
    应保证搭建完成的服务拥有独立的公有IP,便于内外网访问;应保证服务器的访问安全,并使用加密通信(LDAP over SSL)。
2. 建立组织结构和人员数据

2、建立组织结构和人员数据

    选择安装一个LDAP管理客户端软件,可以是基于网页的OpenLDAP, Web2LDAP, LAM,也可以是本地运行的jxplorer。
    最简单的组织结构搭建方法应先配置用户类型/用户部门。新建一个organizationalUnit,名为ou=groups或ou=departments,然后在其下按需创建posixGroup,如按类型cn=employees,cn=admins,或按部门cn=product,cn=marketing。
    下一步应配置员工。新建一个organizationalUnit,名为ou=users,然后创建用户cn=username,如cn=zhang.san,并把用户的GID关联到上一步建立的用户类型/用户部门中。随后填写该用户的必要信息,如Email,Full name,Password初始密码等。还可以按需增加字段,甚至增加个人照片。
    撰写一篇统一账号操作文档,记录以上配置/删除一名员工统一账号的标准操作方法,并移交给相关的IT/HR负责人。

3、与各软件工具集成

    需要注意各系统中Bind DN项目应配置为dc=ctoabc, dc=xyz ,访问LDAP目录的用户名则应配置为有最高权限的账户,如cn=admin, dc=ctoabc, dc=xyz。
    需要注意配置好各系统中用户名、密码、全名等字段,与LDAP目录中字段的匹配关系,也就是配置好相应字段从LDAP中查询到的方法。

4、解决日常使用问题

    配置一个自助密码修改(Self-service Password Change)系统,方便员工修改密码。
    为统一账号系统起一个明确好记的名字,如Company ID。
    撰写并发布面向公司全员的Company ID使用介绍文档。
    
    这样基于LDAP的统一账号体系就搭建完成了,员工可以用一个账号和密码来访问和对接全部软件和研发工具,公司的众多软件基础设施也开始能从账户层面进行简单明确的管理了

借鉴文章:

https://zhuanlan.zhihu.com/p/45253615

https://zhuanlan.zhihu.com/p/133942767

https://zhuanlan.zhihu.com/p/147768058

文章不错,扫码支持一下吧~
上一篇 下一篇
评论
最新回复
文章目录
每日一句