Docker部署OpenLDAP

Docker部署OpenLDAPLDAP 说明什么是 LDAP 轻型目录访问协议 LightweightD LDAP 是一个开放的 中立的 业标准的应用协议 通过 IP 协议提供访问控制和维护分布式信息的目录信息 它是由目录数据库和一套访问协议组成的系统 详情请查看维基百科 LDAP 为什么用 LDAP LDAP 是开放的 Internet 标准 市场上或者开源社区的绝大多数软件都支持 LDAP 协议 简单来说 LDAP 协议最大的好处就是能统一管理用户密码 新人报道创建一个用户就能登录公司的所有平台

LDAP说明

什么是LDAP?

轻型目录访问协议(Lightweight Directory Access Protocol,LDAP):是一个开放的、中立的、业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息,它是由目录数据库和一套访问协议组成的系统,详情请查看维基百科LDAP。

为什么用LDAP?

LDAP是开放的Internet标准,市场上或者开源社区的绝大多数软件都支持LDAP协议。简单来说,LDAP协议最大的好处就是能统一管理用户密码,新人报道创建一个用户就能登录公司的所有平台(gitlab、jumpserver、监控等等),离职一键删除即可。

LDAP相关概念

  • dn(Distinguished Name):区分名称,LDAP中每个条目都有自己的dn,dn是该条目在整棵树中的唯一标识,如同文件系统中,带路径的文件名就是DN。
  • rdn(Relative dn):相对区别名称,好比linux中的相对路径。
  • dc(Domain Component):域名组件。其格式是将完整的域名分成几部分,如将example.com变成dc=example,dc=com。
  • uid(User ID):用户ID,如merle.chang。
  • ou(Organization Unit):组织单元。
  • cn(Common Name):公共名称。
  • sn(surname):姓氏。
  • c(Country):国家,如“CN”或者“US”。
  • o(Organization):组织名,如中华人民共和国公安局。

部署OpenLDAP

创建数据目录

mkdir -pv /data/openldap/{ 
   data,conf} mkdir -pv /data/docker-compose/openldap 

配置docker-compose文件

version: "3" services: openldap: container_name: openldap image: osixia/openldap:1.5.0-amd64 restart: always ports: - 389:389 - 636:636 volumes: - /etc/localtime:/etc/localtime - /etc/localtime:/etc/localtime - /data/openldap/data:/var/lib/ldap - /data/openldap/conf:/etc/ldap/slapd.d environment: LDAP_TLS_VERIFY_CLIENT: never LDAP_ORGANISATION: git LDAP_DOMAIN: git.com.cn LDAP_ADMIN_PASSWORD: G1T@Ldap LDAP_CONFIG_PASSWORD: G1T@Ldap networks: - openldap deploy: resources: limits: memory: 4G reservations: memory: 1G phpldapadmin: container_name: phpldapadmin image: osixia/phpldapadmin:0.9.0-amd64 restart: always links: - openldap depends_on: - openldap ports: - 8099:80 volumes: - /etc/localtime:/etc/localtime environment: - PHPLDAPADMIN_LDAP_HOSTS=192.168.2.101 - PHPLDAPADMIN_HTTPS=false networks: - openldap deploy: resources: limits: memory: 1G reservations: memory: 256M networks: openldap: 

启动

docker-compose up -d 

ldapadmin登录

dn: cn=admin,dc=git,dc=com,dc=cn 口令: G1T@Ldap 

常用操作命令

创建OU

创建顶级ou

cat > add_ou.ldif << EOF dn: ou=Group,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: Group dn: ou=People,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: People dn: ou=cn,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: cn EOF ldapadd -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=git,dc=com,dc=cn" -w "G1T@Ldap" -f add_ou.ldif 

创建自定义ou

cat > add_custom_ou.ldif << EOF dn: ou=Jenkins,ou=Group,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: Jenkins dn: ou=GitLab,ou=Group,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: GitLab dn: ou=Jira,ou=Group,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: Jira dn: ou=Confluence,ou=Group,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: Confluence dn: ou=Admin,ou=People,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: Admin dn: ou=Users,ou=People,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: Users EOF ldapadd -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=git,dc=com,dc=cn" -w "G1T@Ldap" -f add_custom_ou.ldif 

创建组

添加一个组, 在Jenkins的OU下

cat > group_jenkins.ldif << EOF dn: cn=users,ou=Jenkins,ou=Group,dc=git,dc=com,dc=cn objectClass: posixGroup objectClass: top cn: users gidNumber: 4002 EOF ldapadd -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=example,dc=org" -w "G1T@Ldap" -f group_jenkins.ldif 

注意dn的顺序,否则报错

创建账户

添加用户小明, 位置在Users的OU下,并绑定到Jenkins的用户组Users中

cat > xiaoming.ldif << EOF dn: cn=xiaoming,ou=Users,ou=People,dc=git,dc=com,dc=cn objectClass: top objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: xiaoming sn: xiao uid: xiaoming userPassword: uidNumber: 44001 gidNumber: 4002 homeDirectory: /home/users/xiaoming mail: title: add user xiaoming EOF ldapadd -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=git,dc=com,dc=cn" -w "G1T@Ldap" -f xiaoming.ldif 

为用户设置密码

ldappasswd -x -h 127.0.0.1 -p 389 -D "cn=admin,dc=git,dc=com,dc=cn" -w "G1T@Ldap" "cn=xiaoming,ou=Users,ou=People,dc=git,dc=com,dc=cn" New password: .NrQ5pow 

搜索

# 搜索全部 ldapsearch -x -H ldap://127.0.0.1:389 -b "dc=git,dc=com,dc=cn" -D "cn=admin,dc=git,dc=com,dc=cn" -w "G1T@Ldap" # 正则匹配 ldapsearch -x -H ldap://127.0.0.1:389 -b "dc=git,dc=com,dc=cn" -D "cn=admin,dc=git,dc=com,dc=cn" -w "G1T@Ldap" "cn=xiao*" ldapsearch -x -H ldap://127.0.0.1:389 -b "dc=git,dc=com,dc=cn" -D "cn=admin,dc=git,dc=com,dc=cn" -w "G1T@Ldap" "ou=*" 

删除

删除用户小明

ldapdelete -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=git,dc=com,dc=cn" -w "G1T@Ldap" "cn=xiaoming,ou=Users,ou=People,dc=git,dc=com,dc=cn" 

删除Jenkins的users组

ldapdelete -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=git,dc=com,dc=cn" -w "G1T@Ldap" "cn=users,ou=Jenkins,ou=Group,dc=git,dc=com,dc=cn" 

modify

添加用户小红

cat > xiaohong.ldif << EOF dn: cn=xiaohong,ou=Users,ou=People,dc=git,dc=com,dc=cn changetype: add objectClass: top objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: xiaohong sn: xiao uid: xiaohong userPassword: uidNumber: 44002 gidNumber: 4002 homeDirectory: /home/users/xiaohong mail: title: add user xiaohong EOF ldapmodify -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=git,dc=com,dc=cn" -w "G1T@Ldap" -f xiaohong.ldif 

dn要写在changetype上面

常用方法

  • 添加ou
dn: ou=Jira,ou=Group,dc=git,dc=com,dc=cnchangetype: addobjectClass: organizationalUnitobjectClass: topou: Jira 
  • 添加组
dn: cn=jira-administrators,ou=Jira,ou=Groups,dc=git,dc=com,dc=cnchangetype: addobjectClass: groupOfUniqueNamesobjectClass: topcn: jira-administratorsuniqueMember: cn=admin,ou=Users,ou=People,dc=git,dc=com,dc=cn 
  • 修改属性
dn: cn=xiaoming,ou=Users,dc=git,dc=com,dc=cnchangetype: modifyreplace: titletitle: this is a new title 
  • 添加属性
dn: cn=jira-software-users,ou=Jira,ou=Group,dc=git,dc=com,dc=cnchangetype: addadd: descriptiondescription: this is a add description 
  • 添加用户到组
dn: cn=jira-software-users,ou=Jira,ou=Group,dc=git,dc=com,dc=cnchangetype: modifyadd: uniqueMemberuniqueMember: cn=xiaohong,ou=Users,dc=example,dc=org 
  • modrdn
cat > modrdn.ldif << EOFdn: cn=xiaoming,ou=Users,ou=People,dc=git,dc=com,dc=cnchangetype: modrdnnewrdn: cn=xiaoming2deleteoldrdn: 0newsuperior: ou=Users,ou=People,dc=git,dc=com,dc=cnEOFldapmodify -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=git,dc=com,dc=cn" -w "G1T@Ldap" -f modrdn.ldif 
  • 修改密码
cat > changepwd.ldif << EOF dn: cn=xiaoming,ou=Users,ou=People,dc=git,dc=com,dc=cn changetype: modify replace: userPassword userPassword: xiaomingpwd EOF ldapmodify -x -H ldap://127.0.0.1:389 -D "cn=xiaoming,ou=Users,ou=People,dc=git,dc=com,dc=cn" -w .NrQ5pow -f changepwd.ldif 

LDAP用户权限配置

创建管理ou

创建顶级manager,在manager下创建admins(管理),readonly(只读),password_manager(密码管理)等ou

cat > add_manager_ou.ldif << EOF dn: ou=Manager,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: Manager dn: ou=admins,ou=Manager,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: admins dn: ou=readonly,ou=Manager,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: readonly dn: ou=password_manager,ou=Manager,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: password_manager EOF ldapadd -x -D cn=admin,dc=git,dc=com,dc=cn -w 'G1T@Ldap' -f add_manager_ou.ldif 

配置权限

  1. 通过查看/etc/ldap/slapd.d/cn=config来确定olcDatabase配置文件, 比如我的是olcDatabase={1}mdb.ldif, 根据olcDatabase={1}mdb.ldif配置文件来确定dn位置, 我的是olcDatabase={1}mdb
  2. 根据olcDatabase={1}mdb.ldif配置文件, 重新编写访问控制
cat > new-acl.ldif << EOF dn: olcDatabase={1}mdb,cn=config changetype: modify delete: olcAccess - add: olcAccess olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break olcAccess: {1}to attrs=userPassword,shadowLastChange by self write by dn="cn=admin,dc=git,dc=com,dc=cn" write by dn.children="ou=admins,ou=Manager,dc=git,dc=com,dc=cn" read by dn.children="ou=password_manager,ou=Manager,dc=git,dc=com,dc=cn" write by anonymous auth by * none olcAccess: {2}to * by self read by dn="cn=admin,dc=git,dc=com,dc=cn" write by dn.children="ou=admins,ou=Manager,dc=git,dc=com,dc=cn" write by dn.children="ou=password_manager,ou=Manager,dc=git,dc=com,dc=cn" read by dn.children="ou=readonly,ou=Manager,dc=git,dc=com,dc=cn" read by * none EOF ldapmodify -Y EXTERNAL -H ldapi:/// -f new-acl.ldif 
// 对密码属性访问控制 olcAccess: { 
    1}to attrs=userPassword,shadowLastChange // 对全局属性访问控制(密码除外) olcAccess: { 
    2}to * 

验证

分别在几个管理ou下创建对应账户,然后访问ldap,验证权限,ldif配置文件示例

cat > add_readOnly.ldif << EOF dn: cn=readuser,ou=readonly,ou=Manager,dc=git,dc=com,dc=cn objectClass: simpleSecurityObject objectClass: organizationalRole description: LDAP read only user cn: readuser userPassword: readuser EOF ldapadd -x -D cn=admin,dc=git,dc=com,dc=cn -w 'G1T@Ldap' -f add_readOnly.ldif 

Jira集成OpenLDAP

OpenLDAP配置

在Users的ou下创建用户

cat > jira-users.ldif << EOF dn: cn=admin,ou=Users,dc=git,dc=com,dc=cn changetype: add objectClass: posixAccount objectClass: top objectClass: inetOrgPerson objectClass: shadowAccount cn: admin sn: ADMIN uid: admin userPassword: uidNumber: 44000 gidNumber: 0 homeDirectory: /home/users/admin mail: title: add user xiaohong dn: cn=xiaoming,ou=Users,dc=git,dc=com,dc=cn changetype: add objectClass: posixAccount objectClass: top objectClass: inetOrgPerson objectClass: shadowAccount cn: xiaoming sn: 小明 uid: xiaoming userPassword: uidNumber: 44001 gidNumber: 0 homeDirectory: /home/users/xiaoming mail: title: add user xiaoming dn: cn=xiaohong,ou=Users,dc=git,dc=com,dc=cn changetype: add objectClass: posixAccount objectClass: top objectClass: inetOrgPerson objectClass: shadowAccount cn: xiaohong sn: 小红 uid: xiaohong userPassword: uidNumber: 44002 gidNumber: 0 homeDirectory: /home/users/xiaohong mail: title: add user xiaohong EOF ldapmodify -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=git,dc=com,dc=cn" -w G1T@Ldap -f jira-users.ldif 

在Groups下创建Jira的ou, 在Jira的ou下创建分组

cat > jira-groups.ldif << EOF 在Group下创建Jira的ou dn: ou=Jira,ou=Groups,dc=git,dc=com,dc=cn changetype: add objectClass: organizationalUnit objectClass: top ou: Jira 创建Jira的用户组并添加用户到组中 dn: cn=jira-administrators,ou=Jira,ou=Groups,dc=git,dc=com,dc=cn changetype: add objectClass: groupOfUniqueNames objectClass: top cn: jira-administrators uniqueMember: cn=admin,ou=Users,dc=git,dc=com,dc=cn dn: cn=jira-software-users,ou=Jira,ou=Groups,dc=git,dc=com,dc=cn changetype: add objectClass: groupOfUniqueNames objectClass: top cn: jira-software-users uniqueMember: cn=xiaoming,ou=Users,dc=git,dc=com,dc=cn dn: cn=jira-software-users,ou=Jira,ou=Groups,dc=git,dc=com,dc=cn changetype: modify add: uniqueMember uniqueMember: cn=xiaohong,ou=Users,dc=git,dc=com,dc=cn dn: cn=deployment,ou=Jira,ou=Groups,dc=git,dc=com,dc=cn changetype: add objectClass: groupOfUniqueNames objectClass: top cn: deployment uniqueMember: cn=xiaoming,ou=Users,dc=git,dc=com,dc=cn dn: cn=deployment,ou=Jira,ou=Groups,dc=git,dc=com,dc=cn changetype: modify add: uniqueMember uniqueMember: cn=xiaohong,ou=Users,dc=git,dc=com,dc=cn EOF ldapmodify -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=git,dc=com,dc=cn" -w G1T@Ldap -f jira-groups.ldif 

Jira用户目录配置

服务器设置 名称: LDAP服务器 目录类型: OpenLDAP 主机名: 192.168.2.101 端口: 389 用户名: cn=admin,dc=git,dc=com,dc=cn 密码:  LDAP设置 基本DN: dc=git,dc=com,dc=cn 附加用户DN: ou=Users 附加组dn: ou=Jira,ou=Groups LDAP权限: 勾选只读 用户模式设置: 几乎不用设置,核对属性值是否与OpenLDAP中用户属性值是否一致即可 组模式设置 注意组类型,Jira需要在OpenLDAP中创建unique name类型的组 组成员模式: 默认 

GitLab集成OpenLDAP

gitlab配置文件gitlab.rb示例

gitlab_rails['ldap_enabled'] = true gitlab_rails['prevent_ldap_sign_in'] = false gitlab_rails['ldap_group_sync_worker_cron'] = "0 */2 * * * *" gitlab_rails['ldap_servers'] = { 'main' => { 'label' => 'LDAP', 'host' => '3.1.101.38', 'port' => 389, 'uid' => 'uid', 'encryption' => 'plain', 'verify_certificates' => false, 'bind_dn' => 'cn=admin,dc=git,dc=com,dc=cn', 'password' => 'G1T@Ldap', 'timeout' => 30, 'active_directory' => false, 'allow_username_or_email_login' => false, 'block_auto_created_users' => false, 'base' => 'ou=People,dc=git,dc=com,dc=cn', 'user_filter' => 'memberOf=cn=credit-rebuild,ou=GitLab,ou=Group,dc=git,dc=com,dc=cn', 'attributes' => { 'username' => ['cn'], 'email' => ['mail',], 'name' => 'sn', 'first_name' => 'givenName', 'last_name' => 'sn' }, 'lowercase_usernames' => false, # EE Only 'group_base' => '', 'admin_group' => ', 'sync_ssh_keys' => false } } 
gitlab-ctl check-config gitlab-ctl reconfigure 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214943.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午3:04
下一篇 2026年3月18日 下午3:05


相关推荐

  • centos7.4安装docker_docker打包python应用

    centos7.4安装docker_docker打包python应用前言当我们在一台电脑上搭建了python3.6的环境,下次换台电脑,又得重新搭建一次,设置环境变量等操作。好不容易安装好,一会提示pip不是内部或外部命令,一会又提示pip:commandno

    2022年8月6日
    10
  • docker部署web项目_docker web管理工具

    docker部署web项目_docker web管理工具前言前面我们运行的容器并没有一些什么特别的用处。接下来让我们尝试使用docker构建一个web应用程序。我们将在docker容器中运行一个PythonFlask应用来运行一个web

    2022年7月29日
    9
  • docker的常用命令汇总_Docker命令

    docker的常用命令汇总_Docker命令docker常用命令合集文章目录docker常用命令合集一、docker概论二、Docker的应用场景2.1Docker的优点三、Docker架构四、docker安装4.1安装依赖包4.2设置阿里云镜像源4.3安装docker-ce4.4镜像加速4.5网络优化五、docker镜像使用六、docker容器的使用七、创建镜像八、docker的数据管理九、本地私有仓库建立十、容器互联十一、总结一、docker概论Docker是一个开源的应用容器引擎,基于Go语言并遵从Apa

    2025年12月2日
    10
  • docker常用命令详解

    docker常用命令详解

    2021年6月1日
    86
  • Docker 拉取 oracle 11g镜像配置

    Docker 拉取 oracle 11g镜像配置话不多说开始记录docker拉取阿里的oracle11g镜像并进行配置,用pl/sql可以登录为最终结果navicat连接是在最后一步参考:https://blog.csdn.net/zwx521515/article/details/77982884但是根据这个进行配置会有一些问题,所以写这篇记录一下,希望可以帮助其他人开始:①、开始拉取镜像-执行命令:…

    2022年5月7日
    115
  • docker dockerfile详解_进入docker容器命令

    docker dockerfile详解_进入docker容器命令前言Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。Dockerfile简介Dockerfile是用来构建Docker镜像的构建文件,是由一系列

    2022年7月28日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号