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
change
to
之前我們已確認了 Docker CAS 可以運作,預設帳密是 casuser / Mellon 這組,姑且稱之為「靜態帳密表」。接著利用這篇所述(注意版本,行文時已升到 2.6.3),來試試 CAS 如何與後端 LDAP 合作。首先開好 LDAP 與之前的 CAS,並進去確認連往 LDAP 的網路通暢:
接著在 cas.properties 加入以下幾行:
重啟帶有新設定的 CAS 雖然順利,但仍僅能驗證 casuser / Mellon 而不能驗證 LDAP user01 / bitnami1 這組帳密。注意看,log 裡面有這段:
意思是 CAS 把輸入的 user01 / bitnami1 這組帳密交給「靜態帳密表」了。為防止混淆,可以關掉它。在 cas.properties 加入一行:
重啟之後情況不變?這時得把 log4j2.xml 抓出來改設定,看看發生了什麼問題?
在海一般的訊息之中,唯一有幫助的是這條:
這意思很難懂?沒錯,它其實要表達的是「現在這個 Docker CAS 並不支援 LDAP」。我們得學習這篇的做法,在這裡挑 6.6 或你想要的分支下載,在 build.gradle 檔案中找到 dependencies 段落,在其中新增一行:
這裡千萬要注意拼字是否正確?原文把 implementation 拼錯,複製貼上並不管用,也不會有錯誤訊息,我就這樣又去多走彎路了。然後在同目錄執行指令:
幾分鐘後,可以看到一個新的 cas.war 在 build/libs 目錄下,大小應該會比 Docker Image 裡面那個要大一些,我們要用這個新的:
這次要有耐心一點,原本一分鐘就能開好的 CAS 可能要拉長到三分多鐘,不是壞了。能驗證 LDAP 的帳密,算是值得吧?
We can create the /etc/cas/thekeystore immediately like this:
docker run -d --name cas -p 8443:8443 apereo/cas:6.6.4; docker exec -it cas keytool -genkeypair -alias cas -keyalg RSA -keypass changeit -storepass changeit -keystore /etc/cas/thekeystore -dname "CN=localhost"
過去筆者手下眾多 Linux 都是用本機帳號維運,每到稽核規定的密碼修改週期就是一次不小的工程。既然公司是以 AD 為主,不如來研究看看如何讓 Linux 也加入 AD Domain,並且授權為 Linux 上的管理者。
在 CentOS 7,要先安裝一些套件:
sudo yum install sssd realmd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation openldap-clients policycoreutils-python
然後是決定要加入的網域與帳號,我的帳號是 david_chou,要加入 dev.gss 這個網域。
sudo realm join --user=david_chou dev.gss
打完正確的密碼後,可以用 realm list 確認一下,像我的結果會是這樣:
上圖也可以在提示符號看出,hostname 是 QAC-ELASTALERT,這待會兒要用到。接下來我們要先修正幾個問題,細節在這,懶人請直接跟我來。sudo vi /etc/sssd/sssd.conf 編輯一個設定檔:
存檔後重啟服務 systemctl restart sssd 就會生效。換成網域帳號登入看看:
因為我們有設 default_domain_suffix 的關係,帳號只要 david_chou 而不用 david_chou@dev.gss 這麼長。最後記得再用舊的本機管理權限帳號登入,授權給網域帳號 sudo usermod -aG wheel david_chou@dev.gss,以後就可以只靠網域帳號做事了。
附帶一提,當網域密碼變更後,可能因快取的關係導致新密碼不能登入,可採取以下步驟: