SELinux

SELinux (ראשי תיבות של Security Enhanced Linux, פירוש מילולי: לינוקס עם אבטחה מתקדמת) הוא יישום של Mandatory Access Control עבור מערכות לינוקס, שמגיע עם חלק מהפצות לינוקס כברירת מחדל וכאופציה להתקנה באחרות. לדוגמה, רוב הפצות Red Hat כוללות בתוכן את SE Linux (בהפצות Debian ,Ubuntu וכדומה ניתן להתקין את SE Linux).

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

רקע 
כל מערכת לינוקס מממשת מנגנון DAC (בראשי תיבות: Discretionary Access Control). בשיטה זו לכל קובץ יש משתמש שהוא הבעלים של הקובץ וקבוצה שהיא הבעלים של הקובץ. לכל משתמש יש שליטה מסוימת (בהתאם להרשאות עבור כל קובץ) בקובץ ולכל המשתמשים בקבוצה שהיא הבעלים של הקובץ יש שליטה מסוימת בו (בהתאם להרשאות עבור כל קובץ).במידה ומוגדר כך אמור להיות למשתמש-על (root) יש יכולת שליטה מלאה בכל הקבצים במערכת.

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

סקירה 
בניגוד ל-DAC, ב-SELinux, שמממש MAC, לכל יישום מוגדר סט הפעולות המותרות לביצוע עבורו. כך, גם אם קיים על המערכת שרת שמורץ על ידי משתמש-על, גורם זדוני שישתלט על השרת לא יוכל לבצע פעולות שלא הוגדרו כמותרות לביצוע על ידו. המשמעות של כך היא שעל אף שהשרת מורץ על ידי משתמש-על, לגורם הפורץ לא יהיו הרשאות בלתי מוגבלות במערכת.

כאשר SELinux פועל, מנגנוני ההגנה שלו פועלים בנוסף למנגנוני ההגנה המובנים של מערכת הקבצים (DAC). אם משתמש מנסה לגשת לקובץ ואין לו הרשאות, המערכת תחסום את הגישה לקובץ. אם יש לו הרשאות, המערכת תיבחן את מדיניות ה-SELinux המתאימה ובהתאם לה תאשר או תחסום את הגישה של המשתמש לקובץ.

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

קישורים חיצוניים

 

הסוכנות לביטחון לאומי
לינוקס