PracticU

SELinux

בלי כתוביותעם כתוביות
PracticU › קורס לינוקס למתקדמים - הסמכה בינלאומית - Linux - Red Hat - RHCSA / RHCE › SELinux
מילון מושגים:
SELinux - מנגנון אבטחה ב-Linux שאוכף מדיניות בקרת גישה מחמירה על תהליכים וקבצים.
הרשאה - קביעה אילו פעולות ומשאבים מותרים למשתמש או לתהליך לאחר שזהותו אומתה. שולטת במי רשאי לעשות מה.
תהליך - מופע של תוכנה שרצה בזיכרון, עם הקוד, הנתונים והמשאבים שהוקצו לה על ידי מערכת ההפעלה.
FTP - פרוטוקול להעברת קבצים בין מחשבים ברשת, בין לקוח לשרת.
root - משתמש העל במערכות Linux, בעל הרשאות מלאות לכל פעולה. גם הרמה העליונה בעץ של תיקיות או נתונים.
לוג - רישום מתועד של אירועים ופעולות שמתרחשים במערכת או בתוכנה, המשמש למעקב ולאיתור תקלות.
פורט - מספר שמזהה שירות או תהליך מסוים בתוך מחשב, ומאפשר לכוון תעבורת רשת ליעד הנכון. למשל פורט 80 ל-HTTP.
HTTP - פרוטוקול להעברת דפי אינטרנט ונתונים בין דפדפן לשרת. הגרסה המאובטחת שלו היא HTTPS.

SELinux
השיעור מסביר מדוע SELinux מוסיף שכבת הגנה מעבר להרשאות המשתמשים, ומדגים איך הוא מגביל תהליך כמו FTP גם כשהוא רץ כ-root.
הבעיה
1. הרשאות היוזר: תוכנה שרצה תחת משתמש מקבלת את כל ההרשאות שלו. מחשבון שרץ תחת המשתמש הרגיל יכול לגשת למסמכים שלו.
2. שרת שירות: שרת FTP רץ לעיתים כ-root ולכן יכול לגשת לכל המערכת, גם אם נמצאה בו פרצה.
3. SELinux: מוסיף תוויות (contexts) לקבצים ולתהליכים, ומגדיר אילו פעולות מותרות בין תוויות שונות.
מצבי SELinux
1. Enforcing: אוכף את המדיניות וחוסם פעולות שאינן מותרות.
2. Permissive: אינו חוסם, אלא רושם את החריגה ב-audit log.
3. Disabled: אינו בודק את המדיניות כלל.
4. בדיקה ושינוי: getenforce מציג את המצב, ו-setenforce משנה אותו זמנית. הקביעה הקבועה נמצאת בקובץ /etc/sysconfig/selinux.
5. סוגי מדיניות: targeted, שממוקד לשירותים, ו-MLS, שמחלק את המשתמשים לרמות אבטחה.
תוויות
1. הצגה: ls -Z מציג את התווית של הקבצים, ו-ps -eZ מציג את התווית של התהליכים.
2. דוגמה: קובץ שנוצר בתיקיית הבית של root מקבל תווית של admin home, וקובץ באתר מקבל תווית של תוכן מערכת של HTTPD.
3. חסימה: תהליך FTP לא ייגש לתיקיית boot, והדחייה נרשמת בלוג audit.
הדגמה
1. מצב Permissive: FTP מציג את כל התיקיות בשורש, ובלוג מופיעות אזהרות בלבד.
2. מעבר ל-Enforcing: אחרי המעבר התיקיות שאסורות ל-FTP נעלמות מהחיבור.
3. קובץ שהועתק למקום לא נכון: קובץ שנוצר בתיקיית הבית ונשלח לתיקיית האתר מקבל את התווית הלא נכונה, ולכן נחסם. מתקנים עם restorecon.
4. תיוג ידני: chcon -t משנה את התווית באופן ידני, ואפשרות -R מחילה זאת על כל תתי התיקיות.
Booleans ופורטים
1. Booleans: getsebool -a מציג את המתגים. setsebool -P allow_ftpd_full_access on מאפשר ל-FTP גישה מלאה, וה-P שומר את הערך.
2. פורטים: semanage port -l מציג אילו פורטים מותרים לכל סוג שירות. הוספת פורט 120 ל-http_port_t נעשית עם semanage port -a.
שימו לב
המרצה מציין שרוב מנהלי המערכת מכבים את SELinux כי אינם מבינים את המשמעות שלו, והוא מדגיש שבארגונים מסוימים השימוש בו הופך לחובה.
בתום השיעור הסטודנט מבין את הקשר בין תוויות לתהליכים, יודע לאתר חסימות בלוג, ויודע לשנות booleans ופורטים בצורה מבוקרת.
השיעור הבא בקורס: הגדרת FirewallD
לחץ כאן להורדת הורדת קבצי Script של לינוקס שהיו בסרטים
מילון מושגים:
דיסק - התקן לאחסון קבוע של נתונים, כמו כונן קשיח (HDD) או כונן מבוסס זיכרון מהיר (SSD).
תיקייה - מכל במערכת הקבצים שמשמש לארגון קבצים ותיקיות אחרות בתוך מבנה היררכי.
מחיצה - חלוקה לוגית של דיסק פיזי לאזורים נפרדים, שכל אחד מתפקד כאילו הוא כונן עצמאי.
זיכרון - רכיב מהיר ונדיף שבו המחשב שומר נתונים ותוכניות בזמן ריצתם. תוכנו נמחק עם כיבוי המחשב.
דומיין - תחום ניהולי משותף של מחשבים ומשתמשים ברשת ארגונית, המנוהל מרכזית. גם שם ייחודי של אתר באינטרנט.
אימות - תהליך שמוודא שהמשתמש או המערכת הם מי שהם טוענים שהם, בדרך כלל באמצעות סיסמה, קוד או תעודה.
Active Directory - שירות מדריך של מיקרוסופט לניהול מרכזי של משתמשים, מחשבים והרשאות ברשת ארגונית מבוססת דומיין.
GPO - אובייקט מדיניות קבוצתית ב-Active Directory, שמכיל הגדרות ומדיניות המוחלות על משתמשים ומחשבים.


מבנה ושמות דיסקים ומחיצות בלינוקס:


(Sda (disk0): זה הדיסק הפיזי הראשון (SATA DISK)

(Sda1,Sda2 (Partitions in disk): אלו הן המחיצות בתוך הדיסק הפיזי הראשון.

(Sdb (disk1): זה הדיסק הפיזי השני כמו בוינדוס Disk1

(Sdb1,Sdb2 (Partitions in disk): אלו הן המחיצות בתוך הדיסק הפיזי השני.

מחיצת השורש הראשונה:

וינדוס: C

לינוקס: /

מחיצות נוספות:

וינדוס: D: / E:

לינוקס: /data /example כמו תיקיות.

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

מטרת צירוף לינוקס לדומיין הינה לאימות משתמשים מתוך Active Directory בלבד ואין GPO  ללינוקס דרך AD.


הוכן ע"י התלמיד המצטיין: אברהים אבו שיכה

פרקי ההרצאה: SELinux

  1. 00:00

    מבוא: הבעיה של הרשאות יתר לתוכנה

  2. 01:53

    מגבלות של Run as Administrator

  3. 03:00

    שירות שרץ כ-root והסיכון בכך

  4. 06:46

    הפעלת SELinux במצב Enforcing והשוואה

  5. 08:30

    קריאת לוג האודיט במצב Permissive

  6. 10:29

    מצבי SELinux וקובץ ההגדרות

  7. 11:55

    סוגי הפוליסות: Targeted ו-MLS

  8. 13:40

    תוויות (Labels) על קבצים ותהליכים

תמלול ההרצאה: SELinux

הטקסט המלא של הדקות הראשונות בהרצאה «SELinux» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    שלום וברוכים הבאים לסרטון בנושא SE-Linux. SE-Linux זאת מערכת שפותחה על ידי הסוכנות הביון האמריקנית ה-NSA כדי להגביר באופן מהותי את אבטחת המידע שניתן להגיע איתה במערכות לינוקס.

  2. 00:20

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

  3. 00:30

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

  4. 00:49

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

  5. 01:16

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

  6. 01:51

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

  7. 02:14

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

  8. 02:46

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

  9. 03:15

    יחד עם זאת מה כאשר האפליקציה צריכה לבצע משימות של מספר יוזרים כמו למשל שרת FTP שצריך הרשאות רוט כי הוא בעצם יוכל לשרת מידע ולשרת את כל היוזרים במערכת אם אנחנו נסתכל על הפרוסס של ה-FTP, BS מינוס EF שיראה לנו את כל הפרוססים, גרפ Vs FTP,

  10. 03:42

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

  11. 04:06

    יותר מזה, כאשר משתמש מתחבר למערכת, למשל אני רוצה לתת לו חשבון FTP כדי שהוא יוכל להוריד קבצים מסוימים במערכת. ואם אני אסתכל על ה-Slash או על ההרשאות של אותו משתמש במערכת ls-l-slash, אני אראה שלהרבה מאוד תיקיות יש פה אפשרות גישה של read לכולם, כלומר read לאדרס וזה אומר שאם אני אתן הרשאות

  12. 04:40

    בעצם והמשתמש יוכל להיכנס דרך ה-FTP הוא יוכל דרך אותו חשבון FTP בעצם לקרוא כל דבר שהוא קריא בתוך המערכת לאדרס וכמובן שאני לא רוצה מצב שבו משתמש נכנס דרך ה-FTP ולמשל משנה לי דברים בתוך התיקייה של ה-boot או קורה דברים בתוך התיקייה של ה-boot או בתוך התיקייה של ה-etc.

  13. 05:14

    אז אפילו שברגע שאני אתחבר ל-ftp, בואו תראו את הדוגמה, אני מתחבר ל-ftp, נוצר לי סשן על השרת, אני אעשה עכשיו ps-ef grap vsftp, אני אראה בעצם שהשרת, אפילו שאני רואה שהשרת FTP רץ תחת ה-UID של יוזר 500, שזה בעצם היוזר של FTP, אוקיי,

  14. 06:01

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

  15. 06:34

    בדוגמה הזאתי FTP. בואו נראה את הדוגמה. כרגע המצב של ה-SE-Linux הוא ב-disabled. הנה אני עושה פה, או יותר נכון ב-permissive, כלומר שהוא מאפשר את כל הפעולות ומודיע עליהן בלוג.

  16. 06:56

    זה get enforce, אני רואה שהמצב הוא permissive. ואם אני אסתכל במה שאני רואה דרך ה-ftp, אני אראה שאני רואה פה בעצם את כל התיקיות שנמצאות ב-slash על המערכת.

  17. 07:24

    עכשיו שימו לב, אני הולך להפעיל את ה-se Linux. אוקיי, set enforcing, אוקיי, עובר ל-ftp, task manager, עובר ל-ftp, אני עושה פה refresh, ושימו לב, כמות התיקיות שלי הצטמצמה משמעותית, למשל אני לא אראה פה את תיקיית הבוט לדוגמה, ועוד כמה תיקיות שאסור לי להיכנס אליהן למערכת.

  18. 08:00

    יחד עם זאת, שימו לב שאם אני אכנס דרך הפוטי למערכת, אני אכנס לסרבר 1, אכנס בתור היוזר של FTP, FTP יוזר 1, אוקיי?

  19. 08:23

    אז אני אוכל לעשות cd/boot ולראות את הקבצים שיש בפנים. עכשיו, אני יכול לראות אותם, ויחד עם זאת, דרך ה-FTP, התיקייה הזאתי של בוט היא פשוט לא נראית ולא זמינה לי.

  20. 08:49

    אם אני אבטל את ה-SE לינוקס, אשים אותו במצב פרמיסיב, אוקיי? ואני אסתכל על הלוג, אני אעשה tail שיציג לי את השורות האחרונות ומינוס F שימשיך לרענן ולקרוא את הקובץ על var log audit audit.log אני אסתכל על התוכן של הלוג כאשר ה-SE לינוקס במצב פרמיסיב ועכשיו אני ארענן פה את התקייה, אוקיי?

  21. 09:30

    אני רואה שבעצם נוצרות לי פה הודעות אזהרה כיוון שSE Linux הוא עדיין פעיל, יחד עם זאת הוא במצב פרמיסיב, כלומר הוא כן יאפשר את הפעולות האלה. אז נוצרות לי פה בעצם אזהרות שאומרות איזה פעולות הן נעשות שהפוליסה של ה-SE Linux אוסרת עליהן.

  22. 09:51

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

  23. 10:29

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

  24. 10:56

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

  25. 11:22

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

  26. 11:53

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

  27. 12:20

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

  28. 12:53

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

  29. 13:10

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

  30. 13:59

    אומרת מה תפקיד אותו קובץ במערכת או מה תפקיד אותו פרוסס. למשל עכשיו אני בתוך תיקיית הבית של רות, אני רוצה ls מינוס l ואפשרות z גדולה, היא בעצם תגרום לls להציג את התווית של ה-se-linux שמוצמדת לקבצים.

  31. 14:24

    למשל, אני רואה כאן, רגע, ls רגיל, כדי שתראו את הרשימה של הקבצים שיש לי, ועכשיו אני אעשה ls מינוס lz, אני רואה למשל שיש לי פה קובץ אינדקס html שהתוכן שלו הוא בעצם אובייקט מסוג admin home t, וזה בעצם אומר שזה אובייקט וההקשר שלו במערכת

  32. 14:55

    הזאתי הוא קובץ תוכן שנמצא בספריית הבית של רות. למשל אם אני אכנס לספריית בית של היוזר שעצרנו cd/home/ftpuser1 אני אעשה ls-lz אוקיי, אני אראה שפה בעצם נמצאים קבצים שהתוכן שלהם הוא מסוג User Home.

  33. 15:28

    אם אני אכנס לתוך תיקייה של HTTP ששם נמצא התוכן שבעצם מוגש ל-Web, למשל cd/hvarwww.html זאת התיקייה הדפולטית, ברירת מחדל שבה נמצא התוכן של השרת Web זה ls מינוס lz, אני אראה כאן שהתוכן הוא מסוג HTTP d-System Content.

  34. 16:07

    עכשיו, אם אנחנו מסתכלים על הפרוססים ונריץ ps מינוס ef עם האות הגדולה z אנחנו נראה בעצם את התוויות שמוצמדות על התהליכים, אוקיי?

  35. 16:23

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

  36. 16:51

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

  37. 17:24

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

  38. 17:49

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

  39. 18:28

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

  40. 18:57

    ואם עכשיו אנחנו נסתכל על קובץ האודיט ונסתכל שם על השגיאות שיש var log audit log, אנחנו בעצם נראה שיש לנו הודעה שבעצם תוכן

לקורס המלא: קורס לינוקס מתקדם אונליין

ההרצאה הקודמת: שיטות אחרות לחסימת פורטים בלינוקס

ההרצאה הבאה: הגדרת FirewallD

קורסים נוספים במסלול

  • קורס AWS - ניהול מכונה וירטואלית בענן
  • קורס Terraform - DevOps - Azure & AWS
  • קורס קוברנטיקס - Kubernetes
  • קורס Docker - עם Swarm Cluster
  • קורס DevOps - Ansible
  • קורס PowerShell