Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

Zabbix: การตั้งค่า Single Sign-On (SSO) การยืนยันตัวตนใน Active Directory

ในบทความนี้เราจะพิจารณาการกำหนดค่าทีละขั้นตอนของการยืนยันตัวตน SSO (Single Sign-On) แบบโปร่งใสสำหรับ Zabbix 4.0 (หรือใหม่กว่า) ใน Active Directory โดยใช้ Kerberos

ผลลัพธ์สุดท้ายคือผู้ใช้จะได้รับการยืนยันตัวตนบนหน้าหลัก Zabbix โดยอัตโนมัติโดยไม่ต้องป้อนข้อมูลประจำตัว เพื่อทำเช่นนี้ ผู้ใช้ต้องเข้าสู่ระบบ Windows ภายใต้บัญชีโดเมน Active Directory ที่ระบุใน Zabbix นอกจากนี้ ผู้ใช้ต้องกำหนดค่าเบราว์เซอร์ (ต้องเปิดใช้งานการรองรับ Kerberos และตั้งค่าเว็บไซต์ intranet ที่เชื่อถือได้ใน IE)

ตัวอย่างสภาพแวดล้อม:

  • Ubuntu Server 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: การตั้งค่า Single Sign-On (SSO) การยืนยันตัวตนใน Active Directory

ทำเช่นนี้สำหรับผู้ใช้แต่ละคนที่จะใช้ Zabbix

จากนั้นสร้างบัญชีผู้ใช้แยกต่างหากใน Active Directory เพื่อผูก Zabbix กับโดเมนของคุณ ในทางปฏิบัติ คุณสามารถใช้บัญชีโดเมนใดๆ ได้ แต่ดีกว่าที่จะสร้างบัญชีบริการแยกต่างหาก ในกรณีของผม จะเป็น zabbix_admin ในการสร้างผู้ใช้ใน AD ผมจะใช้ cmdlet PowerShell New-ADUser:

New-ADUser -Name "zabbix_admin" -GivenName "zabbix_admin" -Surname "zabbix_admin" -SamAccountName "zabbix_admin" -AccountPassword (Read-Host -AsSecureString "Password:") -DisplayName "zabbix_admin" -Enabled $true

รันคำสั่งที่แสดงด้านบนในคอนโซล PowerShell และตั้งรหัสผ่านผู้ใช้ ผู้ใช้ใหม่จะอยู่ภายใต้คอนเทนเนอร์ Users ในรูทของโดเมนของคุณ

มาตั้งค่าการยืนยันตัวตน LDAP ใน Zabbix ในหน้าตัว Zabbix ไปที่แท็บการตั้งค่า LDAP ใน Administration -> Authentication ติ๊ก Enable LDAP authentication และกรอกฟิลด์ต่อไปนี้:

  • LDAP host: ldap://dc1.domain.local
  • Port: 389
  • Base DN: DC=domain, DC=local
  • Search attribute: sAMAccountName
  • Bind DN: CN=zabbix_admin,OU=Users,DC=domain,DC=local

คุณสามารถอ่านคำอธิบายของพารามิเตอร์ใดๆ ในส่วน LDAP authentication ของเอกสาร Zabbix: https://www.zabbix.com/documentation/current/manual/web_interface/frontend_sections/administration/authentication.

Zabbix: การตั้งค่า Single Sign-On (SSO) การยืนยันตัวตนใน Active Directory

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

หากการทดสอบสำเร็จ ให้บันทึกการตั้งค่าและเปลี่ยนประเภทการยืนยันตัวตนใน Zabbix จาก Internal เป็น LDAP

Zabbix: การตั้งค่า Single Sign-On (SSO) การยืนยันตัวตนใน Active Directory

เปิดใช้งานการยืนยันตัวตน HTTP (HTTP Settings -> Enable HTTP authentication)

Zabbix: การตั้งค่า Single Sign-On (SSO) การยืนยันตัวตนใน Active Directory

การยืนยันตัวตน LDAP กำหนดค่าเสร็จแล้ว

เคล็ดลับ หากเซิร์ฟเวอร์ LDAP ของคุณไม่พร้อมใช้งาน คุณจะไม่สามารถเข้าถึง Zabbix ได้ ในการกลับสู่การยืนยันตัวตนภายใน ให้เปิด MySQL และรันคำสั่งต่อไปนี้:

update zabbix.config set authentication_type='0' where configid='1';

ตั้งค่าการยืนยันตัวตนแบบโปร่งใส (Single Sign On) ใน Zabbix (Apache2, krb5-user)

ก่อนอื่น ให้ระบุชื่อ FQDN ของเซิร์ฟเวอร์ใน /etc/hostname ที่ต้องตรงกับระเบียน DNS ในโดเมนของคุณ ในกรณีของผม คือ zabbix.domain.local

นอกจากนี้ ให้เขียน FQDN ของเซิร์ฟเวอร์สำหรับที่อยู่ IP ท้องถิ่นและที่อยู่ IP ของเซิร์ฟเวอร์ใน /etc/hosts

127.0.0.1 localhost zabbix.domain.local 10.1.1.10 zabbix.domain.local

เพื่อให้การยืนยันตัวตน Kerberos ทำงานถูกต้อง ให้ซิงโครไนซ์เวลากับโดเมนคอนโทรลเลอร์ ติดตั้งแพ็กเกจ ntpdate และผูกกับโดเมนคอนโทรลเลอร์

apt-get install ntp ntpdate
ntpdate dc.domain.local

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

ตอนนี้คุณต้องสร้างไฟล์ keytab บนโดเมนคอนโทรลเลอร์ Keytab คือไฟล์ที่มี SPN และคีย์ที่เข้ารหัส Keytab ใช้สำหรับการยืนยันตัวตนแบบ Kerberos

  • เข้าสู่ระบบบนโดเมนคอนโทรลเลอร์และรันคอมมานด์โพร้อมท์ในฐานะผู้ดูแลระบบ ไปที่ C:\
  • ป้อนคำสั่งต่อไปนี้:
    ktpass -princ HTTP/zabbix.domain.local@DOMAIN.LOCAL -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 install krb5-user libapache2-mod-auth-kerb

กำหนดค่า krb5-user แก้ไข /etc/krb5.cnf:

[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = DOMAIN.LOCAL default_keytab_name = /etc/apache2/zabbix.keytab dns_lookup_kdc = false dns_lookup_realm = false forwardable = true ticket_lifetime = 24h [realms] DOMAIN.LOCAL = { kdc = dc.domain.local default_domain = DOMAIN.LOCAL admin_server = dc.domain.local } [domain_realm] .domain.local = DOMAIN.LOCAL domain.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: การตั้งค่า Single Sign-On (SSO) การยืนยันตัวตนใน Active Directory

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

kinit: Client 'HTTP/zabbix.domain.local@DOMAIN.LOCAL’ not found in Kerberos database while getting initial credentials

ในกรณีนี้ ลองยืนยันตัวตนโดยใช้ข้อมูลประจำตัวของผู้ใช้อื่น:

kinit -pV LOGIN

หากการยืนยันตัวตนสำเร็จ ปัญหาอยู่ที่ไฟล์ keytab ของคุณ ตรวจสอบว่าคุณสร้างมันถูกต้อง ตรวจสอบว่าคุณป้อนคำสั่งสร้าง keytab ถูกต้อง

ตรวจสอบว่ามีระเบียน SPN สำหรับบัญชีบริการ Zabbix อยู่ใน AD หรือไม่ ใส่คำสั่งต่อไปนี้บนโดเมนคอนโทรลเลอร์:

setspn -l zabbix_admin

คุณจะเห็นข้อความแบบนี้ ต้องอยู่ในรูปแบบ HTTP/zabbix.domain.local หากไม่มีระเบียน ให้เพิ่ม

setspn -a HTTP/zabbix.domain.local zabbix_admin

Zabbix: การตั้งค่า Single Sign-On (SSO) การยืนยันตัวตนใน Active Directory

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

Zabbix: การตั้งค่า Single Sign-On (SSO) การยืนยันตัวตนใน Active Directory

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

จากนั้นแก้ไขไฟล์กำหนดค่า apache2 — /etc/apache2/sites-available/000-default.conf

เพิ่มส่วนต่อไปนี้ภายใต้บรรทัด ServerName zabbix.domain.local:

<Location /> AuthType Kerberos AuthName "Kerberos authenticated" KrbAuthRealms DOMAIN.LOCAL #KrbServiceName HTTP/zabbix.domain.local KrbServiceName Any Krb5Keytab /etc/apache2/zabbix.keytab KrbMethodNegotiate On KrbSaveCredentials on KrbLocalUserMapping on Require valid-user </Location>

หาก KrbServiceName ไม่ตรงกับชื่อที่ระบุในไฟล์ keytab จะเกิดข้อผิดพลาด ดังนั้นคุณสามารถตั้งค่าเป็น Any ระหว่างการทดสอบ หลังจากแน่ใจว่าระบบทำงาน ให้ระบุชื่อบริการที่ถูกต้อง คุณสามารถตรวจสอบได้โดยใช้:
klist -le /etc/apache2/zabbix.keytab

วิธีกำหนดค่าเบราว์เซอร์สำหรับการยืนยันตัวตน Kerberos

เพื่อให้ Internet Explorer ใช้การยืนยันตัวตน Kerberos บน Zabbix คุณจะต้องเพิ่ม URL ของมันเข้าไปในไซต์ Local Intranet Google Chrome ใช้การตั้งค่า Internet Explorer ดังนั้นคุณไม่ต้องกำหนดค่าแยกต่างหาก

หมายเหตุ URL ของไซต์ Zabbix ของคุณต้องไม่ได้อยู่ในรายการ Trusted sites มิฉะนั้น Kerberos จะไม่ทำงาน ไซต์ต้องระบุเฉพาะในไซต์ Intranet

เปิด Options -> Security ใน IE

Zabbix: การตั้งค่า Single Sign-On (SSO) การยืนยันตัวตนใน Active Directory

คลิก Sites ใน Local intranet ติ๊กตัวเลือกที่แสดงในภาพหน้าจอด้านล่างและคลิก Advanced

Zabbix: การตั้งค่า Single Sign-On (SSO) การยืนยันตัวตนใน Active Directory

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

Zabbix: การตั้งค่า Single Sign-On (SSO) การยืนยันตัวตนใน Active Directory

ไปที่แท็บ Advanced และติ๊ก Enable Integrated Windows Authentication

Zabbix: การตั้งค่า Single Sign-On (SSO) การยืนยันตัวตนใน Active Directory

นอกจากนี้ คุณยังสามารถใส่ URL Zabbix เข้าโซน Local Intranet โดยใช้ Group Policies (Computer Configuration -> Administrative Templates -> Windows Components -> Internet Explorer -> Internet Control Panel -> Security Page -> Site to Zone Assignment List ใช้รหัสโซน 1 สำหรับไซต์ intranet)

Zabbix: การตั้งค่า Single Sign-On (SSO) การยืนยันตัวตนใน Active Directory

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

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

Zabbix: การตั้งค่า Single Sign-On (SSO) การยืนยันตัวตนใน Active Directory

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

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

การดีบักและแก้ไขปัญหาการยืนยันตัวตน Kerberos ใน Apache

หากคุณมีปัญหา ให้เปิดโหมดดีบักใน apache2:

เพิ่มส่วนต่อไปนี้ก่อนแท็กปิด </VirtualHost> ใน /etc/apache2/sites-available/000-defaults.conf:

LogLevel trace8

Zabbix: การตั้งค่า Single Sign-On (SSO) การยืนยันตัวตนใน Active Directory

รีสตาร์ท apache และตรวจสอบข้อผิดพลาดของโมดูล Kerberos ในไฟล์ error.log

เพื่อความสะดวก ใช้คำสั่งนี้เพื่อกรองรายการตามที่อยู่ IP:

tail -f /var/log/apache2/error.log | grep ‘Your IP address’

เพื่อทำงานกับและวินิจฉัย Kerberos คุณสามารถใช้คำสั่ง kinit และ klist

kinit เป็นเครื่องมือสำหรับรับและแคชตั๋ว Kerberos ตัวอย่าง:

kinit –V -k -t /etc/apache2/zabbix.keytab –p HTTP/zabbix.domain.local@DOMAIN.LOCAL

หากคุณสร้างไฟล์ keytab ถูกต้อง คำสั่งจะรันและคุณจะได้รับข้อความว่าการยืนยันตัวตนสำเร็จ

ใช้ klist เพื่อดูตั๋ว Kerberos ที่แคชไว้:

klist -a