欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Docker部署OpenLDAP

发布时间:2024/3/26 编程问答 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Docker部署OpenLDAP 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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: openldapimage: osixia/openldap:1.5.0-amd64restart: alwaysports:- 389:389- 636:636volumes:- /etc/localtime:/etc/localtime- /etc/localtime:/etc/localtime- /data/openldap/data:/var/lib/ldap- /data/openldap/conf:/etc/ldap/slapd.denvironment:LDAP_TLS_VERIFY_CLIENT: neverLDAP_ORGANISATION: gitLDAP_DOMAIN: git.com.cnLDAP_ADMIN_PASSWORD: G1T@LdapLDAP_CONFIG_PASSWORD: G1T@Ldapnetworks:- openldapdeploy:resources:limits:memory: 4Greservations:memory: 1Gphpldapadmin:container_name: phpldapadminimage: osixia/phpldapadmin:0.9.0-amd64restart: alwayslinks:- openldapdepends_on:- openldapports:- 8099:80volumes:- /etc/localtime:/etc/localtimeenvironment:- PHPLDAPADMIN_LDAP_HOSTS=192.168.2.101- PHPLDAPADMIN_HTTPS=falsenetworks:- openldapdeploy:resources:limits:memory: 1Greservations:memory: 256Mnetworks:openldap:

LDAP_TLS_VERIFY_CLIENT: 客户端认证,never代表不需要认证
LDAP_ORGANISATTON: 组织名称
LDAP_DOMAIN: 域名
LDAP_APMIN_PASSWORD: 超级管理员密码

-p 389:389 # LDAP端口
-p 636:636 # LDAP加密端口

PHPLDAPADMIN_HTTPS: 关闭https认证
PHPLDAPADMIN_LDAP_HOSTS: 需要连接的ldap服务器地址

启动

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: Groupdn: ou=People,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: Peopledn: ou=cn,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: cn EOFldapadd -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: Jenkinsdn: ou=GitLab,ou=Group,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: GitLabdn: ou=Jira,ou=Group,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: Jiradn: ou=Confluence,ou=Group,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: Confluencedn: ou=Admin,ou=People,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: Admindn: ou=Users,ou=People,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: Users EOFldapadd -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 EOFldapadd -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: 123456 uidNumber: 44001 gidNumber: 4002 homeDirectory: /home/users/xiaoming mail: xiaoming@test.com.cn title: add user xiaoming EOFldapadd -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: 123456 uidNumber: 44002 gidNumber: 4002 homeDirectory: /home/users/xiaohong mail: xiaohong@test.com.cn title: add user xiaohong EOFldapmodify -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: Managerdn: ou=admins,ou=Manager,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: adminsdn: ou=readonly,ou=Manager,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: readonlydn: ou=password_manager,ou=Manager,dc=git,dc=com,dc=cn objectClass: organizationalUnit objectClass: top ou: password_manager EOFldapadd -x -D cn=admin,dc=git,dc=com,dc=cn -w 'G1T@Ldap' -f add_manager_ou.ldif

配置权限

  • 通过查看/etc/ldap/slapd.d/cn=config来确定olcDatabase配置文件, 比如我的是olcDatabase={1}mdb.ldif, 根据olcDatabase={1}mdb.ldif配置文件来确定dn位置, 我的是olcDatabase={1}mdb
  • 根据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,shadowLastChangeby self writeby dn="cn=admin,dc=git,dc=com,dc=cn" writeby 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" writeby anonymous authby * none olcAccess: {2}to *by self readby dn="cn=admin,dc=git,dc=com,dc=cn" writeby dn.children="ou=admins,ou=Manager,dc=git,dc=com,dc=cn" writeby dn.children="ou=password_manager,ou=Manager,dc=git,dc=com,dc=cn" readby dn.children="ou=readonly,ou=Manager,dc=git,dc=com,dc=cn" readby * none EOFldapmodify -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: readuser123456 EOFldapadd -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: 123456 uidNumber: 44000 gidNumber: 0 homeDirectory: /home/users/admin mail: admin@test.com.cn title: add user xiaohongdn: 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: 123456 uidNumber: 44001 gidNumber: 0 homeDirectory: /home/users/xiaoming mail: xiaoming@test.com.cn title: add user xiaomingdn: 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: 123456 uidNumber: 44002 gidNumber: 0 homeDirectory: /home/users/xiaohong mail: xiaohong@test.com.cn 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=cndn: 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=cndn: 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=cndn: 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=cndn: 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 密码: 123456LDAP设置 基本DN: dc=git,dc=com,dc=cn 附加用户DN: ou=Users 附加组dn: ou=Jira,ou=GroupsLDAP权限: 勾选只读用户模式设置: 几乎不用设置,核对属性值是否与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

    总结

    以上是生活随笔为你收集整理的Docker部署OpenLDAP的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。