Computer >> คอมพิวเตอร์ >  >> ระบบ >> Linux

Zabbix:การรับรองความถูกต้องด้วยการลงชื่อเพียงครั้งเดียว (SSO) ใน Active Directory

ในบทความนี้ เราจะพิจารณาการกำหนดค่าทีละขั้นตอนของการตรวจสอบสิทธิ์ 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)
หมายเหตุ . ในการใช้งาน SSO, Apache2 ด้วย libapache2-mod-auth-kerb โมดูลจะใช้ในบทความนี้ Nginx จะไม่ถูกกล่าวถึงที่นี่ แต่มี spnego-http-auth-nginx-module ที่ต้องเปิดใช้งานแยกต่างหากเมื่อรวบรวม Nginx

การตรวจสอบสิทธิ์ Zabbix LDAP บน Active Directory

ก่อนอื่น คุณต้องผูกผู้ใช้โดเมนกับ Zabbix ในการสร้างผู้ใช้ใน Zabbix ด้วยการเข้าสู่ระบบเดียวกันกับที่มีในโดเมน AD นั้นเพียงพอแล้ว ตัวอย่างเช่น หากการเข้าสู่ระบบของคุณ (แอตทริบิวต์ sAMAccountName) คือ user_5 ผู้ใช้ใน Zabbix จะต้องมีข้อมูลเข้าสู่ระบบเดียวกัน

Zabbix:การรับรองความถูกต้องด้วยการลงชื่อเพียงครั้งเดียว (SSO) ใน Active Directory

ทำสำหรับผู้ใช้แต่ละคนที่จะใช้ 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

Zabbix:การรับรองความถูกต้องด้วยการลงชื่อเพียงครั้งเดียว (SSO) ใน Active Directory

ก่อนกำหนดค่าให้เสร็จสิ้น ตรวจสอบให้แน่ใจว่าการตั้งค่าของคุณถูกต้องโดยทำการทดสอบการเข้าสู่ระบบ (ทดสอบ ปุ่ม). ระบุชื่อผู้ใช้ (เราสร้างบัญชีก่อนหน้านี้) และรหัสผ่าน AD
Zabbix:การรับรองความถูกต้องด้วยการลงชื่อเพียงครั้งเดียว (SSO) ใน Active Directory

หากการทดสอบสำเร็จ ให้บันทึกการตั้งค่าของคุณและเปลี่ยนประเภทการตรวจสอบสิทธิ์ใน Zabbix จากภายในเป็น LDAP .

Zabbix:การรับรองความถูกต้องด้วยการลงชื่อเพียงครั้งเดียว (SSO) ใน Active Directory

เปิดใช้งานการตรวจสอบสิทธิ์ HTTP (การตั้งค่า HTTP -> เปิดใช้งานการตรวจสอบสิทธิ์ HTTP )

Zabbix:การรับรองความถูกต้องด้วยการลงชื่อเพียงครั้งเดียว (SSO) ใน Active Directory

กำหนดค่าการตรวจสอบสิทธิ์ 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

Chrony ใช้เพื่อซิงโครไนซ์เวลาใน CentOS 8 ntp และ ntpdate ไม่มีแพ็คเกจในที่เก็บอย่างเป็นทางการ

ตอนนี้ คุณต้องสร้างไฟล์ 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

Zabbix:การรับรองความถูกต้องด้วยการลงชื่อเพียงครั้งเดียว (SSO) ใน Active Directory

คุณอาจเห็นข้อผิดพลาดนี้:

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

Zabbix:การรับรองความถูกต้องด้วยการลงชื่อเพียงครั้งเดียว (SSO) ใน Active Directory

ตรวจสอบให้แน่ใจว่าชื่อผู้ใช้ล็อกอินของผู้ใช้เปลี่ยนเป็น HTTP/zabbix.domain.local

Zabbix:การรับรองความถูกต้องด้วยการลงชื่อเพียงครั้งเดียว (SSO) ใน Active Directory

หากไม่เป็นเช่นนั้น ให้เปลี่ยนด้วยตนเอง

จากนั้นแก้ไขไฟล์การกำหนดค่า 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

Zabbix:การรับรองความถูกต้องด้วยการลงชื่อเพียงครั้งเดียว (SSO) ใน Active Directory

คลิก ไซต์ ในอินทราเน็ตเฉพาะที่ ให้เลือกตัวเลือกที่แสดงในภาพหน้าจอด้านล่างแล้วคลิกขั้นสูง

Zabbix:การรับรองความถูกต้องด้วยการลงชื่อเพียงครั้งเดียว (SSO) ใน Active Directory

ป้อน URL เซิร์ฟเวอร์ Zabbix ของคุณ

Zabbix:การรับรองความถูกต้องด้วยการลงชื่อเพียงครั้งเดียว (SSO) ใน Active Directory

ไปที่ ขั้นสูง และเลือก เปิดใช้งานการตรวจสอบความถูกต้องของ Windows แบบรวม .

Zabbix:การรับรองความถูกต้องด้วยการลงชื่อเพียงครั้งเดียว (SSO) ใน Active Directory

นอกจากนี้ คุณยังสามารถใส่ Zabbix URL ไปยังโซน Local Intranet โดยใช้นโยบายกลุ่ม (การกำหนดค่าคอมพิวเตอร์ -> เทมเพลตการดูแลระบบ -> ส่วนประกอบ Windows -> Internet Explorer -> แผงควบคุมอินเทอร์เน็ต -> หน้าความปลอดภัย -> การกำหนดไซต์ไปยังโซน รายการ . ใช้รหัสโซน 1 สำหรับไซต์อินทราเน็ต)

Zabbix:การรับรองความถูกต้องด้วยการลงชื่อเพียงครั้งเดียว (SSO) ใน Active Directory

เพิ่ม URL ของเซิร์ฟเวอร์ Zabbix ของคุณไปยังพารามิเตอร์ต่อไปนี้ของ about:config สำหรับ Mozilla Firefox ของคุณ:

network.automatic-ntlm-auth.trusted-urisnetwork.negotiate-auth.delegation-urisnetwork.negotiate-auth.trusted-uris

Zabbix:การรับรองความถูกต้องด้วยการลงชื่อเพียงครั้งเดียว (SSO) ใน Active Directory

หากคุณพบปัญหาใดๆ โปรดดูบทความโดยละเอียดเกี่ยวกับการกำหนดค่า Kerberos ในเบราว์เซอร์

หลังจากนั้นการกำหนดค่าสิ้นสุดลง หากคุณพยายามเข้าถึง URL ของเซิร์ฟเวอร์ Zabbix คุณจะได้รับการตรวจสอบสิทธิ์โดยอัตโนมัติและจะไม่ได้รับแจ้งให้ป้อนรหัสผ่านของคุณ

การดีบักการตรวจสอบสิทธิ์ Kerberos &การแก้ไขปัญหาใน Apache

หากคุณมีปัญหาใดๆ ให้เปิดใช้งานโหมดแก้ไขข้อบกพร่องใน apache2:

ป้อนข้อมูลต่อไปนี้ก่อนปิดแท็ก ใน /etc/apache2/sites-available/000-defaults.conf:

LogLevel trace8

Zabbix:การรับรองความถูกต้องด้วยการลงชื่อเพียงครั้งเดียว (SSO) ใน Active Directory

รีสตาร์ท 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