Οι λίστες ελέγχου πρόσβασης ή access control lists ή acl επεκτείνουν το μοντέλο, δικαιωμάτων στα αρχεία και φακέλους, ώστε να μπορεί να καλύψει κάθε ανάγκη. Με αυτές μπορούμε να δώσουμε επιπλέον δικαιώματα σε κάθε χρήστη η ομάδα για κάθε αρχείο η κατάλογο.

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

Ο λίστες πρόσβασης ή access control lists ή acl όπως είπαμε επεκτείνουν το μοντέλο, ώστε να μπορεί να καλύψει κάθε ανάγκη. Με αυτές μπορούμε να δώσουμε επιπλέον δικαιώματα σε κάθε χρήστη η ομάδα για κάθε αρχείο η φάκελο.

Advertisements

Γραφική διαχείριση των ACL με το eiciel

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

να προσθέσουμε, αφαιρέσουμε ή αλλάξουμε τις καταχωρήσεις

Πολύ εύκολο αλλά τι βλέπουμε στην εικόνα ακριβώς; Ας το ψάξουμε λίγο βαθύτερα.

Οι τύποι των καταχωρήσεων

Κάθε αρχείο η κατάλογος έχει μια σειρά από καταχωρήσεις acl. Κάθε καταχώρηση έχει μια ετικέτα, ένα προαιρετικό προσδιοριστικό και μια σειρά δικαιωμάτων. Ας δούμε ένα παράδειγμα:

Α/ΑΕτικέταΠροσδιοριστικόΔικαιώματα
0ACL_USER_OBJ‘rwx’
1ACL_USR1003 (mitsos)‘r–‘
2ACL_USR1006 (natasha)‘rwx’
3ACL_GROUP_OBJ‘rwx’
4ACL_GRP102 (illumninati)‘rwx’
5ACL_GRP105 (istari)‘r–‘
6ACL_MASK‘rw-‘
7ACL_OTHER‘r–‘
Ένα παράδειγμα λίστας ACL

Τα ACL_USER_OBJ, ACL_USER_OBJ, ACL_OTHER, αντιστοιχούν στα παραδοσιακά δικαιώματα όπως τα ξέρουμε από την εντολή chmod.

Έχουμε τα δικαιώματα για τον χρήστη στον οποίο ανήκει το αρχείο (ή ο φάκελος), για την κύρια ομάδα του και για τους υπόλοιπους. Δηλαδή στο παράδειγμα θα έχουμε rwx rwx r--. Αυτές οι ετικέτες υπάρχουν πάντα μια μόνο φορά.

Έχουμε επίσης επιπλέον καταχωρήσεις, όσες θέλουμε για άλλους χρήστες και ομάδες. Στο παράδειγμα ο χρήστης mitsos με uid 1003 έχει δικαιώματα ανάγνωσης, όπως και κάθε μέλος της ομάδας istari με gid 105. Είναι μάλλον προφανές πως κάθε χρήστης ή κάθε ομάδα μπορεί να
έχει μόνο μια καταχώρηση.

Η ετικέτα ACL_MASK προσδιορίζει τα μέγιστα δικαιώματα που μπορεί να αποκτήσει το αρχείο (ή ο φάκελος) από τις καταχωρήσεις 1 έως και 5. Αν υπάρχει έστω και ένα ACL_USR ή ACL_GRP θα πρέπει υποχρεωτικά να υπάρχει. Έχει ρόλο αντίστοιχο με το umask.

  • Στην λίστα υπάρχει καταχωρημένος ο αριθμός και όχι το όνομα του χρήστη ή της ομάδας.
  • Το πλήθος των καταχωρήσεων εξαρτάτε από τους περιορισμούς που θέτει το κάθε σύστημα αρχείων.
  • Οι επιπλέον καταχωρήσεις πέραν των βασικών αποθηκεύονται σαν extended file attributes.

Όταν φτιάχνουμε ένα αρχείο η ένα κατάλογο αυτό θα κληρονομήσει κάποιες ιδιότητες πρόσβασης. Έχουμε δυο περιπτώσεις:

  • Αν ο πατρικός κατάλογος έχει acl θα κληρονομήσει αυτές τις ιδιότητες αρχικά και στην συνέχεια θα αφαιρεθούν όσες δεν ζητήσαμε να έχει. (Όταν φτιάχνουμε ένα αρχείο η φάκελο προσδιορίζουμε επίσης τις ιδιότητες πρόσβασης πχ creat, mkdir).
  • Αν ο πατρικός κατάλογος δεν έχει acl θα χρησιμοποιηθεί ο μηχανισμός του umask.
  • Για τις λεπτομέρειες του αλγορίθμου με τον οποίο καθορίζονται οι τελικές ιδιότητες δείτε το manual του acl αν και δεν υπάρχουν εκπλήξεις.

Χρήστη των acl από το τερματικό

Υπάρχουν δυο εντολές με τις οποίες διαχειριζόμαστε τις acl ή getfacl και ή setfacl. Με την πρώτη βλέπουμε τι acl έχει ένα αρχείο. Για παράδειγμα

getfacl poetry.txt
# file: poetry.txt
# owner: talos
# group: talos
user::rw-
user:natasha:rw-	#effective:r--
group::rw-		#effective:r--
group:illuminati:rw-    #effective:r--
mask::r-x
other::r--

Εδώ βλέπουμε και πως η ACL_MASK αφαίρεσε το δικαίωμα εγγράφης. Για παράδειγμα οι illuminati ενώ ζητάνε rw- παίρνουν r--. Μιας και το συγκεκριμένο αρχείο έχει επίσης κάποιες εκτεταμένες ιδιότητες, ας δούμε όλες τις καταχωρήσεις που έχει.

getfattr -m - poetry.txt
# file: poetry.txt
system.posix_acl_access
user.poetry.author
user.poetry.title

βλέπουμε πως υπάρχει μια επιπλέον καταχώρηση system.posix_acl_access στον χώρο ονομάτων του συστήματος.

Ας αφαιρέσουμε τώρα όλες τις acl

setfacl -b poetry.txt
# file: poetry.txt
# owner: talos
# group: talos
user::rw-
group::r--
other::r--

Έσβησαν όλλες, ακόμα και αυτες που δεν θέλαμε. Ας τις φτιάξουμε τώρα από το τερματικό

setfacl -m u:natasha:rw-
setfacl -m g::rw-,g:illuminati:rw-,m::r-x poetry.txt
Advertisements

Εντοπισμός με την εντολή ls

H εντολή ls θα προσθέσει ένα + στα δικαιώματα κάθε αρχείου που έχει acl

Έλεγχος και ενεργοποίηση υποστήριξης acl για etx4

Σε μια σύγχρονη διανομή Linux ή υποστήριξη για acl είναι ενεργή. Μπορούμε να ελέγξουμε αν μια κατάτμηση τα υποστηρίζει με την εντολή  tune2fs. Στο παράδειγμα για την /dev/sda2 :

sudo tune2fs -l /dev/sda2
tune2fs 1.45.5 (07-Jan-2020)
...
Filesystem features:      has_journal ext_attr resize_inode dir_index 
   filetype needs_recovery extent 64bit flex_bg sparse_super large_file
   huge_file dir_nlink extra_isize metadata_csum
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
...

Σε περίπτωση που δεν ισχύει αυτό δίνουμε στο τερματικό

tun2fs -o acl /dev/sda2

Σημείωση: Αντί να προσδιορίσουμε τα flag για κάθε κατάτμηση στο αρχείο /etc/fstab είναι καλύτερο να τις προσθέσουμε σαν Default mount options στην κατάτμηση. Ένα όφελος είναι πως μπορούμε έτσι να πάρουμε τον δίσκο και να τον καρφώσουμε σε ένα άλλο μηχάνημα, χωρίς να χρειαστεί να πειράξουμε το /etc/fstab. Όταν φτιάχνουμε κατατμήσεις αυτές θα χρησιμοποιήσουν τις ιδιότητες που ορίζει το αρχείο etc/mke2fs.conf και συνήθως θα έχει ενεργοποιημένη την επιλογή για acl.

Επίλογος | ACL στην πράξη

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

Αλλά με τον παραδοσιακό τρόπο πρέπει να κάνεις χρήση της εντολής sudo κάτι που δεν είναι πάντα δυνατόν και συχνά δεν έχει και νόημα για 2-3 αρχεία. Χρησιμοποιήστε τα λοιπόν, αλλά με μέτρο.

Τέλος, τα ACL δεν είναι συμβατά με POSIX. Υπήρξε μια προσπάθεια να γίνουν αλλά δεν προχώρησε και έμεινε στο στάδιο του draft. Το NFSv4 έχει υποστήριξη για acl, το ίδιο και η samba. Το πως αλληλεπιδρούν αυτά με την αντίστοιχη δυνατότητα των Windows είναι πέραν των στόχων αυτού του άρθρου.

Παραπομπές: