- docker run -d --name openldap -p 1389:1389 bitnami/openldap:2.6.8
- docker ps
- openldap up and running
- docker exec -it openldap ldapsearch -H ldap://localhost:1389 -x -b dc=example,dc=org
- numEntries: 5
- ldapsearch -H ldap://localhost:1389 -x -b dc=example,dc=org
- ldapsearch: No such file or directory
- curl ldap://localhost:1389/dc=example,dc=org??sub
- numEntries: 5
星期五, 11月 22, 2024
Replace ldap-utils with cURL
星期六, 1月 07, 2023
Docker CAS 6.6.x with LDAP, not Anonymous
change
- cas.authn.ldap[0].type=ANONYMOUS
to
- cas.authn.ldap[0].type=AUTHENTICATED
- cas.authn.ldap[0].bind-dn=CN=user01,ou=users,dc=example,dc=org
- cas.authn.ldap[0].bind-credential=bitnami1
Docker CAS 6.6.x with LDAP
之前我們已確認了 Docker CAS 可以運作,預設帳密是 casuser / Mellon 這組,姑且稱之為「靜態帳密表」。接著利用這篇所述(注意版本,行文時已升到 2.6.3),來試試 CAS 如何與後端 LDAP 合作。首先開好 LDAP 與之前的 CAS,並進去確認連往 LDAP 的網路通暢:
- docker run -d --name cas -p 8080:8080 -v ./cas.properties:/etc/cas/config/cas.properties apereo/cas:6.6.4
- docker exec -it cas /bin/bash
- echo < /dev/tcp/172.18.8.166/1389 && echo on || echo off
- on
接著在 cas.properties 加入以下幾行:
- cas.authn.ldap[0].ldap-url=ldap://172.18.8.166:1389
- cas.authn.ldap[0].base-dn=ou=users,dc=example,dc=org
- cas.authn.ldap[0].type=ANONYMOUS
- cas.authn.ldap[0].search-filter=(&(objectClass=posixAccount)(cn={user}))
重啟帶有新設定的 CAS 雖然順利,但仍僅能驗證 casuser / Mellon 而不能驗證 LDAP user01 / bitnami1 這組帳密。注意看,log 裡面有這段:
- user01 not found in backing map.
意思是 CAS 把輸入的 user01 / bitnami1 這組帳密交給「靜態帳密表」了。為防止混淆,可以關掉它。在 cas.properties 加入一行:
- cas.authn.accept.users=
重啟之後情況不變?這時得把 log4j2.xml 抓出來改設定,看看發生了什麼問題?
- docker cp cas:/etc/cas/config/log4j2.xml .
- vi log4j2.xml
- <Property name="cas.log.level">debug</Property>
- vi cas.properties
- logging.config=file:/etc/cas/config/log4j2.xml
- docker stop cas
- docker rm cas
- lsof -i :8080
- <PID>
- kill <PID>
- docker run -d --name cas -p 8080:8080 -v ./cas.properties:/etc/cas/config/cas.properties -v ./log4j2.xml:/etc/cas/config/log4j2.xml apereo/cas:6.6.4
在海一般的訊息之中,唯一有幫助的是這條:
- <Authentication handler [HttpBasedServiceCredentialsAuthenticationHandler] does not support the credential type [UsernamePasswordCredential(username=user01, source=null, customFields={})].>
這意思很難懂?沒錯,它其實要表達的是「現在這個 Docker CAS 並不支援 LDAP」。我們得學習這篇的做法,在這裡挑 6.6 或你想要的分支下載,在 build.gradle 檔案中找到 dependencies 段落,在其中新增一行:
- implementation "org.apereo.cas:cas-server-support-ldap"
這裡千萬要注意拼字是否正確?原文把 implementation 拼錯,複製貼上並不管用,也不會有錯誤訊息,我就這樣又去多走彎路了。然後在同目錄執行指令:
- gradlew clean build
幾分鐘後,可以看到一個新的 cas.war 在 build/libs 目錄下,大小應該會比 Docker Image 裡面那個要大一些,我們要用這個新的:
- docker run -d --name cas -p 8080:8080 -v ./cas.properties:/etc/cas/config/cas.properties -v ./log4j2.xml:/etc/cas/config/log4j2.xml -v ./cas.war:/docker/cas/war/cas.war apereo/cas:6.6.4
這次要有耐心一點,原本一分鐘就能開好的 CAS 可能要拉長到三分多鐘,不是壞了。能驗證 LDAP 的帳密,算是值得吧?
星期五, 4月 22, 2022
OpenLDAP on Docker
- docker run -d --name openldap -p 1389:1389 [-e LDAP_USERS=user01,user02 -e LDAP_PASSWORDS=bitnami1,bitnami2] bitnami/openldap:2.6.1
- ldapsearch -H ldap://localhost:1389 -x -b dc=example,dc=org
星期三, 8月 22, 2018
LDAP for testing environment
為了資安與權限,還要讓使用者有機會修改預設密碼,雖然 ldappasswd 很簡單,但不是每個使用者都有 Linux 環境,也都願意下指令。替代方案是這個 Docker Image,一個最單純的啟動範例:
- docker run -d -p 80:80 --name lssp
- -e LDAP_HOST=172.16.1.2
- -e LDAP_PORT=389
- -e LDAP_BASE=dc=acme,dc=com
- -e LDAP_USER=cn=Manager,dc=acme,dc=com
- -e LDAP_PASS=xxxx
- dtwardow/ldap-self-service-password
奉送一首小插曲:明明在 ubuntu 試過可以了,搬到 CentOS7 結果出個莫名其妙的狀況,「AH00534: apache2: Configuration error: No MPM loaded.」,似乎是檔案系統的問題。雖然看不太懂,不過以下解法有用(出處有些錯字,校正後如下):
- docker stop lssp
- systemctl stop docker
- dd if=/dev/zero of=docker_fs bs=1G count=2(開 2G 的空間,不夠的話加大 count)
- mkfs -t xfs -n ftype=1 docker_fs
- mount -o loop docker_fs /var/lib/docker
- 在 /etc/fstab 新增一行 /path/to/docker_fs /var/lib/docker xfs rw,loop,auto 0 0
- systemctl start docker
- docker start lssp
星期四, 1月 04, 2018
LDAP search result size limit
- dn: cn=config
- changetype: modify
- replace: olcSizeLimit
- olcSizeLimit: nnn
- sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f changeSizeLimit.ldif
星期三, 1月 11, 2017
ldapsearch
- ping ldap.forumsys.com
- ldapsearch -h ldap.forumsys.com -x
- ldapsearch -h ldap.forumsys.com -x -s base
- ldapsearch -h ldap.forumsys.com -x -b dc=example,dc=com
- ldapsearch -h ldap.forumsys.com -D cn=read-only-admin,dc=example,dc=com -w password -b dc=example,dc=com
- ldapsearch -h ldap.forumsys.com -x -b dc=example,dc=com ou=*
[2017/02/17]
要確認密碼,可這麼做:
- ldapwhoami -h ldap.forumsys.com -D cn=read-only-admin,dc=example,dc=com -w password
星期四, 4月 24, 2014
Jenkins 又一難題:LDAP
其實當初也不懂這有什麼異常,不過先是區分出密碼打錯絕不是長這樣,再苦思、狂搜,最後靈感來自於此,狀況類似,多設一個群組的搜尋起點就解決了。
[2019/04/09]
沒想到改用 Single-Sign On 後的多年,還是有機會需要這篇,而且補上兩點:
- 當 Jenkins 安裝在很舊的 Windows 上,中文可能不是 UTF-8,當做任何欄位設定內容都可能出錯,要儘量避免,例如 Manager DN 就可改為電子郵件格式。
- 即使沒用到群組,不設群組的相關條件也可能造成問題,可以考慮至少要放個純英文的條件,找不到任何群組也無妨。
星期一, 3月 31, 2014
Ubuntu 12.04 OpenLDAP nodomain
http://superuser.com/questions/470825/openldap-slapd-conf-substitutions-ubuntu
