כמה מחשבות על אחריות להתנגשויות בים

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

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

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

הסיבה היא מאוד פשוטה. כלי שיט לא שטים במהירות גבוהה במיוחד. מרגע שרואים את הכלי ועד רגע המפגש עוברים, לעיתים קרובות, מעל עשר דקות. מכיוון שיש חובה לאיוש עמדת תצפית על כל כלי שיט שנמצא “בדרך” (ז”א – לא עגון, בין אם הוא ממש שט ובין אם לאו), הרי שהיו שני תצפיתנים שהתרשלו במקרה של ההתנגשות בין צים לבין סירת הדיג היפנית.

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

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

שחר

אני שונא ACL

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

למי שלא יודע:
ביוניקס, בקרת גישה מתבצעת, באופן מסורתי, באופן מאוד פשטני. לכל משאב יש שני מזהים (זיהוי משתמש – 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 במידה מאוד מופחתת. יש כמה סיבות להבדל. הראשונה היא שחוקי פיירוול, בד”כ, יש רק סט אחד. הסט הזה נמצא במקום אחד. בעיית ה”איך יודעים שמשהו השתנה” לא קיימת, לכן. אם תסתכלו, לדוגמא, על חוקי הפיירוול של חברת צ’ק פוינט עצמה תגלו שהם הקטינו את כמות החוקים מאוד, והרחיבו את הכיסוי של כל חוק. מכיוון שהם משתמשים באותו סט של חוקים לניהול כל הפיירוולים באירגון, על כל סניפיו, מה שקורה שם הוא סט אחד של חוקים (מאוד מעט מהם) שבאמצעות שימוש מושכל בקבוצות מתאים את עצמו לכל מכונה עליה הוא מותקן. במילים אחרות, כאשר מספר האזורים לניהול גדל, כך צריכה לקטון סיבוכיות הניהול. אחרת התוצאה היא ברדק בלתי ניתן לניהול.

שחר

פתרון הפיסיקה מלפני שני פוסטים

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

אם התשובה היא “לא”, מכיוון שבאופן מעשי אתם כן יכולים, למה?

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

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

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

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

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

שחר

נ.ב.
למי שתוהה איך ייתכן שאנחנו מייצרים תנועה באמצעות חיכוך שלוחה השאלה הבאה:
איך גורם הכוח של מנוע של רכב לרכב להתקדם?

ש.

Bear