在你合适的目录中创建 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认证