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

מה הכלא מסיר והדמון עדיין צריך

שינוי השורש קורה אחרי ההפעלה, ולכן הדמון שומר על כל מה שכבר פתח ומאבד כל מה שהיה פותח אחר כך. כל עוזר שהחיבור מריץ אחרי הנקודה הזו חייב להתקיים בתוך השורש החדש, יחד עם הספריות המשותפות שהוא טוען. כלא שנבנה מקובץ הגדרות ותעודה אינו מכיל אף אחד מהשניים.

מעבר לחשבון לא מיוחס הוא הגבלה נפרדת. תהליך שוויתר על root עשוי שלא להצליח לשנות מסלולים או להעלות ממשק גם כשהקובץ הבינארי נמצא ממש שם, ולכן יש לאבחן את שתי התקלות בנפרד.

שלושה תנאים קובעים איזה תיקון אתם צריכים

התנאי הראשון הוא איך הבנייה שלכם מתקינה מסלולים. גרסאות OpenVPN חדשות מגדירות את הממשק ואת טבלת הניתוב בתוך התהליך, ואילו חבילות ישנות יותר והגדרות מותאמות נשענות על כלים חיצוניים או על סקריפטים up ו-down. אם הלוג מציין פקודה, יש כלי חיצוני בעניין והכלא מסתיר אותו. אם הלוג מציג במקום זאת שגיאת הרשאה, החשבון הוא הבעיה.

השני הוא תחזוקה. כלא עם קבצים בינאריים מועתקים צריך להיות מרוענן בכל פעם שהחבילה שמספקת אותם משודרגת, אחרת השדרוג הראשון משאיר מאחוריו מנהרה שבורה. השלישי הוא אם בקרה מסוימת באמת דורשת chroot; אם הדרישה היא למעשה על הפרדת הרשאות, ייתכן שמעבר החשבון לבדו יספיק.

Signal in the logOther side of the boundaryRepair direction
Command not found after startupBinary and its libraries absent inside the new rootPopulate the jail, or drop the chroot line
Operation not permittedAccount lost the privilege to edit routesKeep the account privileged, or pre-create routes elsewhere
No such deviceJail lacks the tun device nodeCreate the node inside, or open it before the root change

מה כלא עובד חייב להכיל

כלא שמריץ פקודות צריך את הקובץ הבינארי, כל ספרייה שהוא מקושר אליה וכל צומת התקן שהדמון פותח מאוחר. העתיקו את החלקים ובדקו אותם בלי ה-VPN בתמונה:

ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up

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

העתיקו לכלא גם את ההגדרות, את התעודות ואת כל CRL, כי קובץ שהדמון מצפה לקרוא שוב אחרי ההפעלה לא יימצא לאחר שהשורש השתנה. רשמו מה העתקתם, שכן השדרוג הבא של חבילת הרשת מחליף את המקוריים ומשאיר את הכלא על ההעתקה הישנה.

במקום זאת הקטנת את ההקשחה

אם הכלא קיים רק מפני שמדריך אמר כך, הסרת השורה האחת תוך שמירה על הגבלות החשבון היא תוצאה ניתנת להגנה. הדמון שומר על תצוגת מערכת הקבצים שלו ומאבד את הבעיה, והורדת ההרשאות עדיין מסירה root מהתהליך ארוך החיים.

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

פצלו את שלוש השורות לפני שתבחרו

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

כשהוא מנתב שוב, הריצו הפעלת לקוח אחת ברמת פירוט גבוהה יותר וקראו את השורה שמציינת את הפקודה או את ההרשאה שנכשלה. השורה הזו שווה יותר מהפסק הזמן שהלקוח מדווח בסופו.

מאמרים קשורים