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 程序化 植被_首次资产发行商通过