บริการ Linux จำนวนมาก (apache, nginx เป็นต้น) สามารถใช้ keytab ไฟล์สำหรับการตรวจสอบสิทธิ์ Kerberos ใน Active Directory โดยไม่ต้องป้อนรหัสผ่าน ไฟล์ keytab จะเก็บชื่อของหลักการ Kerberos และคีย์ที่เข้ารหัสที่เกี่ยวข้องไว้ (ได้มาจากรหัสผ่าน Kerberos) ในบทความนี้เราจะแสดงวิธีสร้างไฟล์ keytab สำหรับ SPN ของบัญชี Active Directory ที่เชื่อมโยงโดยใช้ ktpass เครื่องมือ.
บ่อยที่สุด บัญชีผู้ใช้ Active Directory แยกต่างหากถูกสร้างขึ้นสำหรับบริการที่ต้องใช้ไฟล์ keytab อย่างไรก็ตาม คุณสามารถใช้วัตถุคอมพิวเตอร์เพื่อทำสิ่งนั้นได้ จากนั้นชื่อบริการจะผูกกับบัญชี (ServicePrincipalName — SPN ). SPN ถูกใช้โดยการตรวจสอบสิทธิ์ Kerberos เพื่อจับคู่อินสแตนซ์บริการกับบัญชี AD (นี่คือสาเหตุที่แอปอาจตรวจสอบสิทธิ์เป็นบริการแม้ว่าจะไม่รู้จักชื่อผู้ใช้)
ขั้นแรก สร้างบัญชีบริการใน AD และตั้งรหัสผ่านที่รู้จัก คุณสามารถสร้างบัญชีจากคอนโซล ADUC แบบกราฟิก (dsa.msc) หรือใช้ cmdlet ใหม่ของ ADUser ใน PowerShell (จากโมดูล PowerShell Active Directory):
New-ADUser -Name "web" -GivenName "nginx web app" -SamAccountName "web" -UserPrincipalName "[email protected]" -Path "OU=Services,OU=Munich,OU=DE,DC=test,DC=com" –AccountPassword (ConvertTo-SecureString “Sup6r!Pa$s” -AsPlainText -force) -Enabled $true
เปิดใช้งานตัวเลือก "ผู้ใช้ไม่สามารถเปลี่ยนรหัสผ่าน" และ "รหัสผ่านไม่มีวันหมดอายุ" สำหรับบัญชีบริการในคอนโซลกราฟิกหรือใน PowerShell:
Get-ADUser web|Set-ADUser -PasswordNeverExpires:$True -CannotChangePassword:$true
ในขั้นตอนถัดไปผูกชื่อบริการหลัก (SPN) กับบัญชีผู้ใช้ คุณไม่จำเป็นต้องทำขั้นตอนนี้แยกกัน เนื่องจาก ktpass จะทำโดยอัตโนมัติเมื่อสร้างไฟล์ keytab (ฉันจะทำเพื่อให้คุณเข้าใจกระบวนการดีขึ้น)
ผูกระเบียน SPN ต่อไปนี้กับ เว็บ บัญชี:
setspn -A HTTP/[email protected] web
แสดงรายการบันทึก SPN ที่เกี่ยวข้องกับผู้ใช้ AD:
setspn -L web
ในการสร้างไฟล์คีย์แท็บ จะใช้คำสั่งต่อไปนี้:
ktpass -princ HTTP/[email protected] -mapuser web -crypto ALL -ptype KRB5_NT_PRINCIPAL -pass Sup6r!Pa$s -target mundc01.test.com -out c:\share\web.keytab
Successfully mapped HTTP/www.test.com to web. Password successfully set! Key created. Output keytab to c:\share\webt.keytab: Keytab version: 0x502 keysize 53 HTTP/[email protected] ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x1 (DES-CBC-CRC) keylength 8 (0x73f868856e046449)
คำสั่งได้สร้างไฟล์ keytab (c:\share\webt.keytab) สำหรับบันทึก SPN ของบริการ HTTP/[email protected] บันทึก SPN เชื่อมโยงกับบัญชีเว็บด้วยรหัสผ่านที่ระบุ
ตรวจสอบให้แน่ใจว่าสร้างบันทึก SPN สำหรับบริการเรียบร้อยแล้ว (หากคุณไม่ได้สร้างด้วยตนเอง):
setspn -Q */[email protected]
คุณจะเห็นว่าพบระเบียน SPN แล้ว (พบ SPN ที่มีอยู่แล้ว! ). ถูกผูกไว้กับบัญชีเว็บ
Windows ไม่มีเครื่องมือในตัวเพื่อดูเนื้อหาของไฟล์ keytab แต่ถ้าติดตั้ง Java JRE บนคอมพิวเตอร์ของคุณ คุณสามารถใช้ klist.exe รวมอยู่ในแพ็คเกจการแจกจ่าย Java
cd "c:\Program Files\Java\jre1.8.0_181\bin"
klist.exe -K -e -t -k c:\PS\web_host.keytab
Key tab: c:\PS\web_host.keytab, 5 entries found.
มาดูเนื้อหาของไฟล์ keytab กัน มีการระบุ SPN คีย์ การประทับเวลา อัลกอริธึมการเข้ารหัส และเวอร์ชันคีย์ (KVNO — หมายเลขเวอร์ชันคีย์)
เมื่อสร้างไฟล์ keytab ktpass จะเพิ่ม msDS-KeyVersionNumber ค่าแอตทริบิวต์ของบัญชีผู้ใช้ (คุณสามารถดูได้ใน AD Attribute Editor) และใช้ค่าเป็น KVNO ในตารางคีย์แท็บ
หากคุณเปลี่ยนรหัสผ่านบัญชี ค่าแอตทริบิวต์จะเพิ่มขึ้นหนึ่งรายการ และรายการคีย์แท็บทั้งหมดที่มี KVNO ก่อนหน้าจะไม่ถูกต้อง (แม้ว่ารหัสผ่านใหม่จะตรงกับรหัสผ่านเก่าทั้งหมด) หากรหัสผ่านผู้ใช้ใน AD เปลี่ยนไป คุณจะต้องสร้างไฟล์ keytab อีกครั้ง
ไฟล์คีย์แท็บอาจเก็บคีย์ของ SPN ต่างๆ ไว้ เพิ่ม SPN และคีย์เพิ่มเติมลงในไฟล์คีย์แท็บโดยใช้ ktpass พารามิเตอร์ (-in
,-setupn
,-setpass
)
การใช้ไฟล์ keytab เพิ่มเติมที่คุณได้รับขึ้นอยู่กับบริการที่ใช้ ตัวอย่างเช่น ที่นี่ คุณสามารถเรียนรู้วิธีใช้ไฟล์ keytab สำหรับการตรวจสอบสิทธิ์ผู้ใช้ SSO แบบโปร่งใสใน Zabbix นอกจากนี้ อย่าลืมเกี่ยวกับการรักษาไฟล์ keytab ของคุณให้ปลอดภัย (ใครก็ตามที่สามารถอ่านเนื้อหาของไฟล์ keytab จะสามารถใช้คีย์ใดก็ได้จากไฟล์นั้น)