Για τις ιδιωτικές ομάδες των χρηστών (PUG)

Εισαγωγή

Στο παρελθόν οι χρήστες σε ένα σύστημα UNIX ανήκαν σε μια ομάδα με το όνομα users. Αλλά σε ένα μοντέρνο σύστημα Linux κάθε χρήστης έχει την δική του ομάδα, όπου μόνο αυτός είναι μέλος. Το χαρακτηριστικό αυτό έχει όνομα και το λέμε User Private Groups (UPG).

Ένας χρήστης έχει μόνο μια κύρια ομάδα (που θα την δούμε με την ετικέτα gid), αλλά μπορεί να ανήκει και σε πολλές άλλες. Μπορούμε να δούμε τις ομάδες που ανήκουμε με την εντολή id(1).

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

Το ερώτημα είναι γιατί; Μια ομάδα εξ ορισμού δεν έχει πολλά άτομα;
Ποιο το νόημα να είσαι ομάδα μόνος σου;

Η απάντηση έχει να να κάνει με την αλλαγή του umask από την τιμή 022 στην τιμή 002. Ας δούμε τι είναι αυτό και για πιο σκοπό έγινε αυτή η αλλαγή. Στην πορεία θα καταλάβουμε ίσως λίγο καλύτερα το σύστημα δικαιωμάτων πρόσβασης του UNIX.

Η τιμή 022 επιτρέπει μόνο στον χρήστη που δημιούργησε ένα αρχείο ή ένα κατάλογο να κάνει αλλαγές. Κάτω από αυτό το σχήμα κανένας άλλος δεν θα μπορεί να κάνει αλλαγές ακόμα και αν ανήκουν στην ίδια ομάδα με τον χρήστη. Με το νέο σχήμα δεν υπάρχει λόγος να προστατευτεί από άλλους χρήστες τις ομάδας το αρχείο, μιας και αυτός είναι μόνο ένας :sweat_smile:. Ας το δούμε στην πράξη για να το καταλάβουμε καλύτερα.

Κατάλογοι, έργα και ομάδες

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

image

Ο χρήστης 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 που ως γνωστόν κάνει ότι θέλει :sweat_smile:.

Με umask 002 , PUG και sgid

Ας το κάνουμε τώρα σωστά. Κάθε χρήστης έχει το δικό του PUG και ανήκει σε επιπλέον ομάδες. Το μυστικό είναι στο sgid ή αλλιώς set group id ένα σπέσιαλ δικαίωμα.

Όταν θέτουμε το δικαίωμα sgid σε ένα κατάλογο κάθε νέο αρχείο μέσα στον κατάλογο θα έχει ως ομάδα την ομάδα του καταλόγου, και όχι την κύρια ομάδα του χρήστη που το έφτιαξε. Κάθε καινούργιος φάκελος που θα δημιουργηθεί μέσα του θα έχει ενεργό το sgid.

Άρα αρκεί να θέσει το sgid στον πατρικό κατάλογο πριν φτιάξει τους υποκαταλόγους κάποιος από τον εσωτερικό κύκλο.

sudo chmod g+s /var/www/html

Τα δικαιώματα του '/var/www/html' τώρα θα είναι 'rwx rws r-x'. Και κάθε αρχείο που θα φτιαχτεί θα έχει το σωστό group με δικαιώματα 'rw- rw- r--' και θα μπορούν να γίνουν αλλαγές χωρίς προβλήματα.

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

Εξακολουθούμε όμως να χρειαζόμαστε κάποιον με δυνατότητα sudo για να φτιάξει τους φακέλους, να τους δώσει τα σωστά δικαιώματα και να θέσει το sgid.

Ελπίζω να έγινε κατανοητό γιατί στο σύγχρονο UNIX κάθε χρήστης είναι μια ομάδα από μόνος του. Καταλάβαμε ίσως και λίγο καλύτερα τα δικαιώματα των αρχείων και των καταλόγων. Με αυτόν τον απλό μηχανισμό πολλά πράγματα μπορούν να γίνουν αλλά όχι όλα. Για παράδειγμα δεν είναι δυνατόν ένας χρήστης που δεν ανήκει στην ομάδα να έχει πρόσβαση σε ένα συγκεκριμένο μόνο αρχείο. Σε αυτό μπορεί να βοηθήσει ένα άλλο χαρακτηριστικό τα acess control lists acl(5) που ίσως αξίζει να τους αφιερώσουμε ένα ξεχωριστό άρθρο.