Ο λίστες πρόσβασης
Το παραδοσιακό σχήμα δικαιωμάτων του UNIX επαρκεί για τις ανάγκες των περισσότερων εταιρειών. Συχνά θα πρέπει να εφαρμόσουμε κάποια κόλπα όπως το να έχει κάθε χρήστης την δική του ομάδα ή αλλιώς PUG, αλλά υπάρχουν περιπτώσεις που αυτό δεν επαρκεί.
Ο λίστες πρόσβασης ή access control lists ή acl επεκτείνουν το μοντέλο, ώστε να μπορεί να καλύψει κάθε ανάγκη. Με αυτές μπορούμε να δώσουμε επιπλέων δικαιώματα σε κάθε χρήστη η ομάδα για κάθε αρχείο η κατάλογο.
Γραφική διαχείριση με το eiciel
Με το eiciel
εκτός από τις εκτεταμένες ιδιότητες αρχείων μπορούμε να διαχειριστούμε εύκολα τις λίστες πρόσβασης και να προσθέσουμε, αφαιρέσουμε ή αλλάξουμε τις καταχωρήσεις
Πολύ ευκολο αλλά τι βλέπουμε στιν εικόνα ακριβώς; Ας το ψάξουμε λίγο βαθύτερα.
Οι τύποι των καταχωρήσεων
Κάθε αρχείο η κατάλογος έχει μια σειρά από καταχωρήσεις acl . Κάθε καταχώρηση έχει μια ετικέτα, ένα προαιρετικό προσδιοριστικό και μια σειρά δικαιωμάτων. Ας δούμε ένα παράδειγμα :
Ετικέτα | Προσδιοριστικό | Δικαιώματα | ||
---|---|---|---|---|
ACL_USER_OBJ |
– | 'rwx' |
||
ACL_USR |
1003 (mitsos) | 'r--' |
||
ACL_USR |
1006 (natasha) | 'rwx' |
||
ACL_GROUP_OBJ |
– | 'rwx' |
||
ACL_GRP |
102 (illumninati) | 'rwx' |
||
ACL_GRP |
105 (istari) | 'r--' |
||
ACL_MASK |
– | 'rw-' |
||
ACL_OTHER |
– | 'r--' |
Ένα παράδειγμα λίστας ACL
Ότι είναι με μπλε χρώμα αντιστοιχεί στα παραδοσιακά δικαιώματα όπως τα ξέρουμε από την εντολή chmod(1). Έχουμε τα δικαιώματα για τον χρήστη στον οποίο ανήκει το αρχείο (ή ο κατάλογος), για την κύρια ομάδα του και για τους υπόλοιπους. Δηλαδή στο παράδειγμα θα έχουμε 'rwx rwx r--'
. Αυτές οι ετικέτες υπάρχουν πάντα μια μόνο φορά.
Έχουμε επίσης επιπλέον καταχωρήσεις,όσες θέλουμε [*] για άλλους χρήστες και ομάδες. Στο παράδειγμα ο χρήστης mitsos
με uid 1003 έχει δικαιώματα ανάγνωσης, όπως και κάθε μέλος της ομάδας istari
με gid 105. Είναι μάλλον προφανές πως κάθε χρήστης ή κάθε ομάδα μπορεί να
έχει μόνο μια καταχώρηση.
Η ετικέτα ACL_MASK
προσδιορίζει τα μέγιστα δικαιώματα που μπορεί να αποκτήσει το αρχείο (ή ο κατάλογος) από τις καταχωρήσεις που είναι σημειωμένες με το σύμβολο . Αν υπάρχει έστω και ένα 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
Το αγαπημένο μου 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 είναι πέραν των στόχων αυτού του σημειώματος. Για αρχειοθέτηση και μεταφορά αρχείων ισχύουν αυτά που είπαμε για τις “εκτεταμένες ιδιότητες”. Θα πω ακριβώς τα ίδια ελέγξτε τα εργαλεία σας και ειδοποιήστε τους προγραμματιστές για τυχόν προβλήματα.