שילוב Active Directory לשרתי לינוקס עם SSSD ו-Realmd

כל עובד חדש פירושו התעסקות ידנית עם חשבונות מקומיים, סיסמאות מפוזרות והגדרת גישה למשאבים משותפים. אנחנו משלבים שרתי Linux לתוך Active Directory באמצעות SSSD ו-Realmd במתכונת turnkey—מביקורת ועד פריסה, תוך הבטחת אימות מרכזי ותמיכה מתמשכת.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

בשרת ללא אינטגרציית AD, כל עובד חדש מקבל חשבון מקומי ידנית. עם 50 עובדים, זה לוקח שעתיים בשבוע. סיסמאות אינן מסונכרנות, והגישה למשאבים משותפים מוגדרת בנפרד. ניסיון האינטגרציה שלנו עולה על 10 שנים — יישמנו למעלה מ-50 פרויקטים. SSSD ו-Realmd הם כלים סטנדרטיים לחיבור Linux ו-AD. לפי תיעוד Red Hat, SSSD מומלץ לאימות מרכזי.

איך זה עובד

Realmd הוא כלי לגילוי והצטרפות לדומיין. הוא רץ פעם אחת בעת הצטרפות לדומיין. SSSD (System Security Services Daemon) הוא דמון שרץ כל הזמן: הוא פונה ל-AD לצורך אימות, שומר מטמון של אישורים, ומספק מידע משתמש דרך NSS. בניגוד ל-Winbind, SSSD תומך במטמון וב-GPO — קריטי לסבילות לתקלות. אימות דרך SSSD מהיר פי 3 תחת עומס של 1000+ משתמשים בזכות המטמון.

הצטרפות לדומיין

apt install realmd sssd sssd-tools adcli krb5-user samba-common-bin
# Или на RHEL: dnf install realmd sssd oddjob oddjob-mkhomedir adcli samba-common-tools krb5-workstation
realm discover corp.example.com && realm join --user=Administrator corp.example.com
realm list

לאחר ההצטרפות, יש לבדוק עם: apt install realmd sssd sssd-tools adcli krb5-user samba-common-bin # Или на RHEL: dnf install realmd sssd oddjob oddjob-mkhomedir adcli samba-common-tools krb5-workstation realm discover corp.example.com && realm join --user=Administrator corp.example.com realm list . אם הפקודה מחזירה מידע משתמש, זה עובד.

הגדרת SSSD

הקובץ שנוצר אוטומטית עובד, אך דורש התאמות לסביבת ייצור. הנה הגדרה טיפוסית עם הסברים:

[sssd]
domains = corp.example.com
config_file_version = 2
services = nss, pam

[domain/corp.example.com]
ad_domain = corp.example.com
krb5_realm = CORP.EXAMPLE.COM
realmd_tags = manages-system joined-with-adcli
cache_credentials = True
id_provider = ad
auth_provider = ad
access_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False
# jsmith вместо [email protected]
fallback_homedir = /home/%u
ad_gpo_access_control = permissive
# или enforcing если нужны GPO

id [email protected] הוא פרמטר חשוב. בלעדיו, משתמשים מתחברים כ-[sssd] domains = corp.example.com config_file_version = 2 services = nss, pam [domain/corp.example.com] ad_domain = corp.example.com krb5_realm = CORP.EXAMPLE.COM realmd_tags = manages-system joined-with-adcli cache_credentials = True id_provider = ad auth_provider = ad access_provider = ad krb5_store_password_if_offline = True default_shell = /bin/bash ldap_id_mapping = True use_fully_qualified_names = False # jsmith вместо [email protected] fallback_homedir = /home/%u ad_gpo_access_control = permissive # или enforcing если нужны GPO , וזה לא נוח. איתו, מספיק use_fully_qualified_names = False, אך עלול להיות התנגשות עם משתמשים מקומיים. [email protected] מאפשר התחברות בזמן חוסר זמינות זמני של DC. המטמון נשמר ב-jsmith.

איך ליצור תיקיות בית אוטומטית?

בכניסה הראשונה, אין תיקיית בית. cache_credentials = True יוצר אותה אוטומטית. הפעל דרך /var/lib/sss/db/ (Debian) או pam_mkhomedir (RHEL). לחלופין, הוסף ידנית ב-pam-auth-update --enable mkhomedir: authselect enable-feature with-mkhomedir.

הגבלת גישה לפי קבוצות AD ו-sudo

לא כל משתמשי AD צריכים להתחבר לכל שרת. שתי שיטות:

# Через realm realm permit -g '[email protected]'
realm deny --all
# Через sudoers
echo '%[email protected] ALL=(ALL:ALL) ALL' > /etc/sudoers.d/ad_groups
echo '%[email protected] ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart *, /usr/bin/journalctl' >> /etc/sudoers.d/ad_groups

אם /etc/pam.d/common-session, השתמש ב-session required pam_mkhomedir.so skel=/etc/skel/ umask=0077.

אבחון ושגיאות נפוצות

sssctl domain-status corp.example.com
sssctl user-checks jsmith
journalctl -u sssd --since "10 minutes ago"
kinit [email protected] && klist

בעיה נפוצה: sssd לא יכול להגיע ל-DC לאחר שינויי הגדרות רשת. # Через realm realm permit -g '[email protected]' realm deny --all # Через sudoers echo '%[email protected] ALL=(ALL:ALL) ALL' > /etc/sudoers.d/ad_groups echo '%[email protected] ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart *, /usr/bin/journalctl' >> /etc/sudoers.d/ad_groups מציג use_fully_qualified_names = False או %LinuxAdmins. כאשר sssctl domain-status corp.example.com sssctl user-checks jsmith journalctl -u sssd --since "10 minutes ago" kinit [email protected] && klist , בדוק DNS (רשומות SRV sssctl domain-status חייבות להיפתר), שעון שרת (סבילות Kerberos < 5 דקות), חומת אש (פורטים 88/tcp, 389/tcp, 636/tcp ל-DC). תרחיש נפוץ נוסף הוא כפילות UID/GID בשימוש במספר דומיינים; נפתר דרך Online.

SSSD מול Winbind

קריטריון SSSD Winbind
מטמון מובנה, עובד במצב לא מקוון אין מטמון
תמיכת GPO כן (דרך ad_gpo_access_control) לא
ביצועים גבוהים בזכות המטמון (פי 3 מהיר יותר) נמוכים תחת עומס כבד
גמישות הגדרות גבוהה (פילטרים, מיפוי UID/GID) בינונית

שגיאות אינטגרציה נפוצות

שגיאה פתרון
תצורת DNS שגויה: חסרות רשומות SRV Offline הגדר שרת DNS, הוסף רשומת SRV
פער שעון: Kerberos לא סובל הפרש של >5 דקות הגדר לקוח NTP (chrony או ntpd)
פורטים סגורים 88, 389, 636 ל-DC בדוק חומת אש: Offline
מטמון מתעלם: ללא _ldap._tcp.corp.example.com, משתמשים לא יכולים להתחבר כשהדומיין לא זמין הפעל ldap_id_mapping בהגדרות SSSD
כפילות UID/GID בסביבות מרובות דומיינים השתמש ב-_ldap._tcp.domain.com עם טווחים ייחודיים

Ansible לסקייל

הצטרפות של 50+ שרתים לדומיין ידנית אינה מעשית. פלייבוק Ansible מפשט את המשימה:

---
- name: Join AD domain
  hosts: linux_servers
  become: yes
  tasks:
    - name: Install packages
      apt:
        name: [realmd, sssd, adcli, krb5-user]
        state: present
    - name: Discover realm
      command: realm discover {{ ad_domain }}
      changed_when: false
    - name: Join domain
      expect:
        command: realm join --user={{ ad_admin_user }} {{ ad_domain }}
        responses:
          'Password for .*': "{{ ad_admin_password }}"
      no_log: true
    - name: Configure sssd
      template:
        src: sssd.conf.j2
        dest: /etc/sssd/sssd.conf
        mode: '0600'
      notify: restart sssd

שמור את סיסמת מנהל ה-AD ב-Ansible Vault.

מה כלול

  • ביקורת תשתית (DNS, NTP, גישת רשת)
  • הצטרפות שרת בדיקה ל-AD
  • אופטימיזציה של הגדרות SSSD לפי KPIs (זמן אימות, מטמון)
  • הגדרת מדיניות גישה (GPO, sudo)
  • בדיקת סבילות לתקלות (DC לא מקוון, אתחולים)
  • תיעוד הגדרות ונהלים
  • תפקיד Ansible לפריסה המונית
  • הדרכה למנהלי המערכת שלך

תהליך עבודה

  1. ניתוח: בדיקת קישוריות רשת ל-DC ו-DNS.
  2. תכנון: בחירת סכמת דומיין, קבוצות גישה, מדיניות GPO.
  3. יישום: התקנת חבילות, הצטרפות לדומיין, הגדרת SSSD.
  4. בדיקות: התחברות משתמש, sudo, פעולה עם DC לא זמין.
  5. פריסה: פלייבוק Ansible לכל השרתים.

לוח זמנים משוער

השרת הראשון ועידון הגדרות — יום אחד. יישום על כל השרתים דרך Ansible — מ-4 שעות תלוי במספר השרתים. התמחור נקבע באופן אישי.

צור קשר לייעוץ בנושא אינטגרציית שרתי Linux שלך עם AD. נעזור לפתח פתרון מותאם לתשתית שלך ונספק אחריות תאימות. בקש ביקורת — נציע את הפתרון האופטימלי. רקורד שלנו: פריסת SSSD על 200+ שרתים, הפחתת זמן ניהול גישה ב-90%.