最近一個客戶的 Zimbra 是接 Univention Corporate Server(UCS)做帳號認證,使用者的密碼都在 UCS 上。問題來了:使用者在 Zimbra 網頁信箱按「變更密碼」,Zimbra 沒辦法改 UCS 的密碼;客戶希望按下去之後,直接帶到 UCS 的密碼變更頁。
看起來只要給一個網址就好,但直接連 UCS 的密碼變更頁,會出現沒有權限的錯誤。這篇整理怎麼組出一個「先登入、登入後自動跳到密碼變更頁」的網址,以及 Zimbra 端的設定。
環境
| 項目 | 內容 |
|---|---|
| 帳號認證 | UCS 5.0,主機 ucs.example.com |
| 郵件系統 | Zimbra,網域 example.com,以外部 LDAP 方式接 UCS 認證 |
| 需求 | Zimbra 網頁信箱的「變更密碼」導向 UCS 密碼變更頁 |
同樣的做法也適用於其他接 UCS 認證的系統,只要該系統能設定一個「變更密碼」的連結網址即可。
先決條件:安裝 Self Service
UCS 入口網站上的「變更密碼」功能,是由 App Center 裡的 Self Service 應用程式提供的。沒有安裝的話,使用者在入口網站上根本看不到這個工具,導向過去也只會看到空白或錯誤。
在 UCS 管理介面的「App Center」搜尋 Self Service 安裝,安裝完用一般使用者登入入口網站,確認看得到密碼變更的功能。
注意:Self Service 除了變更密碼,還有忘記密碼、自助註冊等功能,可以依需求在設定中只開放需要的項目。對外開放的話,也要一併檢查密碼原則與帳號鎖定設定。
直接連密碼變更頁會被拒絕
UCS 入口網站的密碼變更頁網址是:
https://ucs.example.com/univention/portal/#/selfservice/passwordchange
使用者如果還沒登入入口網站,直接打開這個網址會顯示沒有權限,必須先登入。對一般使用者來說,看到錯誤訊息就不知道下一步要做什麼了。
先登入、再導向的網址
UCS 的登入頁支援 location 參數,登入成功後會自動跳到指定的位置。把密碼變更頁的路徑放進去:
https://ucs.example.com/univention/login/?location=/univention/portal/#/selfservice/passwordchange
使用者點這個連結,會先看到 UCS 的登入畫面,輸入帳號密碼後就直接進到密碼變更頁。如果使用者已經登入過,會直接跳過登入畫面。
網址裡的 # 在瀏覽器裡有特殊意義,上面的寫法在我們的環境實測可以正常導向。如果你的環境導向後停在入口網站首頁,可以改成把 location 的值整段做 URL 編碼:
https://ucs.example.com/univention/login/?location=%2Funivention%2Fportal%2F%23%2Fselfservice%2Fpasswordchange
Zimbra 端的設定
Zimbra 接外部認證時,本身無法修改使用者的密碼,但可以用 zimbraChangePasswordURL 指定「變更密碼」要開啟的網址。這個屬性可以設在全域或網域:
su - zimbra
# 只套用在這個網域(建議)
zmprov md example.com zimbraChangePasswordURL \
'https://ucs.example.com/univention/login/?location=/univention/portal/#/selfservice/passwordchange'
# 確認
zmprov gd example.com zimbraChangePasswordURL
網址裡有 #、?,記得用單引號包起來,否則 Shell 會把 # 後面當成註解。
另外確認使用者的 COS 有開啟變更密碼功能(預設就是開啟的):
zmprov gc default zimbraFeatureChangePasswordEnabled
設定完成後,使用者在網頁信箱「偏好設定」裡按變更密碼,就會開啟 UCS 的登入頁,登入後直接到密碼變更頁。
其他要注意的地方
- 憑證:UCS 預設使用自簽憑證,使用者第一次連過去會看到憑證警告。對外使用的話,建議換成正式的憑證(UCS 有 Let's Encrypt 應用程式可以安裝)
- 網路可達性:使用者從外部用網頁信箱時,也要連得到 UCS 的入口網站,網址要用使用者實際能連到的主機名稱
- 密碼原則:變更密碼時套用的是 UCS 的密碼原則;有安裝 Samba(AD 相容網域控制站)的話,還會套用 Samba 的密碼原則,兩邊的規則要一致,否則使用者會一直遇到「密碼不符合規則」
- 告訴使用者會跳到另一個網站:畫面風格不同,使用者可能以為是釣魚網站。可以在入口網站加上公司的標誌,並事先公告
結論
需求本身很單純,關鍵就是 /univention/login/?location= 這個參數,讓使用者先登入再跳到密碼變更頁,加上 Zimbra 的 zimbraChangePasswordURL 指過去即可。前提是 UCS 要先裝好 Self Service,不然使用者登入後也看不到變更密碼的功能。
參考資料
- Univention Corporate Server Manual:User password management
https://docs.software-univention.de/manual/5.0/en/user-management/password-management.html - Univention App Catalog:Self Service
https://www.univention.com/products/univention-app-center/app-catalog/self-service/ - Zimbra 常用 CLI 指令整理
https://blog.jason.tools/2021/05/zimbra-cli.html



