מודול PAM אינו מוכר: איזה תהליך נכשל באמת
ההודעה מציינת אובייקט משותף ונקודת כניסה, לא סיסמה. מצאו את התהליך שרשם אותה, ואז בדקו טעינה, סמלים והבטחות של המחסנית.
קראו את הביטוי הזה כהצהרה על אובייקט משותף ועל מצביע לפונקציה, לא על סיסמה. אותן מילים יכולות לבוא מתוך OpenVPN תוסף, ממחסנית PAM שנטענה עבור שירות אחד או מתוך הדמון RADIUS, ואלה שלוש חקירות שונות. בחרו קודם את התהליך.
הבדיקות שלהלן מניחות שההודעה הופיעה דרך שילוב Linux-PAM בכניסה ל-VPN. אם היא באה מהתצורה של שרת ה-RADIUS עצמו, יש להתחיל בראיות של אותו דמון.
תנו שם לתהליך לפני שאתם נותנים שם לחבילה
שלושה רכיבים מכונים מודול, ואף אחד מהם אינו ניתן להחלפה. תוסף אימות של OpenVPN נטען על ידי דמון ה-VPN ומיישם את ממשק הקריאה החוזרת של אותו דמון. מודול PAM הוא אובייקט משותף אותו טוען libpam עבור שירות בעל שם, ומיישם נקודות כניסה כגון pam_sm_authenticate. מודול FreeRADIUS הוא חלק מהתצורה של אותו דמון. הודעה עם אותן מילים יכולה לבוא מכל אחד מהשלושה, ולכן השאלה הראשונה היא איזו שורת יומן הפיקה אותה.
הצליבו את חותם הזמן של ניסיון כושל אחד בין יומן ה-VPN ליומן האימות של המערכת, ואז קראו את השורות שלפני הסיכום. הודעת הטוען המדויקת נמצאת בדרך כלל שם כבר.
קראו את שגיאת הטעינה, ואז את נקודת הכניסה
PAM מדווח על מודול לא מוכר כשהוא אינו יכול לטעון את האובייקט המשותף שנבחר, או כשהאובייקט שנטען אינו מספק את הפונקציה שדורשת אותה שורת מחסנית. אלה תיקונים שונים: הראשון הוא בעיית נתיב, אריזה או ABI, והשני הוא נקודת כניסה שאינה תואמת. שורת אימות זקוקה ל-pam_sm_authenticate ואילו שורת חשבון זקוקה ל-pam_sm_acct_mgmt, וספרייה שמיישמת רק אחד מהם תיכשל בשני, כפי שמראה קוד המשגר. מציאת הקובץ בדיסק אינה מוכיחה אף אחד מהשניים.
לקחת ספרייה בשם דומה מהפצה או מארכיטקטורת מעבד אחרת אינה תיקון, והיא עלולה להשאיר תהליך שטוען מודול שמעולם לא נבדק מול ה-libpam שלו. בדקו את החבילה שבעלת הנתיב המיועד ואת הארכיטקטורה האמיתית של הקובץ לפני שמשנים משהו.
שמרו על ההבטחות שהמחסנית נתנה
הדרך המהירה ביותר להשתיק את השגיאה הזו היא גם הגרועה ביותר: לסמן מודול חובה כאופציונלי, למחוק את שלב החשבון, או להוסיף היתר ללא תנאי. כל אחד מאלה הופך בדיקה כושלת לבדיקה חסרה, והכניסה מצליחה אז מסיבות שאיש לא התכוון אליהן. גם איפוס סיסמאות ושינוי סוד משותף אינם מספקים פונקציה חסרה, מפני שהכשל מתרחש לפני שפרטי זיהוי כלשהם מגיעים ל-backend.
מחסנית עם כמה מודולים עשויה הייתה להריץ backend אחר לפני השורה הכושלת, ולכן השגיאה אינה מוכיחה שלא נשלחה בקשת RADIUS.
אמתו את הכניסה ולא את המודול
לאחר תיקון אי ההתאמה, בדקו את נתיב הקבלה בפועל. חשבון תקין אמור לעבור, פרטי זיהוי שגויים אמורים להיכשל עדיין, וחשבון אסור אמור להידחות עדיין. אשרו גם שדרישת תעודה או גורם נוסף עדיין נאכפת, מפני שמחסנית מתוקנת שמדלגת על שלב נראית כמו הצלחה מצד הלקוח.
טעינה נקייה של מודול היא התקדמות, לא בדיקה שהסתיימה.
תעדו איזה שם שירות, אילו קבצי מדיניות ואילו נקודות כניסה היו מעורבים, יחד עם הניסיון היחיד שהשתמשתם בו כראיה. הרשומה הזו היא מה שהופך את המקרה הבא לחיפוש ולא לתרגיל ארכיאולוגי.