基于LDAP搭建公司账号统一认证服务
本文最后更新于 705 天前,其中的信息可能已经有所发展或是发生改变。

基于LDAP搭建公司账号统一认证服务

LDAP是什么

首先LDAP是一种通讯协议,LDAP支持TCP/IP。协议就是标准,并且是抽象的。在这套标准下,AD(Active Directory)是微软出的一套实现。

LDAP(Light Directory Access Protocol 轻量级目录访问协议),他是一种目录数据库存储方式

那AD是什么呢?

可以把它理解成是个数据库,像是其他数据库一样,LDAP也是有client端和server端。

server端是用来存放资源,client端用来操作增删改查等操作。

而我们通常说的LDAP是指运行这个数据库的服务器。可以简单理解AD =LDAP服务器+LDAP应用

一些名词解释

Entry 项

LDAP是以树形结构存储数据,每一个节点都被称为项

dc(Domain Component)

dc就是域组织(可以把它当作关系型中的库)

比如将http://guoliangjun.com这样的域名,可以拆成 dc=guoliangjun,dc=com这样的形式。

dn(Distinguished Name)

它用于唯一标识一个「项」,以及他在目录信息树中的位置。(一条dn就类似于关系型数据库中的一条数据)

dn示例:ou=group,dc=guoliangjun,dc=comcn=dev,ou=group,dc=guoliangjun,dc=com

dn 字符串从左向右,各组成部分依次向树根靠近。

rdn(Relative Distinguished Name)

Rdn 就是「键值对」。dn 由若干个 rdn 组成,以逗号分隔。

比如上面的dn中dc=guoliangjun就是一个rdn

ou(Organization Unit)

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

cn (Common Nmae)

公共名称,如:’zhangsan’

uid (User id)

用户id,如:’zhangsan’

Object Classes

每个「项」里面包含若干个 Object Classes,相当于是项的属性。(一条dn中的这些属性就类似于关系型数据库中一条数据的各个字段)

image-20230207144405621

总结一下LDAP树形数据库如下:

dn :一条记录的详细位置

dc :一条记录所属区域 (哪一颗树)

ou :一条记录所属组织 (哪一个分支)

cn/uid:一条记录的名字/ID (哪一个苹果名字)

img

为什么要搭建LDAP

多平台认证的烦恼

不管是我经历过的几间公司,还是最近面试的公司,再者一些朋友的公司,发现他们的问题就是没有一个统一的认证服务系统。

比如研发部有自己的一些gitlab/jenkins/禅道/vpn/wiki等等的系统。

新人入职时需要在每个系统中申请一遍账号,每个系统对用户名和密码的要求还不一样(离职的时候, 各个账号又都得删除一遍), 这样后期维护成本非常高的。

目标实现用户统一登录管理

OpenLDAP和phpLDAPadmin的部署

下面通过docker-compose一键部署openLDAP、phpldapadmin

version: "3"
services:
  openldap:
    container_name: "openldap"
    image: "osixia/openldap:1.5.0"
    restart: always
    environment:
      LDAP_ORGANISATION: "guoliangjun" # 组织名称
      LDAP_DOMAIN: "guoliangjun.com" # 公司/组织域名
      LDAP_BASE_DN: "dc=guoliangjun,dc=com" # 根据域名组成
      LDAP_ADMIN_PASSWORD: "ldap_admin_password" # 密码自己来设置
      LDAP_CONFIG_PASSWORD: "ldap_config_password"
    volumes:
      - /data/docker/openldap/database:/var/lib/ldap
      - /data/docker/openldap/config:/etc/ldap/slapd.d
    ports:
      - '389:389'
      - '636:636' 
  phpldapadmin:
    container_name: "phpldapadmin"
    image: "osixia/phpldapadmin:0.9.0"
    restart: always
    depends_on:
      - openldap
    environment:
      PHPLDAPADMIN_LDAP_HOSTS: "openldap"
      #PHPLDAPADMIN_HTTPS: "false"
    ports:
      - '80:80'
      - '443:443'

执行docker-compose up -d命令,就可以一键部署openldap、phpldapadmin(他就是openldap的操作页面)

等后续再进一步说下self-service-password来自助修改密码吧

接下来可以通过访问https://ipaddr访问phpldapadmin了。

账号就是cn=admin,dc=guoliangjun,dc=com,密码就是通过LDAP_ADMIN_PASSWORD设置的。

如果不使用页面版的phpldapadmin,可以去下载ldapadmin的桌面版也是能管理

操作指南

这里先在dc下面创建ou=groupou=users

如果想再按部分区分则就先创建一个ou,再在该ou下创建一个ou=group即可

创建ou

image-20230207171234815

image-20230207171342120

image-20230207171428100

同理ou=users一样,不再记录呀

在ou=group下创建dev

image-20230207171858531

image-20230207171936860

创建User Account

在ou=users下创建用户

image-20230207172055801

image-20230207172247243

为用户填写其他属性

是不是有一些比如邮箱/手机号码之类的属性没有呢?所以需要为用户添加真实姓名和邮箱(有些系统需要用户的这两个信息,比如gitlab/jenkins),可以从下图选择姓名啊,手机啊,邮箱等参数。

image-20230207173250005

生成对应模板

为了后面用户信息一致,可以使用导出初始化用户模板统一,到时候新增用户,修改对应值即可。

image-20230207173733938

image-20230207173743601

image-20230207181251614

# LDIF Export for cn=zhangsan,ou=users,dc=guoliangjun,dc=com
# Server: openldap (openldap)
# Search Scope: base
# Search Filter: (objectClass=*)
# Total Entries: 1
#
# Generated by phpLDAPadmin (http://phpldapadmin.sourceforge.net) on February 7, 2023 10:11 am
# Version: 1.2.5

version: 1

# Entry 1: cn=zhangsan,ou=users,dc=guoliangjun,dc=com
dn: cn=zhangsan,ou=users,dc=guoliangjun,dc=com
cn: zhangsan
displayname: zhangsan
gidnumber: 500
givenname: zhang
homedirectory: /home/users/zhangsan001
loginshell: /bin/bash
mail: zhangsan@guoliangjun.com
mobile: 13800138000
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
sn: san
uid: zhangsan001
uidnumber: 1000
userpassword: zhangsan123

以上就是默认的一下模板了。

导入账号

image-20230207181502084

image-20230207181526026

image-20230207181533393

导入错误

注意:在import时候出现如下报错,检查一下是否是uidnumber写重复了,(uidnumber是唯一的)uidnumber可以在《LDAP用户uidnumber统计》这个表里面进行查找。

image-20230207181703024

后续记录计划

  1. LDAP整合linux服务器账号
  2. LDAP的集成相关的服务,如jenkins/gitlab/harbor/nexus
  3. 搭建ldap自助修改密码系统:Self Service Password

参考

  1. https://github.com/cloudp1216/OpenLDAP
  2. https://github.com/osixia/docker-openldap
  3. https://github.com/osixia/docker-phpLDAPadmin
  4. https://blog.csdn.net/ysf15609260848/article/details/126002452

评论

  1. Macintosh Edge 109.0.1518.52
    2 年前
    2023-2-08 11:49:11

    刚进公司就开始搭这个服务??

    • 博主
      Tokin
      Windows Edge 109.0.1518.78
      2 年前
      2023-2-08 12:44:22

      没~已经跑路了,只是自己学一下而已

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇