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 -dldapadmin登录
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.ldifdn要写在changetype上面
常用方法
- 添加ou
- 添加组
- 修改属性
- 添加属性
- 添加用户到组
- modrdn
- 修改密码
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配置权限
验证
分别在几个管理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.ldifJira集成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.ldifJira用户目录配置
服务器设置 名称: 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的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 黑龙江电信烽火MR820_LK融合机_H
- 下一篇: 虚幻4 程序化 植被_首次资产发行商通过