Εισαγωγή
Στο παρελθόν οι χρήστες σε ένα σύστημα UNIX ανήκαν σε μια ομάδα με το όνομα users
. Αλλά σε ένα μοντέρνο σύστημα Linux κάθε χρήστης έχει την δική του ομάδα, όπου μόνο αυτός είναι μέλος. Το χαρακτηριστικό αυτό έχει όνομα και το λέμε User Private Groups (UPG).
Ένας χρήστης έχει μόνο μια κύρια ομάδα (που θα την δούμε με την ετικέτα
gid
), αλλά μπορεί να ανήκει και σε πολλές άλλες. Μπορούμε να δούμε τις ομάδες που ανήκουμε με την εντολή id(1).
Ένα UPG θα δημιουργηθεί με όνομα ίδιο με αυτό του χρήστη κάθε φορά που δημιουργείτε ένας χρήστης και ο χρήστης θα προστεθεί σε αυτό σαν το μόνο μέλος.
Το ερώτημα είναι γιατί; Μια ομάδα εξ ορισμού δεν έχει πολλά άτομα;
Ποιο το νόημα να είσαι ομάδα μόνος σου;
Η απάντηση έχει να να κάνει με την αλλαγή του umask
από την τιμή 022 στην τιμή 002. Ας δούμε τι είναι αυτό και για πιο σκοπό έγινε αυτή η αλλαγή. Στην πορεία θα καταλάβουμε ίσως λίγο καλύτερα το σύστημα δικαιωμάτων πρόσβασης του UNIX.
https://linux-user.gr/t/ti-einai-to-umask/2384
Η τιμή 022 επιτρέπει μόνο στον χρήστη που δημιούργησε ένα αρχείο ή ένα κατάλογο να κάνει αλλαγές. Κάτω από αυτό το σχήμα κανένας άλλος δεν θα μπορεί να κάνει αλλαγές ακόμα και αν ανήκουν στην ίδια ομάδα με τον χρήστη. Με το νέο σχήμα δεν υπάρχει λόγος να προστατευτεί από άλλους χρήστες τις ομάδας το αρχείο, μιας και αυτός είναι μόνο ένας . Ας το δούμε στην πράξη για να το καταλάβουμε καλύτερα.
Κατάλογοι, έργα και ομάδες
Σε εγκαταστάσεις με πολλούς χρήστες, έχουμε πολλές ομάδες χρηστών και κάθε ομάδα έχει πρόσβαση και ενδιαφέρετε για κάποια συγκεκριμένα έργα. Σε κάποιον οργανισμό για παράδειγμα έχουμε τα παρακάτω έργα να τρέχουν.
Ο χρήστης mitsos
ανήκει στις ομάδες COVID
και 5G
η natasha
στον 5G
και ο lenard
στο 5G
και στο systemd
μαζί με τον χρήστη lenard
. Δεν θέλουμε κάποιος χρήστης που δεν ανήκει στην ομάδα 5G
να μπορεί να πειράζει τα αρχεία. Επίσης αν ο lenard
φτιάξει ένα αρχείο στο 5G
θα πρέπει να μπορεί να το πειράξει η natasha
. Αλλά ο lenard
και ή natasha
δεν θα πρέπει να μπορούν να πειράξουν και δεν θέλουν να έχουν σχέση με το COVID
. Απλό;
Ας δούμε τώρα τα μυστικά των Illuminati
και πως το θα το καταφέρουν αυτό.
Με umask
022
(ο λάθος τρόπος)
Ένας διαχειριστής συστήματος μέλος του εσωτερικού κύκλου γνωστού σαν sudo
στους μυημένους θα πρέπει να φτιάξει τις ομάδες και τους φακέλους. Ας δούμε πως θα το κάνει :
Πρώτα θα φτιάξει τις ομάδες και θα προσθέσει τους χρήστες
sudo groupadd -g 666 systemd
sudo usermod -a -G 5g natasha
sudo usermod -a -G 5g lenard
Η πληροφορία θα πάει στο αρχείο /etc/group/
που θα περιέχει κάτι σαν το παρακάτω:
systemd:x:666:lenard,natasha covid:x:667:mitsos 5g:x:668:mitsos,natasha
Στην συνέχεια θα φτιάξει τους καταλόγους
sudo mkdir -p /var/www/illuminati/systemd
sudo chown root:web /var/www/illuminati/systemd
sudo chmod 775 /var/www/illuminati/systemd
Ο κατάλογος θα ανήκει στην ομάδα systemd
και θα έχει τα παρακάτω δικαιώματα 'rwx rwx r-x'
.
Ό χρήστης lenard
μια μέρα φτιάχνει το αρχείο '/var/www/illuminati/systemd/systemd-homed.html'
δοκιμάζει και εμφανίζετε κανονικά στην σούπερ απόρρητη τοποθεσία της ομάδας. Αλλά οι “αποπάνω” θέλουν μια αλλαγή και το λένε στην natasha
. Αυτή δεν μπορεί να κάνει τίποτα γιατί τα δικαιώματα είναι '-rw -r-- r--'
. Θα αποτύχει στο έργο της και θα πρέπει να φτιάξει τα δικαιώματα κάποιος απο τον εσωτερικό κύκλο των “διαχειρηστών”.
Με τον τρόπο αυτό κάθε χρήστης που προσθέτει κάτι θα πρέπει να θυμάται κάθε φορά να αλλάζει τα δικαιώματα. Κάτι που δεν ισχύει με τον χρήστη lenard
που ως γνωστόν κάνει ότι θέλει .
Με umask
002
, PUG και sgid
Ας το κάνουμε τώρα σωστά. Κάθε χρήστης έχει το δικό του PUG και ανήκει σε επιπλέον ομάδες. Το μυστικό είναι στο sgid
ή αλλιώς set group id
ένα σπέσιαλ δικαίωμα.
Όταν θέτουμε το δικαίωμα sgid
σε ένα κατάλογο κάθε νέο αρχείο μέσα στον κατάλογο θα έχει ως ομάδα την ομάδα του καταλόγου, και όχι την κύρια ομάδα του χρήστη που το έφτιαξε. Κάθε καινούργιος φάκελος που θα δημιουργηθεί μέσα του θα έχει ενεργό το sgid
.
Άρα αρκεί να θέσει το sgid
στον πατρικό κατάλογο πριν φτιάξει τους υποκαταλόγους κάποιος από τον εσωτερικό κύκλο.
sudo chmod g+s /var/www/html
Τα δικαιώματα του '/var/www/html'
τώρα θα είναι 'rwx rw
s
r-x'
. Και κάθε αρχείο που θα φτιαχτεί θα έχει το σωστό group με δικαιώματα 'rw- rw- r--'
και θα μπορούν να γίνουν αλλαγές χωρίς προβλήματα.
Με τον τρόπο αυτό δεν είναι ανάγκη να τρέχουμε στους διαχειρηστές του εσωτερικού κύκλου κάθε τρις και λίγο. Οι χρήστες σε μια ομάδα μπορούν μόνοι τους να συνεργαστούν.
Εξακολουθούμε όμως να χρειαζόμαστε κάποιον με δυνατότητα
sudo
για να φτιάξει τους φακέλους, να τους δώσει τα σωστά δικαιώματα και να θέσει τοsgid
.
Ελπίζω να έγινε κατανοητό γιατί στο σύγχρονο UNIX κάθε χρήστης είναι μια ομάδα από μόνος του. Καταλάβαμε ίσως και λίγο καλύτερα τα δικαιώματα των αρχείων και των καταλόγων. Με αυτόν τον απλό μηχανισμό πολλά πράγματα μπορούν να γίνουν αλλά όχι όλα. Για παράδειγμα δεν είναι δυνατόν ένας χρήστης που δεν ανήκει στην ομάδα να έχει πρόσβαση σε ένα συγκεκριμένο μόνο αρχείο. Σε αυτό μπορεί να βοηθήσει ένα άλλο χαρακτηριστικό τα acess control lists
acl(5) που ίσως αξίζει να τους αφιερώσουμε ένα ξεχωριστό άρθρο.