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

שתי תכונות לא קשורות

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

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

מה באמת מדכא את המעבר

התיעוד של execve מתאר כיצד קובץ הרצה עם set-user-ID משנה את הזהות האפקטיבית של התהליך החדש לזו של בעל הקובץ. באותו עמוד מפורטים התנאים שמדכאים את המעבר הזה והמקבילה להם עבור מזהי קבוצה: הגדרת no_new_privs, מערכת קבצים שמותקנת עם nosuid, ותהליך שנמצא במעקב. יכולות קובץ מתעלמים מהן באותם תנאים. ארבעת הכללים האלה מכסים כמעט כל דיווח מסוג זה.

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

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

מה לא לעשות בנידון

הצבת סיביות set-user-ID על קובץ בינארי שלא אומת והעברתו ממקום למקום עד שההגבלה נעלמת אינה תיקון. היא מחליפה מדיניות שלא הבנתם בהרשאה שאינכם יכולים לבקר, ואותה טכניקה המופעלת על עוזר היא נתיב הסלמה מוכר. הסרת nosuid מהרכבה גרועה יותר, מפני שהיא משפיעה על כל תוכנית במערכת הקבצים ההיא, לא רק על אחת.

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

אמתו את הקשר ההפעלה האמיתי

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

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

findmnt -no TARGET,OPTIONS /home
getcap /usr/libexec/openvpn-helper 2>/dev/null; ls -l /usr/libexec/openvpn-helper

רשמו את אפשרויות ההרכבה ואת הבעלות על העוזר באותה הערה. אחרת האדם הבא שינפה את זה יחזור על תאוריית ההצפנה מההתחלה.

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