Οι ιδιωτικές ομάδες χρηστών (UPGs) είναι μια διαμόρφωση συστήματος που επιτρέπει σε πολλούς χρήστες ενός συστήματος να συνεργάζονται σε αρχεία χωρίς καμία ταλαιπωρία στην ρύθμιση αδειών χρήσης. Ας δούμε πιο αναλυτικά τα User Private Groups στο Linux.

Εισαγωγή

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

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

πηγή: id – Linux manual page

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

Advertisements

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

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

Όταν ένα πρόγραμμα φτιάξει ένα αρχείο αυτό θα έχει κάποιες δυνατότητες πρόσβασης. Το umask είναι μια τιμή που περιγραφεί ποιες θα είναι αυτές. Μπορούμε να δούμε ή να αλλάξουμε αυτή την τιμή με την εντολή umask. Τεχνικά η umask είναι μια ενσωματωμένη εντολή του κελύφους. Για να δούμε την βοήθεια στο τερματικό ένα έχουμε Bash δίνουμε: help umask

Πηγή : Τι είναι το umask

Η τιμή 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 που ως γνωστόν κάνει ότι θέλει .

Advertisements

Με 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.

Επίλογος UPG

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

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

Παραπομπές: