איך להגדיר רשימות בקרת גישה (ACL) וקבוצות כמו גם קבוצות

רשימות בקרת גישה (ידועות גם בשם ACLs) הם תכונה של ליבת ה-Linux שמאפשרת להגדיר זכויות גישה יותר דקות לקבצים ולתיקיות מאשר אלה שצוינו על ידי הרשאות רגילות של ugo/rwx.

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

בדיקת תאימות מערכת הקבצים עם ACLs

כדי לוודא שמערכות הקבצים שלך תומכות כרגע ב-ACLs, עליך לוודא שהן נמוכות באמצעות האפשרות acl. כדי לעשות זאת, נשתמש ב־tune2fs עבור מערכות הקבצים ext2/3/4 כפי שמצויין למטה. החלף /dev/sda1 במכשיר או במערכת הקבצים שברצונך לבדוק:

# tune2fs -l /dev/sda1 | grep "Default mount options:"

הערה: ב-XFS, רשימות בקרת הגישה נתמכות באופן מובנה.

במערכת הקבצים ext4 הבאה, ניתן לראות ש-ACLs הופעלו עבור /dev/xvda2:

# tune2fs -l /dev/xvda2 | grep "Default mount options:"
Check ACL Enabled on Linux Filesystem

אם הפקודה לעיל לא מציינת כי המערכת הועמדה בתמיכה ב-ACLs, יתכן כי זה קשור לאפשרות noacl הנמצאת ב־/etc/fstab.

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

מבוא ל-ACLs ב-Linux

להדגיש איך עובדים ACLs, נשתמש בקבוצה בשם מפתחים ונוסיף משתמשים וולטרווייט ו סול גודמן (כן, אני אוהד של Breaking Bad!) אליה:

# groupadd developers
# useradd walterwhite
# useradd saulgoodman
# usermod -a -G developers walterwhite
# usermod -a -G developers saulgoodman

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

# id walterwhite
# id saulgoodman
Find User ID in Linux

בואו ניצור כעת תיקייה בשם בדיקה בתוך /mnt, וקובץ בשם acl.txt בתוכה (/mnt/test/acl.txt).

אז נקבע את בעל הקבוצה להיות מפתחים ולשנות את ההרשאות המוגדרות כברירת מחדל ugo/rwx לכל הקבצים באופן רקורסיבי להיות 770 (וכך להעניק הרשאות קריאה, כתיבה וביצוע הניתנות לבעל הקובץ ולבעל הקבוצה שלו):

# mkdir /mnt/test
# touch /mnt/test/acl.txt
# chgrp -R developers /mnt/test
# chmod -R 770 /mnt/test

כפי שצפוי, ניתן לכתוב ל /mnt/test/acl.txt כמו וולטרווייט או סול גודמן:

# su - walterwhite
# echo "My name is Walter White" > /mnt/test/acl.txt
# exit
# su - saulgoodman
# echo "My name is Saul Goodman" >> /mnt/test/acl.txt
# exit
Verify ACL Rules on Users

עד כה הכל בסדר. אולם, נראה בקרוב בעיה כאשר יהיה צורך להעניק גישת כתיבה ל /mnt/test/acl.txt למשתמש נוסף שאינו בקבוצת המפתחים.

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

קביעת ACL's ב-Linux

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

אם קבצים בתוך ספרייה שבה נקבע ACL ברירת מחדל אין להם ACL משלהם, הם מורשים לקבל את ה-ACL הברירתי של ספריית ההורים שלהם.

בואו נעצור גישת קריאה וכתיבה למשתמש gacanepa עבור /mnt/test/acl.txt. לפני שנעשה זאת, בואו נבדוק את הגדרות ה-ACL הנוכחיות בספרייה הזו עם:

# getfacl /mnt/test/acl.txt

לאחר מכן, נשנה את ה-ACL על הקובץ, נשתמש ב-u: אחריו שם המשתמש וב-:rw כדי לציין הרשאות קריאה / כתיבה:

# setfacl -m u:gacanepa:rw /mnt/test/acl.txt

ונריץ getfacl על הקובץ שוב כדי להשוות. התמונה הבאה מציגה את ה-"לפני" וה-"אחרי":

# getfacl /mnt/test/acl.txt
Set ACL on Linux Users

בשלב הבא, נצטרך לתת גישות להרצה לאחרים על הספרייה /mnt/test:

# chmod +x /mnt/test

שימו לב שכדי לגשת לתוכן של ספרייה, משתמש רגיל צריך הרשאות להריץ על הספרייה ההיא.

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

# echo "My name is Gabriel Cánepa" >> /mnt/test/acl.txt

כדי להגדיר ACL ברירת מחדל לספרייה (שאליה התוכן שלה יירש מלבד אם יש שינויים מפורטים אחרים), הוסיפו d: לפני הכלל וציינו ספרייה במקום שם קובץ:

# setfacl -m d:o:r /mnt/test
# getfacl /mnt/test/

ה-ACL מעלה יאפשר למשתמשים שאינם בקבוצת הבעלים לקבל גישה לתוכן העתידי של הספרייה /mnt/test. שימו לב להבדל בפלט של getfacl /mnt/test לפני ואחרי השינוי:

Set Default ACL to Linux Directory

כדי להסיר ACL מסוים, החליפו -m בפקודות למעלה ב--x. לדוגמה,

# setfacl -x d:o /mnt/test

באופן אלטרנטיבי, תוכל גם להשתמש באפשרות -b כדי להסיר את כל ACLs בשלב אחד:

# setfacl -b /mnt/test

למידע נוסף ודוגמאות על שימוש ב-ACLs, אנא הפנה ל-פרק 10, סעיף 2, של מדריך האבטחה של openSUSE (זמין גם להורדה בחינם בפורמט PDF).

הגדרת קווטות דיסק של Linux על משתמשים ומערכי קבצים

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

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

הדבר הראשון שעליכם לעשות כדי להפעיל קווטות על מערכת קבצים הוא לעצור אותה עם האפשרויות usrquota או grpquota (עבור קווטות משתמש וקבוצה, בהתאמה) ב-/etc/fstab.

לדוגמה, בואו נפעיל קווטות על בסיס משתמשים על /dev/vg00/vol_backups וקווטות על בסיס קבוצתי על /dev/vg00/vol_projects.

שימו לב ש-UUID משמש לזיהוי של כל מערכת קבצים.

UUID=f6d1eba2-9aed-40ea-99ac-75f4be05c05a /home/projects ext4 defaults,grpquota 0 0
UUID=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 defaults,usrquota 0 0

נתקו והרכיבו מחדש את שתי מערכות הקבצים:

# umount /home/projects
# umount /home/backups
# mount -o remount /home/projects
# mount -o remount /home/backups 

לבסוף, בדקו שהאפשרויות usrquota ו- grpquota נמצאות בפלט של mount (ראו מודגש למטה):

# mount | grep vg00
Check Linux User Quota and Group Quota

לבסוף, הפעילו את הפקודות הבאות כדי לאתחל ולהפעיל קווטות:

# quotacheck -avugc
# quotaon -vu /home/backups
# quotaon -vg /home/projects

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

הגדרת תקרות דיסק בלינוקס

בואו נתחיל בהגדרת ACL על /home/backups למשתמש gacanepa, מה שיתן לו רשות לקרוא, לכתוב ולבצע בתיקייה זו:

# setfacl -m u:gacanepa:rwx /home/backups/

ואז עם,

# edquota -u gacanepa

נקבע את הגבול הרך limit=900 ואת הגבול הקשה limit=1000 ביחידות (1024 בתים/יחידה * 1000 יחידות = 1024000 בתים = 1 מגהבייט) של שימוש במקום בדיסק.

אנו יכולים גם לקבוע גבול של 20 ו-25 כגבולות רך וקשה על מספר הקבצים שהמשתמש הזה יכול ליצור.

הפקודה הנ"ל תפעיל את מערכת העריכה של הטקסט ($EDITOR) עם קובץ זמני שבו נוכל לקבוע את הגבולות שהוזכרו קודם:

Linux Disk Quota For User

ההגדרות הללו יגרמו להפענוח מפנייה למשתמש gacanepa כאשר הוא מגיע לגבול 900-block או 20-inode למשך תקופת זכאות ברירת מחדל של 7 ימים.

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

לבדוק, בואו ננסה במשתמש גקנפה ליצור קובץ ריק 2 מגה בשם test1 בתוך /home/backups:

# dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
# ls -lh /home/backups/test1
Verify Linux User Quota on Disk

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

באופן דומה, ניתן ליצור ACL עבור קבוצות המפתחים כדי לאפשר לחברי הקבוצה גישה rwx ל-/home/projects:

# setfacl -m g:developers:rwx /home/projects/

ולהגביל את תקרת השטח עם:

# edquota -g developers

כפי שעשינו עם המשתמש gacanepa קודם.

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

# edquota -t

ועדכון הערכים תחת תקופת חסד לבלוק ותקופת חסד ל-Inode.

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

כדי לדווח על תקרות, ניתן להשתמש בפקודת quota -u [משתמש] או quota -g [קבוצה] לרשימה מהירה או repquota -v [/נתיב/למערכת הקבצים] לדוח מפורט יותר (מפורט) ומעוצב בצורה נעימה.

כמובן, תרצה להחליף את [משתמש], [קבוצה], ו-[/נתיב/למערכת הקבצים] עם שמות משתמש / קבוצה ספציפיים ומערכת קבצים שברצונך לבדוק.

סיכום

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

אם ברצונך ללמוד עוד על קוטות, תוכל להפנות ל-Quota Mini-HowTo בפרויקט התיעוד של Linux.

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

Source:
https://www.tecmint.com/set-access-control-lists-acls-and-disk-quotas-for-users-groups/