之前公司給使用者用AD帳號時都會訂下GPO規則,必須三個月更換一次AD帳密,但是如果使用者沒有在網域內用電腦的話,很有可能會錯過更改密碼的時間,所以以前的作法是提供一兩台公用的網域電腦,讓大家登入進去修改自己的密碼,可是後來又發現這種做法讓很多人非常難理解,簡單說就是還不夠直覺,於是github上面有一些神人就自己弄出了一套以web為UI介面的方式,使用者只要打開網頁,就會知道怎麼自己修密碼,是個很方便的工具。
系統的基本要求很簡單,隨便給4 Core CPU、4 RAM和20GB硬碟就很夠用了,系統選用CentOS 7。
1.先安裝基本需要的幾項套件
# yum install -y httpd curl git
# yum install python3-pip
(這套系統是用python寫的)
2.安装bottle
# pip3 install bottle
3.抓取網頁套件
# cd ldap-passwd-webui
# pip3 install -r requirements.txt
4.配置網頁設定檔
# vi settings.ini
5.Windows AD上開啟LDAPS憑證
這邊我卡了一陣子,因為一開始的LDAP連線port上面我設定是389,結果想當然根本改不了密碼,還會出現錯誤,原先知道要跟AD主機取得帳戶認證是要透過LDAP 389 port連線,但一般只是向AD取認證,現在要做的是反過來對AD上的帳密做修改,這其實是完全不同的行為,而且對AD來說有高度風險的,所以必須要再到AD主機上開啟LDAPS憑證,這個憑證所對應的port就是636,等到開啟後才能提供外部的系統回來修改使用者密碼。
raise LDAPOperationResult(result=result['result'], description=result['description'], dn=result['dn'], message=result['message'], response_type=result['type'])
ldap3.core.exceptions.LDAPUnwillingToPerformResult: LDAPUnwillingToPerformResult - 53 - unwillingToPerform - None - 00002077: SvcErr: DSID-03190E49, problem 5003 (WILL_NOT_PERFORM), data 0
(沒有啟用LDAPS 636服務而修改密碼的話,會得到上述訊息)
啟用Wondows Server的服務,選「憑證授權單位」 |
用內建的 ldp.exe 這支程式測試 636 port 連線 |
若得到此訊息就表示是正常的 |
不過因為還沒有啟用,所以會先看到這樣的訊息 |
開始做設定,選擇「開始/Windows 系統管理工具/憑證授權單位」 |
在憑證範本上面按滑鼠右鍵選擇「管理」, 即可啟動憑證範本主控台 |
選擇「動作/檢視物件識別碼」, 查看是否有識別碼 1.3.6.1.5.5.7.3.1 的物件 |
確認該物件有之後, 執行 Microsoft Management Console’ (MMC) , 在搜尋列打 mmc 即可找到這支程式 |
選擇「檔案/新增或移除嵌入式管理單元」, 然後選擇「憑證」, 接著按下「新增」 |
接著選擇「電腦帳戶」, 接著按「下一步/完成」 |
按下「確定」後, 選擇「憑證/個人/憑證」 |
在憑證上面按滑鼠右鍵, 選擇「所有工作/要求新憑證」 |
按「下一步」,然後「網域控制站」要打勾, 最後按下「註冊」 |
接下來用 ldp.exe 再來試試 |
得到測試結果是成功的,port636憑證可使用了 |
5.開啟防火牆和關閉SELinux
6.測試web修改AD密碼
# python3 app.py輸入帳號舊新密碼 |
可見密碼已經修改,這次安裝就表示成功 |
7.將服務寫入systemd
這麼做的用意是把這套程式寫成可以用systemd去啟用或關閉的服務,因為這支程式只能夠python動態式執行,如果按下Ctrl+C的話,就會讓它終止,如果卡著又不中止就不能夠繼續切回到termianl,所以必須將它變成一個系統服務。
# vim /etc/systemd/system/modipw.service
Description=Change Password
[Service]
Type=simple
ExecStart=/root/ldap-passwd-webui/app.py
Restart=always
[Install]
WantedBy=multi-user.target
# systemctl enable modipw
![]() |
這樣網頁就會變成系統服務 |