קבצים/תיקיות מאובטחות באמצעות ACLs (רשימות שליטה בגישה) ב-Linux

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

Linux Access Control Lists

נניח שיש לך שלושה משתמשים, 'tecmint1', 'tecmint2' ו'tecmint3'. כל אחד בעל קבוצה משותפת כמו 'acl'. המשתמש 'tecmint1' רוצה שרק המשתמש 'tecmint2' יוכל לקרוא ולגשת לקבצים ששייכים ל'tecmint1' ושאף אחד אחר לא יהיה רשאי לגשת לכך.

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

הערה: כפי שמצוין בתיעוד מוצר Redhat, היא מספקת תמיכה ברשימות שליטה בגישה עבור מערכת הקבצים ext3 ומערכות הקבצים שהותרו ב-NFS.

איך לבדוק את התמיכה ברשימות שליטה בגישה במערכות לינוקס

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

1. בדוק את הליבה לתמיכה ברשימות שליטה בגישה

הריץ את הפקודה הבאה כדי לבדוק תמיכת ACL במערכת הקבצים ואפשרות POSIX_ACL=Y (אם יש N במקום Y, אז זה אומר שהקרנל לא תומך ב-ACL וצריך להיערך מחדש).

[root@linux ~]# grep -i acl /boot/config*

CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_GENERIC_ACL=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_CIFS_ACL=y
CONFIG_9P_FS_POSIX_ACL=y

2. בדוק את החבילות הנדרשות

לפני שתתחיל לשחק עם ACLs, וודא שיש לך את החבילות הנדרשות מותקנות. להלן החבילות הנדרשות שצריך להתקין באמצעות yum או apt-get.

[root@linux ~]# yum install nfs4-acl-tools acl libacl		[on RedHat based systems]
[tecmint@linux ~]$ sudo apt-get install nfs4-acl-tools acl	[on Debian based systems]

3. בדוק את מערכת הקבצים שמחוברת ל-ACLs

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

[root@linux ~]# mount  | grep -i root

/dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered)

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

[root@linux ~]# tune2fs -l /dev/mapper/fedora-root | grep acl

Default mount options:    user_xattr acl

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

[root@linux ~]# mount -o remount,acl /

בנוסף, הוסף את הרשומה הבאה לקובץ ‘/etc/fstab’ כדי להפוך אותה לקבועה.

/dev/mapper/fedora-root /	ext4    defaults,acl 1 1

שוב, הרים מחדש את המחיצה.

[root@linux ~]# mount -o remount  /

4. עבור שרת NFS

על שרת NFS, אם מערכת הקבצים שמיוצאת על ידי שרת NFS תומכת ב-ACL ו-ACLs יכולים להיות נקראים על ידי לקוחות NFS, אז ACLs משמשים על ידי מערכת הלקוח.

כדי להשבית את ה-ACLs במשתפת NFS, עליך להוסיף את האפשרות "no_acl" בקובץ '/etc/exportfs' בשרת NFS. כדי להשבית אותו בצד הלקוח של NFS, עליך שוב להשתמש באפשרות "no_acl" בזמן העצמת המערכת.

איך ליישם תמיכה ב-ACL במערכות Linux

ישנם שני סוגי ACLs:

  1. ACLs לגישה: ACLs לגישה משמשים להענקת הרשאות על קובץ או ספרייה כלשהי.
  2. ACLs ברירת מחדל: ACLs ברירת מחדל משמשים להענקה/הגדרת רשימת בקרת גישה על ספרייה ספציפית בלבד.

ההבדל בין ACL לגישה ובין ACL ברירת מחדל:

  1. ACL ברירת מחדל ניתן לשימוש רק על רמת ספרייה.
  2. כל תת-ספרייה או קובץ שנוצר בתוך ספרייה זו יירש את ה-ACLs מהספרייה האב. בנוסף, קובץ יירש את ה-ACLs הברירתיים כ-ACLs של גישה.
  3. אנו משתמשים ב"-d" עבור הגדרת ACLs ברירת מחדל ו-ACLs ברירת מחדל הם אופציונליים.
לפני הגדרת ACLs ברירת מחדל

כדי לקבוע את ה-ACLs הברירתיים עבור קובץ או תיקייה ספציפיים, השתמש בפקודת 'getfacl'. בדוגמה להלן, השתמשנו בפקודת getfacl כדי לקבל את ה-ACLs הברירתיים עבור תיקיית 'Music'.

[root@linux ~]# getfacl Music/

# file: Music/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::rw-
לאחר הגדרת ACLs ברירת מחדל

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

[root@linux ~]# setfacl -m d:o:rx Music/
[root@linux ~]# getfacl Music/
# file: Music/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::r-x

כיצד להגדיר ACLs החדשים

השתמש בפקודת 'setfacl' כדי להגדיר או לשנות על כל קובץ או תיקייה. לדוגמה, כדי להעניק הרשאות קריאה וכתיבה למשתמש 'tecmint1'.

# setfacl -m u:tecmint1:rw /tecmint1/example

כיצד להציג ACLs

השתמש בפקודת 'getfacl' כדי להציג ACL על כל קובץ או תיקייה. לדוגמה, כדי להציג ACL על '/tecmint1/example' השתמש בפקודה הבאה.

# getfacl /tecmint1/example

# file: tecmint1/example/
# owner: tecmint1
# group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---

כיצד להסיר ACLs

כדי להסיר ACL מכל קובץ/תיקייה, אנו משתמשים באפשרויות x ו b כפי שמוצג למטה.

# setfacl -x ACL file/directory  	# remove only specified ACL from file/directory.

# setfacl -b  file/directory   		#removing all ACL from file/direcoty

נפעיל את ACLs על סיטואציות הבאות.

שני משתמשים (tecmint1 ו- tecmint2), שניהם עם קבוצה משנית משותפת בשם 'acl'. ניצור תיקייה אחת ששייכת ל- tecmint1 ונעניק למשתמש tecmint2 את ההרשאה לקריאה ולביצוע בתיקייה זו.

שלב 1: צור שני משתמשים והסר את הסיסמה משניהם

[root@linux ~]# for user in tecmint1 tecmint2

> do
> useradd $user
> passwd -d $user
> done
Removing password for user tecmint1.
passwd: Success
Removing password for user tecmint2.
passwd: Success

שלב 2: צור קבוצה ומשתמשים לקבוצה משנית.

[root@linux ~]# groupadd acl
[root@linux ~]# usermod -G acl tecmint1
[root@linux ~]# usermod -G acl tecmint2

שלב 3: צור תיקייה /tecmint ושנה את בעלותה ל- tecmint1.

[root@linux ~]# mkdir /tecmint1
[root@linux ~]# chown tecmint1 /tecmint1/
[root@linux ~]# ls -ld /tecmint1/

drwxr-xr-x 2 tecmint1 root 4096 Apr 17 14:46 /tecmint1/
[root@linux ~]# getfacl /tecmint1

getfacl: Removing leading '/' from absolute path names
# file: tecmint1
# owner: tecmint1
# group: root
user::rwx
group::r-x
other::r-x

שלב 4: התחבר עם tecmint1 וצור תיקייה בתיקיית /tecmint.

[tecmint@linux ~]$ su - tecmint1

Last login: Thu Apr 17 14:49:16 IST 2014 on pts/4
[tecmint1@linux ~]$ cd /tecmint1/
[tecmint1@linux tecmint1]$ mkdir example
[tecmint1@linux tecmint1]$ ll

total 4
drwxrwxr-x 2 tecmint1 tecmint1 4096 Apr 17 14:50 example
[tecmint1@linux tecmint1]$ whoami 
tecmint1

שלב 5: כעת הגדר ACL באמצעות 'setfacl', כך ש-'tecmint1' יקבל את כל ההרשאות rwx, 'tecmint2' יקבל רק את ההרשאה לקריאה בתיקיית 'example', ואחרים לא יקבלו שום הרשאה.

$ setfacl -m u:tecmint1:rwx example/
$ setfacl -m u:tecmint2:r-- example/
$ setfacl -m  other:--- example/
$ getfacl example/

# file: example
# owner: tecmint1
# group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::r-x
mask::rwx
other::---

שלב 6: עכשיו התחבר עם משתמש אחר, כלומר 'tecmint2', בטרמינל אחר ושנה את התיקייה ל-'tecmint1'. נסה כעת להציג את התוכן באמצעות הפקודה 'ls' ואז תנסה לשנות תיקייה ותראה את ההבדל כמצוין להלן.

[tecmint@linux ~]$ su - tecmint2

Last login: Thu Apr 17 15:03:31 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/
[tecmint2@linux tecmint1]$ ls -lR example/
example/:
total 0
[tecmint2@linux tecmint1]$ cd example/

-bash: cd: example/: Permission denied
[tecmint2@linux tecmint1]$ getfacl example/

# file: example
# owner: tecmint1
# group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---

שלב 7: כעת תן הרשאת 'ביצוע' ל-'tecmint2' על התיקייה 'example' ולאחר מכן השתמש בפקודת 'cd' כדי לראות את ההשפעה. עכשיו 'tecmint2' יש את ההרשאות להציג ולשנות תיקייה, אך אין לו הרשאות לכתיבה.

[tecmint1@linux tecmint1]$ setfacl -m u:tecmint2:r-x example/
[tecmint1@linux tecmint1]$ getfacl example/

# file: example
# owner: tecmint1
# group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r-x
group::rwx
mask::rwx
other::---
[tecmint@linux ~]$ su - tecmint2

Last login: Thu Apr 17 15:09:49 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/
[tecmint2@linux tecmint1]$ cd example/
[tecmint2@linux example]$ getfacl .
[tecmint2@linux example]$ mkdir test

mkdir: cannot create directory ‘test’: Permission denied
[tecmint2@linux example]$ touch test

touch: cannot touch ‘test’: Permission denied

הערה: לאחר יישום ACL, תראה סימן '+' נוסף בפלט של 'ls -l' כפי שמוצג להלן.

[root@linux tecmint1]# ll

total 4
drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example

קישורים להפניות

תיעוד של ACL

Source:
https://www.tecmint.com/secure-files-using-acls-in-linux/