28/2/63

AD Self reset password

เจอปัญหาในส่วนของ User ใน AD

โจทย์

คือ มี User ใน AD ซึ่ง User จะต้องใช้ในการ Login Wifi ซึ่งตอนที่ใช้งาน Admin ก็ Create username และ Password เสร็จแล้ว User ก็จะใช้งาน Wifi ได้ ด้วย Username และ Password ที่ Admin ตั้งไว้ให้

ปัญหาคือ Admin ก็จะรู้รหัสของ User แต่ในตอนที่สร้าง User นั้น Admin สามารถกำหนดได้ว่า ให้เปลี่ยนรหัสผ่านเมื่อล๊อกอินครั้งแรก แต่อันนี้มันจะใช้ได้กับการที่ User Login เข้าหน้าเครื่อง อาจจะ Login หน้าเครื่องจริงๆ หรือ Remote login ก็แล้วแต่ มันจะมีกล่องมาให้เปลี่ยนรหัสได้ แต่ในกรณีนี้ เราสร้าง User เพื่อใช้งาน Wifi เท่านั้น ดังนั้น User ไม่สามารถเปลี่ยนรหัสผ่านได้เอง เพราะไม่มี UI ให้เปลี่ยนรหัส

อันนี้เลยเป็นโจทย์ว่า ต้องการหาเครื่องมือที่จะช่วยให้ User เปลี่ยนรหัสผ่านเองได้ (เพื่อที่เจ้าตัวจะได้รู้คนเดียว) ปรึกษา Support ก็ให้วิธีแบบง่ายๆ เลย ว่า ตั้งเครื่องเปล่าๆ ไว้เครื่องนึง แล้ว Join Domain ไว้ เพื่อให้ User มาล๊อกอินหน้าเครื่องแล้วเปลี่ยนรหัสได้ ซึ่งมันไม่น่าจะใช่วิธีที่ดีนะ ดังนั้น เราก็เลยต้องมาหา Solution เอา

ค้นหา

ก็ เจอคนมีปัญหาแบบเดียวกันนี้เยอะมาก แล้วก็ Solution ที่เสนอกันมาก็มีเยอะมาก แต่ที่เยอะเลยก็คือเครื่องมือที่เสียตังค์ แต่มันไม่ใช่ เพราะเราต้องการของฟรี

ตัวที่ดูแล้วน่าสนใจเป็นตัวชื่อ Passcore (https://github.com/unosquare/passcore) อีกตัวที่น่าสนใจก็ PWM (https://github.com/pwm-project/pwm) แต่ไม่ได้ลอง เพราะลอง Passcore สำเร็จไปก่อนแล้ว

วิธีการ

ก็ ไปเซ็ตเครื่อง AD มาใหม่โดยเลือกใช้เป็น Windows 2016 เพราะดูจะตรงกับเครื่องที่ใช้อยู่ แล้วก็ เปิดใช้ AD กับสร้าง User แล้วก็เปิด IIS ไว้ (วิธีการหาตามกูเกิลเลย) ไม่แน่ใจว่าต้องใช้ IIS หรือเปล่า เพราะหลังจากติดตั้งเสร็จ ตัว Passcore มันให้บริการที่พอร์ทของมันเอง เลยเข้าใจว่ามันน่าจะมี Web server อยู่เองแล้ว

ติดตั้ง PassCore ผ่าน PowerShell (วิธีการดูในลิงก์ของ PassCore ด้านบนเลย) พอติดตั้งเสร็จตัวติดตั้งจะอยู่ที่ c:\passcore รันไฟล์ชื่อ Unosquare.PassCore.Web.exe เสร็จแล้วจะมีหน้า Terminal ขึ้นมาแสดงว่าโปรแกรมกำลังทำงาน โดยมันจะบอกด้วยว่าเข้าใช้งานได้ที่ไหน โดยที่ผมเจอมันให้เข้าที่ localhost:5000 ก็ลองเข้าไปใช้งานตามนั้น ก็ใช้งานได้ตามต้องการ

ปัญหาที่พบ เจอว่ามันเปลี่ยนรหัสไม่ได้ ซึ่งปัญหานี้มีบอกที่ Troubleshooting ของหน้าโปรเจคอยู่แล้ว คือ ให้ไป Set 'Minimum password age' เป็น 0 ที่ 'Default Domain Policy' (กว่าจะหาเจอ โคตรยุ่งยาก ก็ ไป Google เอานั่นแหล่ะ)

จบสรุปว่าได้ Solution เรียบร้อย แล้วก็ได้บทเรียนว่า Windows Server มันทำอะไรได้เยอะ แต่การใช้งานโคตรยุ่งยาก ใช้แล้วแบบว่าเมา UI สุดๆ