Μια εισαγωγή στα Access Control Lists

Ο λίστες πρόσβασης

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

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

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

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

image

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

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

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

Ετικέτα Προσδιοριστικό Δικαιώματα
ACL_USER_OBJ 'rwx' :one:
:label: ACL_USR 1003 (mitsos) 'r--'
:label: ACL_USR 1006 (natasha) 'rwx'
:label: ACL_GROUP_OBJ 'rwx' :one:
:label: ACL_GRP 102 (illumninati) 'rwx'
:label: ACL_GRP 105 (istari) 'r--'
ACL_MASK 'rw-' :one:
ACL_OTHER 'r--' :one:

Ένα παράδειγμα λίστας ACL

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

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

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

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

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

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

Για τις λεπτομέρειες του αλγορίθμου με τον οποίο καθορίζονται οι τελικές ιδιότητες δείτε
acl(5) αν και δεν υπάρχουν εκπλήξεις.

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

Υπάρχουν δυο εντολές με τις οποίες διαχειριζόμαστε τις acl ή getfacl(1) και ή setfacl(1) . Με την πρώτη βλέπουμε τι 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

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

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

Το αγαπημένο μου lsd που το έχω κάνει alias στην εντολή ls εδώ με έχει προδώσει. Ευτυχώς μπορείς εύκολα να ακυρώσει κάποιο alias προσθέτωντας μπροστά το '\'.

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

Σε μια σύγχρονη διανομή Linux ή υποστήριξη για acl είναι ενεργή. Μπορούμε να ελέγξουμε αν μια κατάτμηση τα υποστηρίζει με την εντολή tune2fs(8). Στο παράδειγμα για την /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

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

Στην πράξη

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

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