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


Οι λίστες ελέγχου πρόσβασης (γνωστές και ως ACL) είναι μια δυνατότητα του πυρήνα Linux που επιτρέπει τον ορισμό πιο λεπτομερών δικαιωμάτων πρόσβασης για αρχεία και καταλόγους από αυτά που καθορίζονται από τα κανονικά δικαιώματα ugo/rwx.

Για παράδειγμα, τα τυπικά δικαιώματα ugo/rwx δεν επιτρέπουν τον ορισμό διαφορετικών δικαιωμάτων για διαφορετικούς μεμονωμένους χρήστες ή ομάδες. Με τα ACL αυτό είναι σχετικά εύκολο να γίνει, όπως θα δούμε σε αυτό το άρθρο.

Έλεγχος συμβατότητας συστήματος αρχείων με ACL

Για να βεβαιωθείτε ότι τα συστήματα αρχείων σας υποστηρίζουν επί του παρόντος ACL, θα πρέπει να ελέγξετε ότι έχουν προσαρτηθεί χρησιμοποιώντας την επιλογή acl. Για να το κάνουμε αυτό, θα χρησιμοποιήσουμε το tune2fs για συστήματα αρχείων ext2/3/4 όπως υποδεικνύεται παρακάτω. Αντικαταστήστε το /dev/sda1 με τη συσκευή ή το σύστημα αρχείων που θέλετε να ελέγξετε:

tune2fs -l /dev/sda1 | grep "Default mount options:"

Σημείωση: Με το XFS, οι λίστες ελέγχου πρόσβασης υποστηρίζονται εκτός του πλαισίου.

Στο ακόλουθο σύστημα αρχείων ext4, μπορούμε να δούμε ότι τα ACL έχουν ενεργοποιηθεί για το /dev/xvda2:

tune2fs -l /dev/xvda2 | grep "Default mount options:"

Εάν η παραπάνω εντολή δεν υποδεικνύει ότι το σύστημα αρχείων έχει προσαρτηθεί με υποστήριξη για ACL, πιθανότατα οφείλεται στην ύπαρξη της επιλογής noacl στο /etc/fstab.

Σε αυτήν την περίπτωση, αφαιρέστε το, αποπροσαρτήστε το σύστημα αρχείων και, στη συνέχεια, προσαρτήστε το ξανά ή απλώς επανεκκινήστε το σύστημά σας αφού αποθηκεύσετε τις αλλαγές στο /etc/fstab.

Παρουσιάζοντας τα ACL στο Linux

Για να δείξουμε πώς λειτουργούν τα ACL, θα χρησιμοποιήσουμε μια ομάδα με το όνομα developers και θα προσθέσουμε χρήστες walterwhite και saulgoodman (ναι, είμαι θαυμαστής του Breaking Bad! ) σε αυτό.:

groupadd developers
useradd walterwhite
useradd saulgoodman
usermod -a -G developers walterwhite
usermod -a -G developers saulgoodman

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

id walterwhite
id saulgoodman

Ας δημιουργήσουμε τώρα έναν κατάλογο που ονομάζεται test στο /mnt και ένα αρχείο με το όνομα acl.txt μέσα στο (/mnt/test/acl .txt).

Στη συνέχεια, θα ορίσουμε τον κάτοχο της ομάδας σε προγραμματιστές και θα αλλάξουμε τις προεπιλεγμένες άδειες ugo/rwx αναδρομικά σε 770 (με αποτέλεσμα να παραχωρήσουμε ανάγνωση, εγγραφή και εκτέλεση δικαιώματα που παραχωρούνται τόσο στον κάτοχο όσο και στον κάτοχο της ομάδας του αρχείου):

mkdir /mnt/test
touch /mnt/test/acl.txt
chgrp -R developers /mnt/test
chmod -R 770 /mnt/test

Όπως αναμένεται, μπορείτε να γράψετε στο /mnt/test/acl.txt ως walterwhite ή saulgoodman:

su - walterwhite
echo "My name is Walter White" > /mnt/test/acl.txt
exit
su - saulgoodman
echo "My name is Saul Goodman" >> /mnt/test/acl.txt
exit

Μέχρι εδώ καλά. Ωστόσο, σύντομα θα δούμε πρόβλημα όταν χρειαστεί να παραχωρήσουμε πρόσβαση εγγραφής στο /mnt/test/acl.txt σε άλλον χρήστη που δεν ανήκει στην ομάδα προγραμματιστών.

Τα τυπικά δικαιώματα ugo/rwx θα απαιτούσαν την προσθήκη του νέου χρήστη στην ομάδα προγραμματιστών, αλλά αυτό θα του έδινε τα ίδια δικαιώματα για όλα τα αντικείμενα που ανήκουν στην ομάδα. Αυτό είναι ακριβώς όπου τα ACL είναι χρήσιμα.

Ρύθμιση του ACL στο Linux

Υπάρχουν δύο τύποι ACL: τα ACL πρόσβασης είναι (τα οποία εφαρμόζονται σε ένα αρχείο ή κατάλογο) και τα προεπιλεγμένα (προαιρετικά) ACL, τα οποία μπορούν να εφαρμοστούν μόνο σε έναν κατάλογο .

Εάν τα αρχεία μέσα σε έναν κατάλογο όπου έχει οριστεί ένα προεπιλεγμένο ACL δεν έχουν δικό τους ACL, κληρονομούν το προεπιλεγμένο ACL του γονικού καταλόγου τους.

Ας δώσουμε στον χρήστη gacanepa πρόσβαση ανάγνωσης και εγγραφής στο /mnt/test/acl.txt. Πριν το κάνουμε αυτό, ας ρίξουμε μια ματιά στις τρέχουσες ρυθμίσεις ACL σε αυτόν τον κατάλογο με:

getfacl /mnt/test/acl.txt

Στη συνέχεια αλλάξτε τα ACL στο αρχείο, χρησιμοποιήστε το u: ακολουθούμενο από το όνομα χρήστη και το :rw για να υποδείξετε τα δικαιώματα ανάγνωσης/εγγραφής:

setfacl -m u:gacanepa:rw /mnt/test/acl.txt

Και εκτελέστε ξανά το getfacl στο αρχείο για σύγκριση. Η παρακάτω εικόνα δείχνει τα "Πριν " και "Μετά ":

getfacl /mnt/test/acl.txt

Στη συνέχεια, θα χρειαστεί να δώσουμε σε άλλους δικαιώματα εκτέλεσης στον κατάλογο /mnt/test:


chmod +x /mnt/test

Λάβετε υπόψη ότι για να έχει πρόσβαση στα περιεχόμενα ενός καταλόγου, ένας κανονικός χρήστης χρειάζεται δικαιώματα εκτέλεσης σε αυτόν τον κατάλογο.

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

echo "My name is Gabriel Cánepa" >> /mnt/test/acl.txt

Για να ορίσετε ένα προεπιλεγμένο ACL σε έναν κατάλογο (τον οποίο τα περιεχόμενά του θα κληρονομήσουν εκτός εάν αντικατασταθεί διαφορετικά), προσθέστε το d: πριν από τον κανόνα και καθορίστε έναν κατάλογο αντί για ένα όνομα αρχείου:

setfacl -m d:o:r /mnt/test
getfacl /mnt/test/

Το παραπάνω ACL θα επιτρέπει στους χρήστες που δεν ανήκουν στην ομάδα κατόχων να έχουν πρόσβαση ανάγνωσης στο μελλοντικό περιεχόμενο του καταλόγου /mnt/test. Σημειώστε τη διαφορά στην έξοδο του getfacl /mnt/test πριν και μετά την αλλαγή:

Για να καταργήσετε ένα συγκεκριμένο ACL, αντικαταστήστε το -m στις παραπάνω εντολές με το -x. Για παράδειγμα,

setfacl -x d:o /mnt/test

Εναλλακτικά, μπορείτε επίσης να χρησιμοποιήσετε την επιλογή -b για να αφαιρέσετε ΟΛΟΥΣ τα ACL σε ένα βήμα:

setfacl -b /mnt/test

Για περισσότερες πληροφορίες και παραδείγματα σχετικά με τη χρήση των ACL, ανατρέξτε στο κεφάλαιο 10, ενότητα 2, του Οδηγού ασφαλείας openSUSE (επίσης διαθέσιμο για λήψη χωρίς κόστος σε μορφή PDF ).

Ορίστε ποσοστώσεις δίσκου Linux σε χρήστες και συστήματα αρχείων

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

Έτσι, τίθεται ένα όριο στη χρήση του δίσκου που επιτρέπεται για έναν συγκεκριμένο χρήστη ή μια συγκεκριμένη ομάδα και μπορείτε να είστε σίγουροι ότι οι δίσκοι σας δεν θα γεμίσουν πλήρως από έναν απρόσεκτο (ή κακόβουλο) χρήστη.

Το πρώτο πράγμα που πρέπει να κάνετε για να ενεργοποιήσετε τα quotas σε ένα σύστημα αρχείων είναι να το προσαρτήσετε με τις επιλογές usrquota ή grpquota (για όρια χρήστη και ομάδας, αντίστοιχα) στο /etc/fstab.

Για παράδειγμα, ας ενεργοποιήσουμε τα όρια βάσει χρήστη στο /dev/vg00/vol_backups και τα όρια που βασίζονται σε ομάδες στο /dev/vg00/vol_projects.

Λάβετε υπόψη ότι το UUID χρησιμοποιείται για την αναγνώριση κάθε συστήματος αρχείων.

UUID=f6d1eba2-9aed-40ea-99ac-75f4be05c05a /home/projects ext4 defaults,grpquota 0 0
UUID=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 defaults,usrquota 0 0

Αποπροσάρτηση και επαναπροσάρτηση και των δύο συστημάτων αρχείων:

umount /home/projects
umount /home/backups
mount -o remount /home/projects
mount -o remount /home/backups 

Στη συνέχεια, ελέγξτε ότι οι επιλογές usrquota και grpquota υπάρχουν στην έξοδο του mount (δείτε τονισμένο παρακάτω):

mount | grep vg00

Τέλος, εκτελέστε τις ακόλουθες εντολές για να αρχικοποιήσετε και να ενεργοποιήσετε τα quotas:

quotacheck -avugc
quotaon -vu /home/backups
quotaon -vg /home/projects

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

Ρύθμιση ποσοστώσεων δίσκου Linux

Ας ξεκινήσουμε ορίζοντας ένα ACL στο /home/backups για τον χρήστη gacanepa, το οποίο θα του δώσει δικαιώματα ανάγνωσης, εγγραφής και εκτέλεσης σε αυτόν τον κατάλογο:

setfacl -m u:gacanepa:rwx /home/backups/

Στη συνέχεια με,

edquota -u gacanepa

Θα φτιάξουμε τα μαλακά μπλοκ limit=900 και τα σκληρά limit=1000 (1024 bytes/block * 1000 blocks=1024000 bytes=1 MB ) της χρήσης χώρου στο δίσκο.

Μπορούμε επίσης να βάλουμε ένα όριο 20 και 25 ως περιοριστικά και σκληρά όρια στον αριθμό των αρχείων που μπορεί να δημιουργήσει αυτός ο χρήστης.

Η παραπάνω εντολή θα εκκινήσει το πρόγραμμα επεξεργασίας κειμένου ($EDITOR) με ένα προσωρινό αρχείο όπου μπορούμε να ορίσουμε τα όρια που αναφέρθηκαν προηγουμένως:

Αυτές οι ρυθμίσεις θα προκαλέσουν την εμφάνιση μιας προειδοποίησης στον χρήστη gacanepa όταν έχει φτάσει τα όρια 900 μπλοκ ή 20 ινδών για προεπιλογή περίοδος χάριτος 7 ημερών.

Εάν η κατάσταση υπέρβασης ορίου δεν έχει εξαλειφθεί μέχρι τότε (για παράδειγμα, με την κατάργηση αρχείων), το εύχρηστο όριο θα γίνει το σκληρό όριο και αυτός ο χρήστης δεν θα μπορεί να χρησιμοποιήσει περισσότερο χώρο αποθήκευσης ή να δημιουργήσει περισσότερο αρχεία.

Για δοκιμή, ας ζητήσουμε από τον χρήστη gacanepa να προσπαθήσει να δημιουργήσει ένα κενό αρχείο 2 MB με το όνομα test1 μέσα στο /home/backups:

dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
ls -lh /home/backups/test1

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

Ομοίως, μπορείτε να δημιουργήσετε ένα ACL για τις ομάδες προγραμματιστών, προκειμένου να δώσετε στα μέλη αυτής της ομάδας rwx πρόσβαση στο /home/projects:

setfacl -m g:developers:rwx /home/projects/

Και ορίστε τα όρια ποσοστώσεων με:

edquota -g developers

Ακριβώς όπως κάναμε με τον χρήστη gacanepa νωρίτερα.

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

edquota -t

και ενημέρωση των τιμών στην ενότητα Αποκλεισμός περιόδου χάριτος και Inode περίοδος χάριτος.

Σε αντίθεση με τη χρήση αποκλεισμού ή inode (που ορίζονται βάσει χρήστη ή ομάδας), η περίοδος χάριτος ορίζεται σε όλο το σύστημα.

Για να αναφέρετε ποσοστώσεις, μπορείτε να χρησιμοποιήσετε quota -u [user] ή quota -g [group] για μια γρήγορη λίστα ή repquota -v [/path/to /filesystem] για μια πιο λεπτομερή (περιεκτική) και όμορφα διαμορφωμένη αναφορά.

Φυσικά, θα θέλετε να αντικαταστήσετε τα [χρήστης], [ομάδα] και [/path/to/filesystem] με συγκεκριμένο χρήστη/ονόματα ομάδων και σύστημα αρχείων που θέλετε να ελέγξετε.

Περίληψη

Σε αυτό το άρθρο εξηγήσαμε πώς μπορείτε να ορίσετε Λίστες ελέγχου πρόσβασης και όρια δίσκου για χρήστες και ομάδες. Χρησιμοποιώντας και τα δύο, θα μπορείτε να διαχειριστείτε πιο αποτελεσματικά τα δικαιώματα και τη χρήση του δίσκου.

Εάν θέλετε να μάθετε περισσότερα σχετικά με τις ποσοστώσεις, μπορείτε να ανατρέξετε στο Quota Mini-HowTo στο The Linux Documentation Project.

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