本期我们谈一项有关企业IT基础设施的实操性话题:如何为初创企业引入并搭建自有的统一账号系统。

为什么需要统一账号/统一认证?
没人喜欢记忆一大堆混乱的账号和密码,员工不喜欢,企业更不喜欢。

企业要高效解决业务和研发问题,必须在初创期规划搭建必要的企业软件和研发工具,也就是进行IT基础设施中软件部分的选型、配置和部署。在大型企业,这样的工作会有专门的IT基础设施部门和内部工具部门负责,而在初创企业,这类工作往往需要由CTO布置,甚至亲自完成。当然,这一过程也是CTO对研发部门贯彻管理和研发思路,同时对企业总体提供IT支持设施的过程。

在公司软件基础设施中,最基础的部分就是统一账号和统一认证,这一体系相当于一张访问软件系统的“员工卡”。它能基于对每个员工的唯一账号、密码、以及其它信息的管理,简化和串联不同软件系统的身份管理、统一登录和权限控制,让员工方便地通过同一套用户名密码登录公司的大部分系统完成工作,也让行政和IT人员一站式地管理任何员工的账号和权限。

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

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

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

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

满足以上两个需求且最适合初创企业的,是LDAP(Light Directory Access Protocol)这项被广泛支持的协议。这是一个轻量、灵活、通用、长期可靠、可自有部署的目录服务协议。所谓目录服务,本质上是一个适合规划组织和账户结构的数据库标准和实现。各类软件可以通过类似数据库查询的形式,统一存取LDAP内的数据,以实现账号管理和登录认证的统一。

软件选型方面,目前兼容LDAP协议的最主流实现方案有二:Linux操作系统下开源的OpenLDAP,以及Windows Server操作系统下闭源的Active Directory。我们将以OpenLDAP为例讲解,在实际选型中,只要按照操作系统的熟悉程度两者择一即可。

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

支持LDAP协议进行统一登录的软件和工具

电子邮件服务 大多数主流邮件服务软件,以及全球市场销售的绝大多数云端邮件服务
企业通信录和日历 大多数兼容 CardDav 和 CalDav 协议的通信录和日历协作产品
研发综合管理 Gitlab, Github Enterprise, Phabricator 等
知识管理 Confluence, MediaWiki 等大多数知识管理、知识库、知识协作产品
企业网盘 OwnCloud, NextCloud 等
项目/错误/集成管理 JIRA, Trello, Bugzilla, Redmine, Jenkins
数据看板 Grafana, Apache Superset
实时通信 Slack, Mattermost, IBM Sametime 等
Wifi接入 部分企业级路由器,大部分路由器网关软件,OpenWRT
虚拟专线 OpenVPN
证书管理 OpenSSH
实施要点
我们的专栏不会讲具体的部署配置细节。但会介绍实施的关键步骤以及需关注思考的重点。

  1. 搭建和配置LDAP服务
    应优先考虑选择使用OpenLDAP或Microsoft Active Directory作为服务端软件。

对于域名是ctoabc.xyz的公司,LDAP服务名称和接入名称应设置为dc=ctoabc, dc=xyz,管理员访问名称一般为cn=admin, dc=ctoabc, dc=xyz

应保证搭建完成的服务拥有独立的公有IP,便于内外网访问;应保证服务器的访问安全,并使用加密通信(LDAP over SSL)。

  1. 建立组织结构和人员数据
    选择安装一个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负责人。

  1. 与各软件工具集成
    需要注意各系统中Bind DN项目应配置为dc=ctoabc, dc=xyz ,访问LDAP目录的用户名则应配置为有最高权限的账户,如cn=admin, dc=ctoabc, dc=xyz。

需要注意配置好各系统中用户名、密码、全名等字段,与LDAP目录中字段的匹配关系,也就是配置好相应字段从LDAP中查询到的方法。

  1. 解决日常使用问题
    配置一个自助密码修改(Self-service Password Change)系统,方便员工修改密码。

为统一账号系统起一个明确好记的名字,如Company ID。

撰写并发布面向公司全员的Company ID使用介绍文档。

这样基于LDAP的统一账号体系就搭建完成了,员工可以用一个账号和密码来访问和对接全部软件和研发工具,公司的众多软件基础设施也开始能从账户层面进行简单明确的管理了。