安装go-ldap-admin

在你合适的目录中创建 go-ldap-admin 文件夹,然后创建 docker-compose.yaml 文件,内容如下:
根据自己的需要定义配置

/opt/docker-compose/go-ldap-admin

vim docker-compose.yaml
version: '3'
networks:
  go-ldap-admin:
    driver: bridge
services:
  go-ldap-admin:
    image: eryajf/go-ldap-admin:latest
    container_name: go-ldap-admin
    hostname: go-ldap-admin
    restart: always
    environment:
      WAIT_HOSTS: openldap:389
      DB_DRIVER: sqlite3
    ports:
      - 28888:8888
    volumes:
      - /opt/go-ldap-admin:/app/data
      - /opt/go-ldap-admin/config.yml:/app/config.yml
    depends_on:
      - openldap
    links:
      - openldap:go-ldap-admin-openldap
    networks:
      - go-ldap-admin

  openldap:
    image: osixia/openldap:latest
    container_name: go-ldap-admin-openldap
    hostname: go-ldap-admin-openldap
    restart: always
    environment:
      TZ: Asia/Shanghai
      LDAP_ORGANISATION: "dc=eryajf,dc=net" #可以定义自己的
      LDAP_DOMAIN: "dc=eryajf,dc=net" #可以定义自己的
      LDAP_ADMIN_PASSWORD: "123456" #可以定义自己的
    command: [ '--copy-service' ]
    volumes:
      - /opt/openldap/database:/var/lib/ldap
      - /opt/openldap/config:/etc/ldap/slapd.d
    ports:
      - 28389:389
    networks:
      - go-ldap-admin

  phpldapadmin:
    image: osixia/phpldapadmin:latest
    container_name: go-ldap-admin-phpldapadmin
    hostname: go-ldap-admin-phpldapadmin
    restart: always
    environment:
      TZ: Asia/Shanghai
      PHPLDAPADMIN_HTTPS: "false"
      PHPLDAPADMIN_LDAP_HOSTS: go-ldap-admin-openldap
    ports:
      - 28091:80
    volumes:
      - /opt/phpadmin:/var/www/phpldapadmin
    depends_on:
      - openldap
    links:
      - openldap:go-ldap-admin-openldap
    networks:
      - go-ldap-admin

定义配置文件:

/opt/go-ldap-admin/config.yml

# delelopment
system:
  # 设定模式(debug/release/test,正式版改为release)
  mode: debug
  # url前缀
  url-path-prefix: api
  # 程序监听端口
  port: 8888
  # 是否初始化数据(没有初始数据时使用, 已发布正式版改为false)
  init-data: true

logs:
  # 日志等级(-1:Debug, 0:Info, 1:Warn, 2:Error, 3:DPanic, 4:Panic, 5:Fatal, -1<=level<=5, 参照zap.level源码)
  level: -1
  # 日志路径
  path: data/logs
  # 文件最大大小, M
  max-size: 50
  # 备份数
  max-backups: 100
  # 存放时间, 天
  max-age: 30
  # 是否压缩
  compress: false

database:
  # 数据库类型 mysql sqlite3
  driver: mysql
  # 数据库连接sqlite3数据文件的路径
  source: data/go-ldap-admin.db

mysql:
  # 用户名
  username: root
  # 密码
  password: 123456
  # 数据库名
  database: go_ldap_admin
  # 主机地址
  host: localhost
  # 端口
  port: 3306
  # 连接字符串参数
  query: parseTime=True&loc=Local&timeout=10000ms
  # 是否打印日志
  log-mode: true
  # 数据库表前缀(无需再末尾添加下划线, 程序内部自动处理)
  table-prefix: tb
  # 编码方式
  charset: utf8mb4
  # 字符集(utf8mb4_general_ci速度比utf8mb4_unicode_ci快些)
  collation: utf8mb4_general_ci

# jwt配置
jwt:
  # jwt标识
  realm: test jwt
  # 服务端密钥
  key: secret key
  # token过期时间, 小时
  timeout: 12000
  # 刷新token最大过期时间, 小时
  max-refresh: 12000

# 令牌桶限流配置
rate-limit:
  # 填充一个令牌需要的时间间隔,毫秒
  fill-interval: 50
  # 桶容量
  capacity: 200

# email configuration
email:
  port: '465'
  user: 'Linuxlql@163.com'
  from: 'go-ldap-admin后台'
  host: 'smtp.163.com'
  # is-ssl: true
  pass: 'your password'

# # ldap 配置
ldap:
  # ldap服务器地址
  url: ldap://localhost:389
  # ladp最大连接数设置
  max-conn: 10
  # ldap服务器基础DN
  base-dn: "dc=eryajf,dc=net"
  # ldap管理员DN
  admin-dn: "cn=admin,dc=eryajf,dc=net"
  # ldap管理员密码
  admin-pass: "123456"
  # ldap用户OU
  user-dn: "ou=people,dc=eryajf,dc=net"
  # ldap用户初始默认密码,如果修改对应的go-admin也要改
  user-init-password: "123456"
  # 是否允许更改分组DN
  group-name-modify: false
  # 是否允许更改用户DN
  user-name-modify: false
  # 用户密码加密方式 默认为 ssha 还可指定为 clear(表示不加密)
  user-password-encryption-type: "ssha"
  # 默认邮箱后缀
  default-email-suffix: "eryajf.net"
# 📢 即便用不到如下三段配置信息,也不要删除,否则会有一些奇怪的错误出现
dingtalk:
  # 配置获取详细文档参考: http://ldapdoc.eryajf.net/pages/94f43a/
  flag: "dingtalk" # 作为钉钉在平台的标识
  app-key: "xxxxxxxxxxxxxxx" # 应用的key
  app-secret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 应用的secret
  agent-id: "12121212" # 目前agent-id未使用到,可忽略
  enable-sync: false  # 是否开启定时同步钉钉的任务
  dept-sync-time: "0 30 2 * * *" # 部门同步任务的时间点 * * * * * * 秒 分 时 日 月 周, 请把时间设置在凌晨 1 ~ 5 点
  user-sync-time: "0 30 3 * * *" # 用户同步任务的时间点 * * * * * * 秒 分 时 日 月 周, 请把时间设置在凌晨 1 ~ 5 点,注意请把用户同步的任务滞后于部门同步时间,比如部门为2点,则用户为3点
  dept-list:    # 配置要同步的部门列表,配置留空则同步所有部门,在开头加^表示不同步此部门
    #- "48456726"   # 需要同步的部门ID
    #- "^61213417"  # 不需要同步的部门ID
  is-update-syncd: false # 当钉钉用户的邮箱,手机号,部门等信息更新之后,是否同步更新,默认为false,如果你不了解这个字段的含义,则不建议开启
  user-leave-range: 0 #按配置天数查离职时间范围内的用户,为0时不限制
wecom:
  # 配置获取详细文档参考:http://ldapdoc.eryajf.net/pages/cf1698/
  flag: "wecom" # 作为微信在平台的标识
  corp-id: "xxxx" # 企业微信企业ID
  agent-id: 1000003 # 企业微信中创建的应用ID
  corp-secret: "xxxxx" # 企业微信中创建的应用secret
  enable-sync: false # 是否开启定时同步企业微信的任务
  dept-sync-time: "0 30 2 * * *" # 部门同步任务的时间点 * * * * * * 秒 分 时 日 月 周, 请把时间设置在凌晨 1 ~ 5 点
  user-sync-time: "0 30 3 * * *" # 用户同步任务的时间点 * * * * * * 秒 分 时 日 月 周, 请把时间设置在凌晨 1 ~ 5 点,注意请把用户同步的任务滞后于部门同步时间,比如部门为2点,则用户为3点
  is-update-syncd: false # 当企微用户的邮箱,手机号,部门等信息更新之后,是否同步更新,默认为false,如果你不了解这个字段的含义,则不建议开启
feishu:
  # 配置获取详细文档参考:http://ldapdoc.eryajf.net/pages/83c90b/
  flag: "feishu" # 作为飞书在平台的标识
  app-id: "xxxxxxx" # 飞书的app-id
  app-secret: "xxxxxxxxxxx" # 飞书的app-secret
  enable-sync: false  # 是否开启定时同步飞书的任务
  dept-sync-time: "0 20 0 * * *" # 部门同步任务的时间点 * * * * * * 秒 分 时 日 月 周, 请把时间设置在凌晨 1 ~ 5 点
  user-sync-time: "0 40 0 * * *" # 用户同步任务的时间点 * * * * * * 秒 分 时 日 月 周, 请把时间设置在凌晨 1 ~ 5 点,注意请把用户同步的任务滞后于部门同步时间,比如部门为2点,则用户为3点
  dept-list:    # 配置要同步的部门列表,配置留空则同步所有部门,在开头加^表示不同步此部门
    #- "48456726"   # 需要同步的部门ID
    #- "^61213417"  # 不需要同步的部门ID
  is-update-syncd: false # 当飞书用户的邮箱,手机号,部门等信息更新之后,是否同步更新,默认为false,如果你不了解这个字段的含义,则不建议开启

执行如下命令使容器后台启动:

$ docker-compose up -d

应用启动之后,默认会创建对应的初始化数据,通过日志可以查看数据是否正常初始化,如果没有正常初始化,则下边的登陆可能无法正常进行。

当看到容器都正常运行之后,可以在本地进行访问:http://localhost:8888,用户名 / 密码: admin / 123456

如果想要访问 PhpLdapAdmin,则可访问:http://localhost:8091,用户名 / 密码: cn=admin,dc=eryajf,dc=net / 123456

如果并非通过 localhost 本机部署,则使用对应主机的 IP 加端口进行访问即可,例如你部署在 192.168.10.10 这台主机,则前端访问地址应该为:http://192.168.10.10:8888
链接: 官方文档安装

在go-ldap-admin上创建的用户都在ou=People 下,如果你搭建的openldap没有就要创建

批量创建openldap账号密码

#!/bin/bash

# 假设你有一个users.csv文件,格式为: description,username,mobile,mail
while IFS=',' read -r description username mobile mail; do
    echo "dn: uid=$username,ou=People,dc=eryajf,dc=net" > $username.ldif
    echo "objectClass: inetOrgPerson" >> $username.ldif
    echo "cn: $username" >> $username.ldif
    echo "sn: ${description}" >> $username.ldif  # Extract last name from full name
    echo "description: $description" >> $username.ldif
    echo "uid: $username" >> $username.ldif
    echo "mail: $mail" >> $username.ldif
    echo "employeeNumber: $mobile" >> $username.ldif
    echo "mobile: $mobile" >> $username.ldif
    echo "givenName: $description" >> $username.ldif  # Add a blank line for separation
    echo "displayName: $description"  >> $username.ldif
    echo "userPassword: {SSHA}cP9dtnOTKd0T5hnaQ6YmJBSxCM3NuMyS" >> $username.ldif
    # 导入临时生成的LDIF文件
    ldapadd -x -h go-ldap-admin-openldap:389 -D "cn=admin,dc=eryajf,dc=net" -w admin的密码 -f $username.ldif
done < users.csv

在OpenLDAP中,用户密码通常以加密形式存储,以增强安全性。你提到的{SSHA}是一种密码散列标识,代表了使用Salted Secure Hash Algorithm(带盐的安全哈希算法)对明文密码进行哈希处理的方式。生成这样一个散列值,你需要通过特定的命令行工具或编程语言的库来完成。以下是几种常见的方法来生成OpenLDAP兼容的{SSHA}散列密码:

使用slappasswd工具
如果你有访问OpenLDAP环境,最直接的方法是使用OpenLDAP自带的slappasswd工具。这个工具设计用于生成符合OpenLDAP要求的密码散列。

打开终端。
运行以下命令,其中your_plain_password是要加密的明文密码:

slappasswd -s your_plain_password

执行后,命令会输出一个类似于{SSHA}cP9dtnOTKd0T5hnaQ6YmJBSxCM3NuMyS的字符串,可以直接添加到LDIF文件中。

csv对应的格式

cat users.csv 
张三,zhang3,11111111111,zhang3@eryajf.com
李四,lisi4,12222222222,lisi4@eryajf.com

jenkins配置ldap认证

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值