Ασφαλίστε αρχεία/καταλόγους χρησιμοποιώντας ACL (Λίστες Ελέγχου Πρόσβασης) στο Linux


Ως Διαχειριστής συστήματος, η πρώτη μας προτεραιότητα θα είναι η προστασία και η προστασία των δεδομένων από μη εξουσιοδοτημένη πρόσβαση. Όλοι γνωρίζουμε τα δικαιώματα που ορίζουμε χρησιμοποιώντας ορισμένες χρήσιμες εντολές Linux όπως chmod, chown, chgrp… κ.λπ. Ωστόσο, αυτά τα προεπιλεγμένα δικαιώματα Τα σετ έχουν κάποιους περιορισμούς και μερικές φορές μπορεί να μην λειτουργούν σύμφωνα με τις ανάγκες μας. Για παράδειγμα, δεν μπορούμε να ρυθμίσουμε διαφορετικά σύνολα δικαιωμάτων για διαφορετικούς χρήστες στον ίδιο κατάλογο ή αρχείο. Έτσι, εφαρμόστηκαν Λίστες ελέγχου πρόσβασης (ACL).

Ας υποθέσουμε ότι έχετε τρεις χρήστες, tecmint1, tecmint2 και tecmint3. Καθένας που έχει κοινή ομάδα λέει acl. Ο χρήστης tecmint1 θέλει μόνο ο χρήστης tecmint2 να μπορεί να διαβάσει και να πρόσβαση σε αρχεία που ανήκουν στην tecmint1' και κανείς άλλος δεν πρέπει να έχει πρόσβαση σε αυτό.

Το ACLs (Λίστες ελέγχου πρόσβασης) μας επιτρέπει να κάνουμε το ίδιο κόλπο. Αυτά τα ACL μας επιτρέπουν να εκχωρούμε δικαιώματα για χρήστη, ομάδα και οποιαδήποτε ομάδα χρηστών που δεν βρίσκονται στη λίστα ομάδων ενός χρήστη.

Σημείωση: Σύμφωνα με την τεκμηρίωση προϊόντος Redhat, παρέχει υποστήριξη ACL για συστήματα αρχείων ext3 και συστήματα αρχείων εξαγωγής NFS.

Πώς να ελέγξετε την υποστήριξη ACL σε συστήματα Linux

Πριν προχωρήσετε, θα πρέπει να έχετε υποστήριξη για ACL σε τρέχοντα συστήματα αρχείων πυρήνα και προσαρτημένα.

1. Ελέγξτε τον πυρήνα για υποστήριξη ACL

Εκτελέστε την ακόλουθη εντολή για να ελέγξετε την Υποστήριξη ACL για σύστημα αρχείων και την επιλογή POSIX_ACL=Y (αν υπάρχει N αντί για Y, τότε σημαίνει πυρήνας δεν υποστηρίζει ACL και χρειάζεται εκ νέου μεταγλώττιση).

[ ~]# 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. Ελέγξτε τα απαιτούμενα πακέτα

Πριν ξεκινήσετε να παίζετε με ACL, βεβαιωθείτε ότι έχετε εγκαταστήσει τα απαιτούμενα πακέτα. Ακολουθούν τα απαιτούμενα πακέτα που πρέπει να εγκατασταθούν χρησιμοποιώντας yum ή apt-get.

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

3. Ελέγξτε το Mounted File System για υποστήριξη ACL

Τώρα, ελέγξτε το προσαρτημένο σύστημα αρχείων είτε έχει τοποθετηθεί με την επιλογή ACL είτε όχι. Μπορούμε να χρησιμοποιήσουμε την εντολή ‘mount’ για να ελέγξουμε την ίδια όπως φαίνεται παρακάτω.

[ ~]# mount  | grep -i root

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

Αλλά στην περίπτωσή μας δεν δείχνει acl από προεπιλογή. Έτσι, στη συνέχεια έχουμε την επιλογή να επανατοποθετήσουμε ξανά το προσαρτημένο διαμέρισμα χρησιμοποιώντας την επιλογή acl. Ωστόσο, πριν προχωρήσουμε, έχουμε μια άλλη επιλογή για να βεβαιωθούμε ότι το διαμέρισμα έχει τοποθετηθεί με επιλογή acl ή όχι, επειδή για το πρόσφατο σύστημα μπορεί να είναι ενσωματωμένο με την προεπιλεγμένη επιλογή προσάρτησης.

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

Default mount options:    user_xattr acl

Στην παραπάνω έξοδο, μπορείτε να δείτε ότι η προεπιλεγμένη επιλογή προσάρτησης έχει ήδη υποστήριξη για acl. Μια άλλη επιλογή είναι να επανατοποθετήσετε το διαμέρισμα όπως φαίνεται παρακάτω.

[ ~]# mount -o remount,acl /

Στη συνέχεια, προσθέστε την παρακάτω καταχώρηση στο αρχείο '/etc/fstab' για να το κάνετε μόνιμο.

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

Και πάλι, τοποθετήστε ξανά το διαμέρισμα.

[ ~]# mount -o remount  /

4. Για διακομιστή NFS

Σε διακομιστή NFS, εάν το σύστημα αρχείων που εξάγεται από τον διακομιστή NSF υποστηρίζει ACL και τα ACL μπορούν να διαβαστούν από τους πελάτες NFS, τότε τα ACL χρησιμοποιούνται από το σύστημα πελάτη.

Για την απενεργοποίηση των ACL στο κοινόχρηστο στοιχείο NFS, πρέπει να προσθέσετε την επιλογή \no_acl” στο αρχείο '/etc/exportfs' στον διακομιστή NFS. Για να την απενεργοποιήσετε ξανά στην πλευρά πελάτη NSF χρησιμοποιήστε την επιλογή \no_acl” κατά τη διάρκεια της προσάρτησης.

Πώς να εφαρμόσετε την υποστήριξη ACL σε συστήματα Linux

Υπάρχουν δύο τύποι ACL:

  1. Πρόσβαση σε ACL: Τα ACL πρόσβασης χρησιμοποιούνται για τη χορήγηση αδειών σε οποιοδήποτε αρχείο ή κατάλογο.
  2. Προεπιλεγμένα ACL: Τα προεπιλεγμένα ACL χρησιμοποιούνται για τη χορήγηση/ρύθμιση της λίστας ελέγχου πρόσβασης μόνο σε έναν συγκεκριμένο κατάλογο.

Διαφορά μεταξύ Access ACL και Προεπιλεγμένου ACL:

  1. Το προεπιλεγμένο ACL μπορεί να χρησιμοποιηθεί μόνο σε επίπεδο καταλόγου.
  2. Οποιοσδήποτε υποκατάλογος ή αρχείο που δημιουργείται σε αυτόν τον κατάλογο θα κληρονομήσει τα ACL από τον γονικό κατάλογο. Από την άλλη πλευρά, ένα αρχείο κληρονομεί τα προεπιλεγμένα ACL ως ACL πρόσβασης.
  3. Χρησιμοποιούμε το \–d” για τον ορισμό προεπιλεγμένων ACL και τα προεπιλεγμένα ACL είναι προαιρετικά.

Πριν ορίσετε τα προεπιλεγμένα ACL

Για να προσδιορίσετε τα προεπιλεγμένα ACL για ένα συγκεκριμένο αρχείο ή κατάλογο, χρησιμοποιήστε την εντολή «getfacl». Στο παρακάτω παράδειγμα, το getfacl χρησιμοποιείται για τη λήψη των προεπιλεγμένων ACL για έναν φάκελο Music.

[ ~]# 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-
Μετά τη ρύθμιση των προεπιλεγμένων ACL

Για να ορίσετε τα προεπιλεγμένα ACL για ένα συγκεκριμένο αρχείο ή κατάλογο, χρησιμοποιήστε την εντολή «setfacl». Στο παρακάτω παράδειγμα, η εντολή setfacl θα ορίσει νέα ACL (ανάγνωση και εκτέλεση) σε έναν φάκελο Music.

[ ~]# setfacl -m d:o:rx Music/
[ ~]# 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

Πώς να ορίσετε νέα ACL

Χρησιμοποιήστε την εντολή «setfacl» για ρύθμιση ή τροποποίηση σε οποιοδήποτε αρχείο ή κατάλογο. Για παράδειγμα, για να εκχωρήσετε δικαιώματα ανάγνωσης και εγγραφής στον χρήστη tecmint1.

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

Τρόπος προβολής ACL

Χρησιμοποιήστε την εντολή ‘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::---

Πώς να αφαιρέσετε τα ACL

Για την κατάργηση του 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

Ας εφαρμόσουμε τα ACL στα ακόλουθα σενάρια.

Δύο χρήστες (tecmint1 και tecmint2), και οι δύο έχουν κοινή δευτερεύουσα ομάδα με το όνομα «acl». Θα δημιουργήσουμε έναν κατάλογο που ανήκει στον 'tecmint1' και θα παρέχουμε την άδεια ανάγνωσης και εκτέλεσης σε αυτόν τον κατάλογο στον χρήστη 'tecmint2<'.

Βήμα 1: Δημιουργήστε δύο χρήστες και αφαιρέστε τον κωδικό πρόσβασης και από τους δύο

[ ~]# 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: Δημιουργήστε μια ομάδα και χρήστες σε δευτερεύουσα ομάδα.

[ ~]# groupadd acl
[ ~]# usermod -G acl tecmint1
[ ~]# usermod -G acl tecmint2

Βήμα 3: Δημιουργήστε έναν Κατάλογο /tecmint και αλλάξτε την ιδιοκτησία σε tecmint1.

[ ~]# mkdir /tecmint1
[ ~]# chown tecmint1 /tecmint1/
[ ~]# ls -ld /tecmint1/

drwxr-xr-x 2 tecmint1 root 4096 Apr 17 14:46 /tecmint1/
[ ~]# 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.

[ ~]$ su - tecmint1

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

total 4
drwxrwxr-x 2 tecmint1 tecmint1 4096 Apr 17 14:50 example
[ 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» και, στη συνέχεια, προσπαθήστε να αλλάξετε τον κατάλογο και να δείτε τη διαφορά όπως παρακάτω.

[ ~]$ su - tecmint2

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

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

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

Βήμα 7: Τώρα δώστε το δικαίωμα execute στο tecmint2 στο φάκελο example και, στη συνέχεια, χρησιμοποιήστε < Εντολή'cd' για να δείτε το εφέ. Τώρα το ‘tecmint2’ έχει τα δικαιώματα προβολής και αλλαγής καταλόγου, αλλά δεν έχει δικαιώματα για να γράψει οτιδήποτε.

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

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

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

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

touch: cannot touch ‘test’: Permission denied

Σημείωση: Μετά την εφαρμογή του ACL, θα δείτε ένα επιπλέον σύμβολο + για την έξοδο ls –l όπως παρακάτω.

[ tecmint1]# ll

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

Σύνδεσμοι αναφοράς

ACL's Documentation