Windows Server 使用者線上修改密碼
說明文件

💡 本程式用途

這是一個以 Python + Flask 建立的網頁應用,讓 Windows Server 的使用者能在網頁上自行修改登入密碼。

使用者只要開啟伺服器提供的網址,輸入帳號與密碼,即可完成密碼變更。

🧩 程式運作流程

  1. 使用者在網頁上輸入:
    • 使用者名稱
    • 舊密碼
    • 新密碼
    • 再次確認新密碼
  2. 套件導入
    from flask import Flask, request, render_template_string, jsonify
    import subprocess, platform, logging, sys
  3. 建立 Flask 網站
    app = Flask(__name__)
  4. 匯入 Windows 模組 (pywin32)
    import win32security, win32api
    這兩個是專門給 Windows 用的模組,用來驗證帳號密碼是否正確。
    如果沒有安裝(例如不是 Windows 系統),就會跳出錯誤,並關閉驗證功能。
  5. 驗證舊密碼的函式
    def verify_windows_password(username, password):
    這個功能會試著用輸入的帳號密碼登入一次(不會真的登入,只驗證是否正確)。 如果密碼正確,回傳 True;錯誤則回傳 False。 錯誤情況像是:
    密碼錯誤(錯誤代碼 1326)
    使用者不存在(錯誤代碼 1317)
  6. Flask 主功能(密碼修改)
    @app.route('/', methods=['GET', 'POST'])
    def change_ftp_password():

    這是主要的網頁功能。當使用者開啟 / 網址時(也就是首頁),系統會顯示表單。 當使用者按下「修改密碼」後(POST 請求),系統會進行:
    1.檢查表單資料是否填完整
    2.禁止修改特定帳號(如 Administrator、admin、server)
    3.確認新密碼兩次輸入一致
    4.檢查密碼長度(至少 1 個字)
    5.驗證舊密碼是否正確(只在 Windows 上執行)
    6.執行指令修改密碼
    7.根據執行結果顯示成功或失敗訊息
  7. 錯誤處理範例如果修改密碼時發生錯誤,程式會判斷錯誤內容,然後給出清楚訊息,例如:
    1.使用者不存在 → 「使用者 'XXX' 不存在」
    2.密碼不符合系統規範 → 「新密碼不符合密碼政策要求」
    3.權限不足 → 「操作權限不足」
    4.其他 → 「不明錯誤」
  8. 啟動伺服器
    最後,程式用 Waitress(一個穩定的 Python 網站伺服器)啟動:
    waitress.serve(app, host='0.0.0.0', port=5000, threads=30)
    這會讓整個網站在 http://192.168.240.200:5000/ 運行。
    (在內網中,可以輸入 http://192.168.240.200:5000 開啟。)

🔧 主要技術

📜 系統限制與安全措施

🖥️ 操作步驟

  1. 在 Windows Server 上啟動程式(執行 python main.py)。
  2. 伺服器會啟動一個網站:
    http://伺服器IP:5000
  3. 使用者開啟該網址。
  4. 輸入帳號、舊密碼與新密碼,按下「修改密碼」。
  5. 系統驗證成功後,顯示「密碼修改成功!」。

🚨 常見錯誤與說明