基于Docker部署OpenLDAP,同時(shí)集成第三方系統(tǒng)(GitLab、JIRA等)
這里可以了解什么是LDAP,為什么要用它>>>
一、通過(guò)docker-compose部署open-ldap
下面通過(guò)docker-compose一鍵部署openLDAP、phpldapadmin和self-service-password。(通過(guò)K8s部署的方式大同小異)
準(zhǔn)備open-ldap的docker-compose文件
version: '2'
services:
openldap:
image: osixia/openldap:1.5.0 ### 如果有私有倉(cāng)庫(kù)可以從自己的私有倉(cāng)庫(kù)拉取鏡像
container_name: openldap
restart: always
environment:
LDAP_LOG_LEVEL: "256"
LDAP_ORGANISATION: "xxx" ### 您的組織名稱(chēng)
LDAP_DOMAIN: "zaq.test" ### 公司域名
LDAP_BASE_DN: "dc=zaq,dc=test" ### 根據(jù)域名組成
LDAP_ADMIN_PASSWORD: "XXX" ### 密碼自己來(lái)設(shè)置
LDAP_CONFIG_PASSWORD: "XXX"
LDAP_READONLY_USER: "false"
#LDAP_READONLY_USER_USERNAME: "readonly"
#LDAP_READONLY_USER_PASSWORD: "readonly"
LDAP_RFC2307BIS_SCHEMA: "false"
LDAP_BACKEND: "mdb"
#LDAP_TLS: "true"
#LDAP_TLS_CRT_FILENAME: "zaq.test.pem"
#LDAP_TLS_KEY_FILENAME: "zaq.test.key"
#LDAP_TLS_DH_PARAM_FILENAME: "dhparam.pem"
#LDAP_TLS_CA_CRT_FILENAME: "ca.crt"
#LDAP_TLS_ENFORCE: "false"
#LDAP_TLS_CIPHER_SUITE: "SECURE256:-VERS-SSL3.0"
# LDAP_TLS_VERIFY_CLIENT: "demand"
LDAP_REPLICATION: "false"
#LDAP_REPLICATION_CONFIG_SYNCPROV: 'binddn="cn=admin,cn=config" bindmethod=simple credentials="$$LDAP_CONFIG_PASSWORD" searchbase="cn=config" type=refreshAndPersist retry="60 +" timeout=1 starttls=critical'
#LDAP_REPLICATION_DB_SYNCPROV: 'binddn="cn=admin,$$LDAP_BASE_DN" bindmethod=simple credentials="$$LDAP_ADMIN_PASSWORD" searchbase="$$LDAP_BASE_DN" type=refreshAndPersist interval=00:00:00:10 retry="60 +" timeout=1 starttls=critical'
#LDAP_REPLICATION_HOSTS: "#PYTHON2BASH:['ldap://ldap.example.org','ldap://ldap2.example.org']"
KEEP_EXISTING_CONFIG: "false"
LDAP_REMOVE_CONFIG_AFTER_SETUP: "true"
#LDAP_SSL_HELPER_PREFIX: "ldap"
tty: true
stdin_open: true
volumes:
- /opt/openldap/ldap:/var/lib/ldap
- /opt/openldap/slapd.d:/etc/ldap/slapd.d
- /opt/openldap/certs:/container/service/lapd/assets/certs
ports:
- "389:389"
- "636:636"
# For replication to work correctly, domainname and hostname must be
# set correctly so that "hostname"."domainname" equates to the
# fully-qualified domain name for the host.
domainname: "zaq.test"
hostname: "ldap-server"
phpldapadmin:
image: osixia/phpldapadmin:latest
container_name: phpldapadmin
restart: always
environment:
PHPLDAPADMIN_LDAP_HOSTS: "openldap" ### 如果部署后登錄不進(jìn)去有可能是這里出了問(wèn)題,直接換為部署openldap服務(wù)的公網(wǎng)IP試試
PHPLDAPADMIN_HTTPS: "false"
ports:
- "50081:80"
depends_on:
- openldap
self-service-password:
container_name: self-service-password
image: tiredofit/self-service-password:latest
restart: always
ports:
- "50080:80"
environment:
- LDAP_SERVER=ldap://openldap:389
- LDAP_BINDDN=cn=admin,dc=zaq,dc=test
- LDAP_BINDPASS=XXXX
- LDAP_BASE_SEARCH=dc=zaq,dc=test
- MAIL_FROM=it@open.com
- MAIL_FROM_NAME=賬號(hào)自助服務(wù)平臺(tái)
- SMTP_DEBUG=0
- SMTP_HOST=smtp.qiye.aliyun.com
- SMTP_USER=it@open.com
- SMTP_PASS=jYda52VZ8Ftw1111
- SMTP_PORT=465
- SMTP_SECURE_TYPE=ssl
- SMTP_AUTH_ON=true
- NOTIFY_ON_CHANGE=true
volumes:
- /etc/localtime:/etc/localtime
- /opt/openldap/self-service-password/htdocs:/www/ssp
- /opt/openldap/self-service-password/logs:/www/logs
deploy:
resources:
limits:
memory: 2G
reservations:
memory: 512M
執(zhí)行docker-compose up
命令,就可以一鍵部署openldap、phpldapadmin(他就是openldap的操作頁(yè)面)、self-service-password(用戶(hù)用來(lái)修改密碼的操作頁(yè)面)。
接下來(lái)可以通過(guò)訪(fǎng)問(wèn)IP:50081
訪(fǎng)問(wèn)phpldapadmin了。賬號(hào)就是cn=admin,dc=zaq,dc=test
,密碼就是通過(guò)LDAP_ADMIN_PASSWORD
設(shè)置的。
二、操作指南
這里先在dc下面創(chuàng)建一個(gè)ou=group和一個(gè)ou=user。暫時(shí)先不按部分區(qū)分,如果想再按部分區(qū)分則就先創(chuàng)建一個(gè)ou,再在該ou下創(chuàng)建一個(gè)ou=group即可。
創(chuàng)建ou
創(chuàng)建Group
在ou=group下創(chuàng)建dev
創(chuàng)建User Account
在ou=people下創(chuàng)建用戶(hù)
填寫(xiě)用戶(hù)信息
為用戶(hù)填寫(xiě)其他屬性
為用戶(hù)添加真實(shí)姓名和郵箱(有些系統(tǒng)需要用戶(hù)的這兩個(gè)信息!比如gitlab)
效果如下:
LDAP統(tǒng)一賬號(hào)管理——與第三方集成
一、LDAP和JRIA的集成
- 登錄進(jìn)JRIA的控制臺(tái)(需要是管理員身份)
- 點(diǎn)擊:配置—>用戶(hù)管理—>用戶(hù)目錄—>添加目錄—>LDAP
特別解釋幾個(gè)屬性的含義:
- LDAP模式
- “基礎(chǔ)DN” 填寫(xiě)LDAP的根節(jié)點(diǎn),類(lèi)似dc=zaq,dc=test;
- “附加用戶(hù)DN” 填寫(xiě)限制用戶(hù)搜索范圍的值,類(lèi)似ou=people,不填的話(huà)從基礎(chǔ)DN開(kāi)始搜索;
- “附加組DN” 填寫(xiě)限制用戶(hù)組搜索范圍的值,和上一項(xiàng)類(lèi)似;
- LDAP權(quán)限
- 只讀:JIRA只能從LDAP中讀取用戶(hù)以及用戶(hù)組信息,所有對(duì)用戶(hù)及用戶(hù)組的修改不能通過(guò)JIRA進(jìn)行。
- 本地只讀:相比只讀來(lái)說(shuō),可以在JIRA中添加組,并且會(huì)將LDAP同步過(guò)來(lái)的用戶(hù)加入到該組中。
- 讀寫(xiě):不但可以讀取LDAP上的用戶(hù)及組信息,還可以通過(guò)JIRA修改這些信息,這些信息會(huì)自動(dòng)同步到LDAP。
二、LDAP和Confluence的集成
右上角設(shè)置 → 用戶(hù)管理 → 用戶(hù)目錄 → 添加目錄 → LDAP
接下來(lái)的流程和JIRA一模一樣。(這里也可以直接讓JIRA和Confluence聯(lián)動(dòng),就只需要配置好JIRA的LDAP就行了)
三、LDAP和GitLab的集成
找到gitlab的配置文件:/etc/gitlab/gitlab.rb,然后修改下面的內(nèi)容
### LDAP Settings
###! Docs: https://docs.gitlab.com/omnibus/settings/ldap.html
###! **Be careful not to break the indentation in the ldap_servers block. It is
###! in yaml format and the spaces must be retained. Using tabs will not work.**
gitlab_rails['ldap_enabled'] = true
# gitlab_rails['prevent_ldap_sign_in'] = false
###! **remember to close this block with 'EOS' below**
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
main: # 'main' is the GitLab 'provider ID' of this LDAP server
label: 'LDAP'
host: 'xx.xx.xx.xx' ### LDAP服務(wù)地址
port: 389
uid: 'uid' ### 指定登錄gitlab使用LDAP的哪個(gè)字段作為賬號(hào)
bind_dn: 'cn=admin,dc=zaq,dc=test' ### 這里用自己的管理員賬號(hào)(需要一個(gè)有read權(quán)限的賬號(hào)驗(yàn)證通過(guò)后搜索用戶(hù)輸入的用戶(hù)名是否存在)
password: 'XXX'
encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
# verify_certificates: true
# smartcard_auth: false
active_directory: false ### 如果是 Active Directory LDAP server 則設(shè)為true
allow_username_or_email_login: true ### 是否允許email登錄
# lowercase_usernames: false ### 是否將用戶(hù)名轉(zhuǎn)為小寫(xiě)
block_auto_created_users: false ### 是否自動(dòng)創(chuàng)建用戶(hù)。如果設(shè)置為true則自動(dòng)注冊(cè)的賬戶(hù)是被鎖定的,需要管理員賬戶(hù)手動(dòng)的為這些賬戶(hù)解鎖,因此此處將其設(shè)置為false。當(dāng)設(shè)置為false的時(shí)候,就需要保證,對(duì)于第三方登錄的用戶(hù)完全可控。
base: 'ou=people,dc=zaq,dc=com' ### 從哪個(gè)位置搜索用戶(hù),這里填自己的
user_filter: '' ### 表示以某種過(guò)濾條件篩選用戶(hù),比如我們只希望組為gitlab的用戶(hù)來(lái)訪(fǎng)問(wèn)GitLab,則這里可以設(shè)置為:memberOf=ou=gitlab,ou=people,dc=zaq,dc=com
# attributes: # LDAP 中用戶(hù)的屬性
# username: ['uid', 'userid', 'sAMAccountName']
# email: ['mail', 'email', 'userPrincipalName']
# name: 'cn'
# first_name: 'givenName'
# last_name: 'sn'
## EE only
group_base: ''
admin_group: ''
sync_ssh_keys: false
EOS
修改完后重啟GitLab!最后最好再取消GitLab的注冊(cè)功能,新用戶(hù)只能通過(guò) LDAP 認(rèn)證的方式進(jìn)行登陸。
拉取代碼時(shí)要用LDAP創(chuàng)建的賬號(hào)密碼拉取。
四、LDAP和Nexus的集成
- 登錄管理員賬號(hào)
- 配置完后別忘了Users中選中LDAP用戶(hù),為L(zhǎng)DAP用戶(hù)分配角色
五、LDAP和Harbor的集成
特別注意:在沒(méi)有添加任何用戶(hù)之前,你可以修改認(rèn)證模式(Database模式或者LDAP模式), 但當(dāng)Harbor系統(tǒng)中已經(jīng)有至少一個(gè)用戶(hù)之后(除了admin用戶(hù)外),將不能夠修改認(rèn)證模式。
新版本的可以直接在頁(yè)面進(jìn)行修改,如下:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-403861.html
登錄管理員賬戶(hù),選中配置管理
如果是老版本,則需要修改harbor.cfg文件,如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-403861.html
##By default the auth mode is db_auth, i.e. the credentials are stored in a local database.
#Set it to ldap_auth if you want to verify a user's credentials against an LDAP server.
auth_mode = ldap_auth
#The url for an ldap endpoint.
ldap_url = xx.xx.xx.xx
#A user's DN who has the permission to search the LDAP/AD server.
#If your LDAP/AD server does not support anonymous search, you should configure this DN and ldap_search_pwd.
ldap_searchdn = cn=admin,dc=zaq,dc=test
#the password of the ldap_searchdn
ldap_search_pwd = xxx
#The base DN from which to look up a user in LDAP/AD
ldap_basedn = dc=zaq,dc=com
#Search filter for LDAP/AD, make sure the syntax of the filter is correct.
#ldap_filter = (objectClass=person)
# The attribute used in a search to match a user, it could be uid, cn, email, sAMAccountName or other attributes depending on your LDAP/AD
ldap_uid = uid
#the scope to search for users, 0-LDAP_SCOPE_BASE, 1-LDAP_SCOPE_ONELEVEL, 2-LDAP_SCOPE_SUBTREE
ldap_scope = 2
#Timeout (in seconds) when connecting to an LDAP Server. The default value (and most reasonable) is 5 seconds.
ldap_timeout = 5
#Verify certificate from LDAP server
ldap_verify_cert = true
#The base dn from which to lookup a group in LDAP/AD
ldap_group_basedn = ou=IT,dc=shileizcc,dc=com
#filter to search LDAP/AD group
ldap_group_filter = objectclass=group
#The attribute used to name a LDAP/AD group, it could be cn, name
ldap_group_gid = cn
#The scope to search for ldap groups. 0-LDAP_SCOPE_BASE, 1-LDAP_SCOPE_ONELEVEL, 2-LDAP_SCOPE_SUBTREE
ldap_group_scope = 2
到了這里,關(guān)于基于Docker部署OpenLDAP,同時(shí)集成第三方系統(tǒng)(GitLab、JIRA、Nexus、Harbor)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!