ในบทความนี้ เราจะพิจารณาการกำหนดค่าทีละขั้นตอนของการตรวจสอบสิทธิ์ SSO (การลงชื่อเพียงครั้งเดียว) แบบโปร่งใสสำหรับ Zabbix 4.0 (หรือใหม่กว่า) ใน Active Directory โดยใช้ Kerberos
ผลลัพธ์ที่ได้คือผู้ใช้จะได้รับการตรวจสอบสิทธิ์โดยอัตโนมัติบนหน้าแรกของ Zabbix โดยไม่ต้องป้อนข้อมูลรับรอง ในการทำเช่นนั้น ผู้ใช้จะต้องเข้าสู่ระบบ Windows ภายใต้บัญชีโดเมน Active Directory ที่ระบุใน Zabbix นอกจากนี้ ผู้ใช้ต้องกำหนดค่าเบราว์เซอร์ (ต้องเปิดใช้งานการสนับสนุน Kerberos และต้องตั้งค่าไซต์อินทราเน็ตที่เชื่อถือได้ใน IE)
ตู้โชว์:
- เซิร์ฟเวอร์ Ubuntu 18.04 LTS;
- โดเมน Active Directory ที่มีระดับการทำงาน 2008 (หรือสูงกว่า)
- Zabbix Server 4.0.11, Apache2 เป็นเว็บเซิร์ฟเวอร์ (คำแนะนำในการติดตั้ง Zabbix)
การตรวจสอบสิทธิ์ Zabbix LDAP บน Active Directory
ก่อนอื่น คุณต้องผูกผู้ใช้โดเมนกับ Zabbix ในการสร้างผู้ใช้ใน Zabbix ด้วยการเข้าสู่ระบบเดียวกันกับที่มีในโดเมน AD นั้นเพียงพอแล้ว ตัวอย่างเช่น หากการเข้าสู่ระบบของคุณ (แอตทริบิวต์ sAMAccountName) คือ user_5 ผู้ใช้ใน Zabbix จะต้องมีข้อมูลเข้าสู่ระบบเดียวกัน
ทำสำหรับผู้ใช้แต่ละคนที่จะใช้ Zabbix
จากนั้นสร้างบัญชีผู้ใช้แยกต่างหากใน Active Directory เพื่อผูก Zabbix กับโดเมนของคุณ ในทางปฏิบัติ คุณสามารถใช้บัญชีโดเมนใดก็ได้ แต่ควรสร้างบัญชีบริการแยกต่างหากจะดีกว่า ในกรณีของฉัน มันจะเป็น zabbix_admin . ในการสร้างผู้ใช้ใน AD ฉันจะใช้ PowerShell cmdlet New-ADUser:
ใหม่-ADUser -ชื่อ "zabbix_admin" -GivenName "zabbix_admin" -นามสกุล "zabbix_admin" -SamAccountName "zabbix_admin" -AccountPassword (Read-Host -AsSecureString "Password:") -DisplayName "zabbix_admin" -Enabled $tru รหัส>
เรียกใช้คำสั่งที่แสดงด้านบนในคอนโซล PowerShell และตั้งรหัสผ่านผู้ใช้ ผู้ใช้ใหม่ของคุณจะอยู่ภายใต้คอนเทนเนอร์ผู้ใช้ในรูทของโดเมนของคุณ
มากำหนดค่าการพิสูจน์ตัวตน LDAP ใน Zabbix กันเถอะ ในส่วนหน้าของ Zabbix ให้ไปที่แท็บการตั้งค่า LDAP ใน การดูแลระบบ -> การตรวจสอบสิทธิ์ . ทำเครื่องหมายที่ เปิดใช้การตรวจสอบสิทธิ์ LDAP และกรอกข้อมูลในฟิลด์ต่อไปนี้:
- โฮสต์ LDAP:
ldap://dc1.domain.local
- พอร์ต:
389
- ฐาน DN:
DC=domain, DC=local
- แอตทริบิวต์การค้นหา:
sAMAccountName
- ผูก DN:
CN=zabbix_admin,OU=Users,DC=domain,DC=local
คุณสามารถอ่านคำอธิบายของพารามิเตอร์ใดก็ได้ในการตรวจสอบสิทธิ์ LDAP ส่วนของเอกสารประกอบ Zabbix:https://www.zabbix.com/documentation/current/manual/web_interface/frontend_sections/administration/authentication
ก่อนกำหนดค่าให้เสร็จสิ้น ตรวจสอบให้แน่ใจว่าการตั้งค่าของคุณถูกต้องโดยทำการทดสอบการเข้าสู่ระบบ (ทดสอบ ปุ่ม). ระบุชื่อผู้ใช้ (เราสร้างบัญชีก่อนหน้านี้) และรหัสผ่าน AD
หากการทดสอบสำเร็จ ให้บันทึกการตั้งค่าของคุณและเปลี่ยนประเภทการตรวจสอบสิทธิ์ใน Zabbix จากภายในเป็น LDAP .
เปิดใช้งานการตรวจสอบสิทธิ์ HTTP (การตั้งค่า HTTP -> เปิดใช้งานการตรวจสอบสิทธิ์ HTTP )
กำหนดค่าการตรวจสอบสิทธิ์ LDAP แล้ว
เคล็ดลับ . หากเซิร์ฟเวอร์ LDAP ของคุณไม่พร้อมใช้งาน คุณจะไม่สามารถเข้าถึง Zabbix ได้ หากต้องการกลับไปใช้การตรวจสอบสิทธิ์ภายใน ให้เปิด MySQL และเรียกใช้คำสั่งต่อไปนี้:
อัปเดต zabbix.config ตั้งค่าการตรวจสอบสิทธิ์_type='0' โดยที่ configid='1';
กำหนดค่าการตรวจสอบสิทธิ์แบบโปร่งใส (ลงชื่อเพียงครั้งเดียว) ใน Zabbix (Apache2, krb5-user)
ก่อนอื่น ระบุชื่อ FQDN ของเซิร์ฟเวอร์ของคุณใน /etc/hostname ที่ต้องตรงกับระเบียน DNS ในโดเมนของคุณ ในกรณีของฉัน มันคือ zabbix.domain.local .
และเขียน FQDN ของเซิร์ฟเวอร์ของคุณสำหรับที่อยู่ IP ในเครื่องและที่อยู่ IP ของเซิร์ฟเวอร์ของคุณใน /etc/hosts
127.0.0.1 localhost zabbix.domain.local10.1.1.10 zabbix.domain.local
เพื่อให้การตรวจสอบสิทธิ์ Kerberos ทำงานอย่างถูกต้อง ให้ซิงโครไนซ์เวลากับตัวควบคุมโดเมนของคุณ ติดตั้ง ntpdate แพ็คเกจและผูกเข้ากับตัวควบคุมโดเมน
apt-get install ntp ntpdate
ntpdate dc.domain.local
ตอนนี้ คุณต้องสร้างไฟล์ keytab บนตัวควบคุมโดเมน แป้นพิมพ์ เป็นไฟล์ที่มี SPN และคีย์ที่เข้ารหัส Keytab ใช้สำหรับการตรวจสอบสิทธิ์แบบ Kerberos
- เข้าสู่ระบบบนตัวควบคุมโดเมนของคุณและเรียกใช้พรอมต์คำสั่งในฐานะผู้ดูแลระบบ ไปที่ C:\.
- ป้อนข้อมูลต่อไปนี้:
ktpass -princ HTTP/[email protected] -mapuser zabbix_admin -pass STRONGPASS -crypto ALL -ptype KRB5_NT_PRINCIPAL -out zabbix.keytab -setupn –setpass
- คัดลอกไฟล์ C:\zabbix.keytab ไปยังไดเร็กทอรี /etc/apache2/ บนเซิร์ฟเวอร์ Zabbix ของคุณ
ติดตั้งแพ็คเกจ Kerberos และโมดูลสำหรับ apache2:
#apt ติดตั้ง krb5-user libapache2-mod-auth-kerb
กำหนดค่าผู้ใช้ krb5 แก้ไข /etc/krb5.cnf :
[logging]default =FILE:/var/log/krb5libs.logkdc =FILE:/var/log/krb5kdc.logadmin_server =FILE:/var/log/kadmind.log[libdefaults]default_realm =DOMAIN.LOCALdefault_keytab_name =/ etc/apache2/zabbix.keytabdns_lookup_kdc =falsedns_lookup_realm =falseforwardable =trueticket_lifetime =24h[realms]DOMAIN.LOCAL ={kdc =dc.domain.localdefault_domain =DOMAIN.LOCALadmin_server =dc.domain.local.domain.local} [domain_realm] .LOCALdomain.local =DOMAIN.LOCAL
ระบุโดเมนของคุณ ในบางสถานที่ ชื่อโดเมนจะถูกเขียนด้วยตัวพิมพ์ใหญ่ ให้ปฏิบัติตามกฎนี้
หมายเหตุ . ดูบรรทัดที่มีเส้นทางไฟล์ keytab “default_keytab_name =/etc/apache2/zabbix.keytab” และตรวจสอบให้แน่ใจว่าไฟล์นั้นพร้อมใช้งาน ให้สิทธิ์การอ่านบน www-data และเรียกใช้:chown www-data:www-data /etc/apache2/zabbix.keytab
ตรวจสอบให้แน่ใจว่าการตรวจสอบสิทธิ์ Kerberos ทำงานใน Linux:
kinit -kV -p HTTP/zabbix.domain.local –t /etc/apache2/zabbix.keytab
คุณอาจเห็นข้อผิดพลาดนี้:
kinit:ไม่พบไคลเอ็นต์ 'HTTP/[email protected]' ในฐานข้อมูล Kerberos ขณะรับข้อมูลประจำตัวเริ่มต้น
ในกรณีนี้ ให้ลองตรวจสอบสิทธิ์โดยใช้ข้อมูลประจำตัวของผู้ใช้รายอื่น:
kinit -pV เข้าสู่ระบบ
หากการพิสูจน์ตัวตนสำเร็จ ปัญหาอยู่ที่ไฟล์ keytab ของคุณ ตรวจสอบให้แน่ใจว่าคุณได้สร้างมันอย่างถูกต้อง ตรวจสอบว่าคุณป้อนคำสั่งที่ถูกต้องเพื่อสร้างไฟล์คีย์แท็บหรือไม่
ตรวจสอบให้แน่ใจว่าบันทึก SPN สำหรับบัญชีบริการ Zabbix ของคุณมีอยู่ใน AD ป้อนคำสั่งต่อไปนี้บนตัวควบคุมโดเมน:
setspn -l zabbix_admin
คุณจะเห็นข้อความเช่นนี้ ต้องอยู่ในรูปแบบ HTTP/zabbix.domain.local หากไม่มีบันทึกให้เพิ่ม
setspn -a HTTP/zabbix.domain.local zabbix_admin
ตรวจสอบให้แน่ใจว่าชื่อผู้ใช้ล็อกอินของผู้ใช้เปลี่ยนเป็น HTTP/zabbix.domain.local
หากไม่เป็นเช่นนั้น ให้เปลี่ยนด้วยตนเอง
จากนั้นแก้ไขไฟล์การกำหนดค่า apache2 — /etc/apache2/sites-available/000-default.conf.
เพิ่มสิ่งต่อไปนี้ภายใต้ชื่อเซิร์ฟเวอร์ zabbix.domain.local บรรทัด:
AuthType KerberosAuthName "Kerberos รับรองความถูกต้อง"KrbAuthRealms DOMAIN.LOCAL#KrbServiceName HTTP/zabbix.domain.localKrbServiceName AnyKrb5Keytab /etc/apache2/zabbix.keytabKrbMethodNegotiate OnKrpre-SaveCredentials ที่ตรวจสอบแล้วบน หาก KrbServiceName ไม่ตรงกับชื่อที่ระบุในไฟล์ keytab จะเกิดข้อผิดพลาดขึ้น เพื่อให้คุณสามารถตั้งค่า ใดๆ ค่าในขณะทดสอบ หลังจากตรวจสอบให้แน่ใจว่าระบบทำงาน ให้ระบุชื่อบริการที่ถูกต้อง คุณสามารถตรวจสอบได้โดยใช้:
klist -le /etc/apache2/zabbix.keytab
จะกำหนดค่าเบราว์เซอร์สำหรับการตรวจสอบสิทธิ์ Kerberos ได้อย่างไร
เพื่อให้ Internet Explorer ใช้การตรวจสอบสิทธิ์ Kerberos บน Zabbix คุณจะต้องเพิ่ม URL ของมันใน Local Intranet เว็บไซต์ Google Chrome ใช้การตั้งค่า Internet Explorer คุณจึงไม่ต้องกำหนดค่าแยกต่างหาก
หมายเหตุ . URL ของไซต์ Zabbix ของคุณต้องไม่อยู่ในรายชื่อไซต์ที่เชื่อถือได้ มิฉะนั้น Kerberos จะไม่ทำงาน ต้องระบุไซต์ในไซต์อินทราเน็ตเท่านั้นเปิดตัวเลือก -> ความปลอดภัยใน IE
คลิก ไซต์ ในอินทราเน็ตเฉพาะที่ ให้เลือกตัวเลือกที่แสดงในภาพหน้าจอด้านล่างแล้วคลิกขั้นสูง
ป้อน URL เซิร์ฟเวอร์ Zabbix ของคุณ
ไปที่ ขั้นสูง และเลือก เปิดใช้งานการตรวจสอบความถูกต้องของ Windows แบบรวม .
นอกจากนี้ คุณยังสามารถใส่ Zabbix URL ไปยังโซน Local Intranet โดยใช้นโยบายกลุ่ม (การกำหนดค่าคอมพิวเตอร์ -> เทมเพลตการดูแลระบบ -> ส่วนประกอบ Windows -> Internet Explorer -> แผงควบคุมอินเทอร์เน็ต -> หน้าความปลอดภัย -> การกำหนดไซต์ไปยังโซน รายการ . ใช้รหัสโซน 1 สำหรับไซต์อินทราเน็ต)
เพิ่ม URL ของเซิร์ฟเวอร์ Zabbix ของคุณไปยังพารามิเตอร์ต่อไปนี้ของ
about:config
สำหรับ Mozilla Firefox ของคุณ:network.automatic-ntlm-auth.trusted-urisnetwork.negotiate-auth.delegation-urisnetwork.negotiate-auth.trusted-urisหากคุณพบปัญหาใดๆ โปรดดูบทความโดยละเอียดเกี่ยวกับการกำหนดค่า Kerberos ในเบราว์เซอร์
หลังจากนั้นการกำหนดค่าสิ้นสุดลง หากคุณพยายามเข้าถึง URL ของเซิร์ฟเวอร์ Zabbix คุณจะได้รับการตรวจสอบสิทธิ์โดยอัตโนมัติและจะไม่ได้รับแจ้งให้ป้อนรหัสผ่านของคุณ
การดีบักการตรวจสอบสิทธิ์ Kerberos &การแก้ไขปัญหาใน Apache
หากคุณมีปัญหาใดๆ ให้เปิดใช้งานโหมดแก้ไขข้อบกพร่องใน apache2:
ป้อนข้อมูลต่อไปนี้ก่อนปิดแท็ก ใน /etc/apache2/sites-available/000-defaults.conf:
LogLevel trace8
รีสตาร์ท apache และตรวจสอบข้อผิดพลาดของโมดูล Kerberos ในไฟล์ error.log
เพื่อให้สะดวกยิ่งขึ้น ใช้คำสั่งนี้เพื่อกรองรายการตามที่อยู่ IP:
tail -f /var/log/apache2/error.log | grep 'ที่อยู่ IP ของคุณ'
ในการทำงานและวินิจฉัย Kerberos คุณสามารถใช้ kinit และ klist คำสั่ง
kinit เป็นเครื่องมือในการรับและแคชตั๋ว Kerberos เช่น:
kinit –V -k -t /etc/apache2/zabbix.keytab –p HTTP/[email protected]
หากคุณสร้างไฟล์ keytab อย่างถูกต้อง คำสั่งจะทำงาน และคุณจะได้รับข้อความแจ้งว่าการตรวจสอบสิทธิ์สำเร็จแล้ว
ใช้ klist คุณสามารถดูตั๋ว Kerberos ที่แคชไว้ได้:
klist -a