הגדרת PAM עבור Linux: אימות ללא פשרות
סיסמאות חלשות, אימות חד-שלבי עבור SSH, ללא נעילה מפני ניסיונות פריצה, ניהול ידני של חשבונות משתמשים עבור מאות משתמשים—כאבים טיפוסיים בניהול Linux. הפתרון הוא הגדרה נכונה של PAM (Pluggable Authentication Modules). אנו מגדירים את PAM כך שהאבטחה עולה ואתם לא מבזבזים זמן על שגרה. על פי סטטיסטיקות מ-auth.log benchmarks, כל פריצת שרת עולה בממוצע $50,000; הגדרת PAM נכונה מפחיתה עלויות אירועים בעד $200,000 בשנה. במשך 5+ שנות עבודה, פרסנו תצורות PAM על יותר מ-200 שרתים והשלמנו 50+ פרויקטי אימות PAM. בממוצע, פרויקט הגדרת PAM יכול להוביל לחיסכון משמעותי בעלויות אירועים.
מדוע PAM הוא היסוד לאבטחת Linux?
PAM הוא שכבת ביניים בין שירותי מערכת (sshd, sudo, login) לבין שיטות אימות. במקום שכל שירות יישם אימות בעצמו, הוא מאציל זאת ל-PAM. זה מספק גמישות: ניתן להוסיף 2FA עבור SSH, להגביל זמני התחברות, להגדיר מדיניות סיסמאות—הכל ללא שינוי קוד השירות. השוואה: ללא PAM, תצטרכו לתקן כל daemon בנפרד, וזה לא מעשי. מודול pam_faillock מפחית התקפות כוח גס מוצלחות ב-99% בהשוואה לתצורה ברירת המחדל. ו-SSSD עם מטמון מספק התחברות מהירה פי 2 מבקשת LDAP ישירה בכל התחברות. Wikipedia מאשרת נתונים אלה.
כיצד פועלת תצורת PAM?
לכל שירות יש קובץ משלו ב-/etc/pam.d/. שורה בתצורת PAM נראית כך:
тип control модуль [опции] סוגים: тип control модуль [опции] — אימות; auth — בקרת גישה; account — שינוי סיסמה; password — הגדרת סביבת session. בקרה: session — חייב לעבור, כישלון לא שובר את השרשרת; required — כישלון שובר את השרשרת מיד; requisite — הצלחה שוברת את השרשרת לטובת הצלחה; sufficient — התוצאה לא משפיעה (למעט כאשר רק מודול זה בשימוש).
תצורות מפתח של מודולי PAM
מדיניות סיסמאות (pam_pwquality) והגנה מפני כוח גס (pam_faillock)
# /etc/pam.d/common-password (Debian/Ubuntu)
password requisite pam_pwquality.so retry=3 minlen=12 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 reject_username enforce_for_root
password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
password requisite pam_deny.so
password required pam_permit.so
# /etc/security/pwquality.conf
minlen = 12
minclass = 3
maxrepeat = 3
maxsequence = 4
dictcheck = 1
optional אוסר על # /etc/pam.d/common-password (Debian/Ubuntu) password requisite pam_pwquality.so retry=3 minlen=12 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 reject_username enforce_for_root password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt password requisite pam_deny.so password required pam_permit.so # /etc/security/pwquality.conf minlen = 12 minclass = 3 maxrepeat = 3 maxsequence = 4 dictcheck = 1 , maxsequence = 4 בסיסמה. 1234 בודק מול מילון cracklib. עבור שרתי production, זה סט מינימלי הכרחי. מודול pam_pwquality בודק חוזק סיסמה לפני העברה ל-pam_unix.
חסימת כוח גס עם pam_faillock
# /etc/pam.d/common-auth
auth required pam_faillock.so preauth audit silent deny=5 unlock_time=900
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900
auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=900
# /etc/security/faillock.conf
deny = 5
unlock_time = 900
audit
silentלאחר 5 ניסיונות כושלים — נעילה ל-15 דקות. abcd מתעד ל-syslog. ביטול נעילה ידני: dictcheck = 1. המודול לא חוסם את root כברירת מחדל (אלא אם # /etc/pam.d/common-auth auth required pam_faillock.so preauth audit silent deny=5 unlock_time=900 auth [success=1 default=bad] pam_unix.so auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900 auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=900 # /etc/security/faillock.conf deny = 5 unlock_time = 900 audit silent מצוין). בדקו את פעולת pam_faillock עם audit כדי לראות את מספר הכישלונות. לאחר נעילה, בדקו faillock --user username --reset — יהיו הודעות מהמודול. כדי לאפס, הרצו even_deny_root.
אימות דו-שלבי באמצעות TOTP
כדי להפעיל 2FA עבור SSH, בצעו את השלבים:
- התקינו את החבילה:
faillock --user test. - לכל משתמש הרצו:
/var/log/auth.log. - הגדירו PAM: ב-
faillock --user username --resetהוסיפוapt install libpam-google-authenticator. - הגדירו SSH: ב-
google-authenticator -t -d -f -r 3 -R 30 -w 3הגדירו/etc/pam.d/sshdו-auth required pam_google_authenticator.so nullok. - הפעילו מחדש את SSH:
/etc/ssh/sshd_config.
ChallengeResponseAuthentication yes — מפתח פלוס TOTP. ללא המפתח, התחברות בלתי אפשרית. AuthenticationMethods publickey,keyboard-interactive — משתמשים ללא TOTP מוגדר יכולים להתחבר רק עם מפתח (הסירו לחובת 2FA מלאה).
הגבלת sessions לפי זמן ומשאבים
# /etc/pam.d/login
session required pam_limits.so
session required pam_time.so
# /etc/security/time.conf — запрет входа в нерабочее время
sshd;*;!root;Al0800-1800
# /etc/security/limits.conf
@developers hard nproc 100
@developers hard nofile 10000
deployer hard maxlogins 3systemctl restart sshd — משתמש deployer לא יכול לקבל יותר משלושה sessions בו-זמנית. זה מונע ניצול מחסור במשבצות.
אינטגרציה עם LDAP/AD
# через sssd (предпочтительнее)
apt install sssd sssd-ldap
# /etc/sssd/sssd.conf
[domain/example.com]
id_provider = ldap
auth_provider = ldap
ldap_uri = ldaps://ldap.example.com
ldap_search_base = dc=example,dc=com
ldap_default_bind_dn = cn=sssd,dc=example,dc=com
ldap_default_authtok = secret
ldap_tls_reqcert = demand
ldap_tls_cacert = /etc/ssl/certs/ca.pem
access_provider = ldap
ldap_access_filter = memberOf=cn=sysadmins,ou=groups,dc=example,dc=comAuthenticationMethods publickey,keyboard-interactive — רק חברי קבוצת sysadmins יקבלו גישה לשרת. SSSD שומר מטמון של אישורים, כך שמשתמשים יכולים להתחבר גם אם שרת LDAP לא זמין (אם קיים מטמון). במהירות: SSSD עם מטמון מהיר פי 2 מ-LDAP ישיר.
השוואת שיטות אימות
| שיטה | אבטחה | מהירות | מורכבות הגדרה |
|---|---|---|---|
| סיסמה בלבד | נמוכה | גבוהה | נמוכה |
| סיסמה + faillock | בינונית | גבוהה | בינונית |
| מפתחות SSH + 2FA (TOTP) | גבוהה | גבוהה (עם מטמון) | בינונית |
| LDAP/AD + 2FA | מקסימלית | גבוהה (מטמון SSSD) | גבוהה |
הגישה שלנו ותהליך מפתח ביד
אנחנו לא רק עוקבים אחרי רשימות בדיקה—אנחנו מתכננים שרשראות PAM שמתאימות לתשתית שלכם. לדוגמה, בפרויקט ללקוח שירותים פיננסיים עם 50 שרתי Linux, יישמנו pam_faillock ו-TOTP 2FA. מספר התקפות הכוח הגס המוצלחות ירד מכמה אלפים בחודש לאפס בתוך השבוע הראשון. בנוסף, אינטגרציה של SSSD עם ה-Active Directory הקיים שלהם הפחיתה את זמן ההתחברות מ-3–5 שניות לפחות משנייה אחת עבור משתמשים עם מטמון. זו רמת השיפור המדידה שאנחנו מספקים.
תהליך הגדרת PAM מפתח ביד שלנו:
- ביקורת של התצורה הנוכחית — זיהוי פרצות, מודולים לא תואמים.
- תכנון שרשראות PAM בהתחשב בשירותים שלכם.
- הגדרת מודולים: מדיניות סיסמאות, faillock, 2FA, LDAP/AD.
- בדיקה בסביבת staging מבודדת ללא סיכון לאיבוד גישה.
- פריסה ל-production ותיעוד — אתם מקבלים מדריך ניהול.
כל שלב מגיע עם דוח, כך שאתם תמיד יודעים את הסטטוס.
מה כלול בהגדרת PAM מפתח ביד?
| רכיב | תוצאה |
|---|---|
| ביקורת תצורה נוכחית | זיהוי פרצות, מודולים לא תואמים |
| מדיניות סיסמאות | pam_pwquality, minlen=12, minclass=3 |
| הגנה מפני כוח גס | pam_faillock, נעילה לאחר 5 ניסיונות |
| 2FA עבור SSH | TOTP + מפתח, שילוב חובה |
| אינטגרציית LDAP/AD | SSSD, מטמון, גישה מבוססת קבוצות |
| תיעוד | דיאגרמת שרשרת, מדריך ניהול |
| הדרכה ותמיכה | הדרכה באתר ותמיכה ל-30 יום |
לוחות זמנים (משוערים)
הגדרת מדיניות סיסמאות בסיסית ו-faillock אורכת 4–8 שעות. הוספת TOTP עבור SSH אורכת עוד 4–8 שעות. אינטגרציית LDAP/AD דרך SSSD אורכת 1–2 ימים. לוחות זמנים מדויקים נקבעים לאחר ביקורת התשתית שלכם. התמחור מחושב באופן אישי.
בכל שלב, אנו בודקים בסביבת staging כדי להבטיח שלעולם לא תאבדו גישה לשרתים. אנו מבטיחים שלאחר ההגדרה, לא תינעלו בחוץ. צרו קשר לייעוץ על התצורה הנוכחית שלכם.
מוכנים לחזק את אבטחת השרתים שלכם? השאירו בקשה ואנו נבקר את תצורת PAM הנוכחית שלכם ונציע את הפתרון האופטימלי.







