כן, כן. עבדכם הנאמן, הפרנואיד המקצועי, שונא את אמצעי בקרת הגישה המפורט ביותר שקיים.
למי שלא יודע:
ביוניקס, בקרת גישה מתבצעת, באופן מסורתי, באופן מאוד פשטני. לכל משאב יש שני מזהים (זיהוי משתמש – UID וזיהוי קבוצה – GID). יש לו שלושה סטים של הרשאות (מי שמתאים מבחינת UID, מי שמתאים מבחינת GID, וכל השאר). זהו.
לכל תהליך (אין “משתמשים” ביוניקס) יש UID ורשימת GID ששייכים לו, ועל פי זה נקבעות הרשאות הגישה שלו לכמעט כל משאב במערכת.
מנגד, יש את שיטת ה-Access Control List. הרעיון הוא שלכל משאב יש רשימה של הרשאות. ההרשאות יכולות להכיל משתמש או קבוצה. הן יכולות להכיל היתרים ומניעות. תלוי במימוש ההיתרים והמניעות יכולים להיות בכל סדר, או בסדר נתון (כל המניעות קודם, כל ההיתרים קודם וכדומה). בשיטה הזו ניתן, בדיוק מאוד רב, לציין למי יש גישה לכל משאב.
ACL היא מערכת ההרשאות שממומשת בחלונות. יש גם מימושי ACL ליוניקסים שונים (כולל לינוקס, כמובן). יש מקומות אחרים, כמו חוקי Firewall, ששם ACL הינם השיטה היחידה לציין את הרשאות הגישה. המשפט בכותרת מתייחס בעיקר לשימוש ב-ACL לצורך בקרות גישה לקבצים ולמשאבים בצורת עץ.
דבר ראשון, קצת ניתוח פחות או יותר פורמלי. אין הבדל תיאורטי בחוזק בין מערכות ההרשאות שניתן לתאר באמצעות השיטה היונקסית לבין מערכת ההרשאות שאפשר לתאר באמצעות ACL. כמובן שהתיאוריה פשוט לא מעניינת פה. יש מערכות מסויימות שיהיה סיוט לא קטן לנסות לתאר באמצעות קבוצות ושלוש קבוצות הרשאות. מקובל לחשוב ש-ACL הינה מערכת שמאפשרת, באופן פרקטי, דיוק הרבה יותר גבוה בציון של “למי” מותר “מה”.
אז, אם כל כך טוב, למה אני כל כך נגד?
הסיבה נעוצה באמונה שלי שכמעט כל הפעמים שבהם אנשים אומרים שקיים “איזון” וש”אחד בא על חשבון השני”, בעצם הכוונה היא למערכת אחת עם מקסימום. אני עוד אכתוב פוסט שלם על הנושא הזה. בנתיים, בואו פשוט נסתכל על מה שיש לנו פה.
הבעיה עם ACL היא שהם כל כך מפורטים, עד שאין שום סיכוי לקבל פירוט של מצב ההרשאות במבט אחד. בחלונות, לדוגמא, צריך לבקש מסך מיוחד כדי לבדוק מה ההרשאות של כל קובץ.
עכשיו בואו נניח שאני מנהל את המערכת. כל מה שאני רוצה זה אזור מסויים שכל המשתמשים יכולים לקרוא, אזור שמשתמש מסויים יכול לכתוב, וכן הלאה. במצב העניינים, אני צריך להחליט על ACL לכל directory, וחפש כלי (קיים, אבל לא פופולרי במיוחד) שיעשה בשבילי את השינויים באופן גורף.
אם נוסיף לבילבול את העובדה שפירוש רשימת החוקים הוא לא טריויאלי, אנחנו מקבלים מערכת שקשה מאוד לתת לה הרשאות סבירות, אפילו עוד יותר קשה להזיז אותה מערכי ברירת המחדל, ואם מישהו אחר הזיז אותה מברירת מחדל, כמעט בלתי אפשרי לדעת על זה או לדעת מה הזיזו.
אני מודע היטב שהמשפט שאמרתי עכשיו הינו מאוד גורף. אני אשמח לשמוע ממישהו שמכיר את XP יותר טוב ממני אם אני טועה. אם יש דרך שבה אתם יכולים לשאול “האם יש פה קובץ עם הרשאות חריגות”, אני רוצה לדעת. אני אפילו אמקד את השאלה. האם יש דרך לשאול “האם יש פה קובץ שההרשאות שלו מאפשרות למשתמש X גישת כתיבה”? כשאני שואל את זה, כמובן, אני רוצה לדעת על כל הדרכים שבהן ל-X יש הרשאת גישה, גם אם זה דרך קבוצה בה הוא חבר וכו’.
מנגד, פקודת “find” פשוטה תענה על השאלות הנ”ל למערכות יוניקס. החוסר הוא לא בפקודה מקבילה ל-find בחלונות. זה לא שאין חוסר כזה (יש), אלא ש-find לא מסוגל לעשות את העבודה גם אם השתמשתם ב-ACL על לינוקס. הבעיה היא שברגע שמערכת ההרשאות היא כל כך מתוחכמת, נהיה כמעט בלתי אפשרי להגדיר את השאלה, ועל כן ברור שקשה גם לענות עליה.
הבעיה היא שהעדר כלי ניהול מחד, ומנגנון קשה להבנה מאידך, גרמו לזה שבד”כ אנשים פשוט לא נוגעים במנגנונים האלו.
כרגיל, אני אשמח לשמוע דוגמאות נגדיות. אם מישהו מקוראי הבלוג דווקא כן נוהג לשנות את ההרשאות על קבצים במערכת (החלונות) שלו על בסיס קבוע, אנא השמיעו קול. אני במיוחד אשמח לשמוע באלו כלים אתם משתמשים, איך אתם יודעים שלא עשיתם טעות, ועם אלו כלים אתם מנטרים את השינויים שנעשו.
ובגלל כל אלו, אני לא משתמש ב-ACL אם אני רק יכול להמנע מזה.
שחר
נ.ב.
כל הנ”ל לא חל על חוקי Firewall. יותר נכון, כל הנ”ל חל על חוקי firewall במידה מאוד מופחתת. יש כמה סיבות להבדל. הראשונה היא שחוקי פיירוול, בד”כ, יש רק סט אחד. הסט הזה נמצא במקום אחד. בעיית ה”איך יודעים שמשהו השתנה” לא קיימת, לכן. אם תסתכלו, לדוגמא, על חוקי הפיירוול של חברת צ’ק פוינט עצמה תגלו שהם הקטינו את כמות החוקים מאוד, והרחיבו את הכיסוי של כל חוק. מכיוון שהם משתמשים באותו סט של חוקים לניהול כל הפיירוולים באירגון, על כל סניפיו, מה שקורה שם הוא סט אחד של חוקים (מאוד מעט מהם) שבאמצעות שימוש מושכל בקבוצות מתאים את עצמו לכל מכונה עליה הוא מותקן. במילים אחרות, כאשר מספר האזורים לניהול גדל, כך צריכה לקטון סיבוכיות הניהול. אחרת התוצאה היא ברדק בלתי ניתן לניהול.
שחר