Μάθε παιδί μου Linux (μέρος 8) | Άδειες φακέλων, αρχείων και διεργασιών
Στο προηγούμενό μας άρθρο μάθαμε για το ρόλο των χρηστών και των ομάδων στο Linux. Όπως είπαμε υπάρχουν απλά και μόνο για να μπορεί το λειτουργικό σύστημα
να μοιράζει πρόσβαση και άδειες στα αρχεία, τους φακέλους και τους πόρους του.
Σήμερα θα το πάμε ένα βήμα παραπέρα και θα δούμε με τι μοιάζουν αυτές οι
άδειες, πού μπορούμε να τις βρούμε και πώς να τις διαχειριστούμε.
Αν μπορούσαμε να δώσουμε μια πολύ απλή ορολογία, οι άδειες ορίζουν στην ουσία
ποιοι χρήστες ή ποιες ομάδες μπορούν να διαβάσουν, να επεξεργαστούν ή να
εκτελέσουν ένα αρχείο ή φάκελο. Ας δούμε λοιπόν ένα παράδειγμα για να μπούμε
άμεσα στο νόημα. Για να δούμε τις ιδιότητες του φακέλου "Documents" θα δώσουμε
την εντολή:
ls -ld Documents/
Το τερματικό θα μας επιτρέψει κάτι που μοιάζει με το εξής:
drwxr-xr-- 1 chris admins 4096 Sep 9 12:18 Documents/
Από αυτή τη σειρά πληροφοριών μαθαίνουμε ότι:
- οι άδειες του συγκεκριμένου φακέλου είναι "drwxr-xr--",
- ο φάκελος ανήκει στο χρήστη "chris" και
- σε αυτόν έχουν πρόσβαση όσοι χρήστες είναι μέλη του group "admins".
Το κομμάτι των αδειών μας δίνει στην ουσία τέσσερις διαφορετικές πληροφορίες,
τις οποίες θα μπορούσαμε να διαχωρίσουμε ως εξής:
d rwx r-x r--
Tο "d" (εκ του "directory") σημαίνει ότι το αντικείμενο το οποίο ελέγχουμε
είναι φάκελος. Αν ήταν αρχείο τότε στη θέση του θα βλέπαμε το σύμβολο "-". Τα
υπόλοιπα τρία μέρη είναι με τη σειρά οι άδειες χρήστη / ιδιοκτήτη (user
permissions), οι άδειες ομάδας (group permissions) και οι λοιπές άδειες (other
permissions). Τέλος τα σύμβολα που βλέπουμε αντιπροσωπεύουν τις εξής
λειτουργίες:
- "r" (εκ του "read"): το αρχείο / φάκελος μπορεί να ανοιχτεί και να διαβαστεί
- "w" (εκ του "write"): το αρχείο / φάκελος μπορεί να υποστεί επεξεργασία
- "x" (εκ του "execute"): το αρχείο / φάκελος μπορεί να εκτελεστεί ως πρόγραμμα
Διαφήμιση
Επεξεργασία αδειών σε αρχεία και φακέλους
Είναι πολύ σημαντικό να γνωρίζουμε πώς μπορούμε να επεξεργαστούμε αυτές τις
άδειες, κάτι που χρησιμεύει όταν θέλουμε να μοιραστούμε αρχεία και φακέλους με
άλλους χρήστες ή να προστατεύσουμε σημεία του συστήματος. Η επεξεργασία τους
γίνεται με την εντολή "chmod" (εκ του "change mode") και υπάρχουν δύο τρόποι
για να τη χρησιμοποιήσουμε, ένας συμβολικός και ένας αριθμητικός.
Ξεκινάμε πρώτα από το συμβολικό. Ας πούμε ότι έχουμε το αρχείο "trendy" και
θέλουμε να δώσουμε άδεια εκτέλεσης στο χρήστη μας. Η εντολή είναι η εξής:
chmod u+x trendy
Σημείωση:
Βλέπουμε ότι χρησιμοποιήσαμε το "u+x", το οποίο και λογικά αν το σκεφτείς
σημαίνει ότι στον χρήστη ("u" εκ του "user") θα προστεθεί (+) η άδεια
εκτέλεσης (x) του αρχείου. Εύκολο!
Αν θέλουμε τώρα να αφαιρέσουμε την άδεια ανάγνωσης από την ομάδα στην οποία
ανήκει το αρχείο "trendy", θα δώσουμε το εξής:
chmod g-r trendy
Σημείωση:
Εδώ το "g-r" σημαίνει αντίστοιχα ότι στην ομάδα ("g" εκ του "group") θα
αφαιρεθεί (-) η άδεια ανάγνωσης (r).
Μπορούμε τέλος να χρησιμοποιήσουμε τα παραπάνω και συνδυαστικά. Για παράδειγμα
για να προσθέσουμε την άδεια επεξεργασίας στο χρήση αλλά και στην ομάδα, η
εντολή είναι η εξής:
chmod ug+w trendy
Υπάρχει όπως είπαμε και η αριθμητική μέθοδος η οποία χρησιμοποιείται
περισσότερο από τους χρήστες του τερματικού, γιατί μπορεί να τα κάνει όλα με
μία πολύ απλή εντολή! Εδώ στη θέση των συμβόλων "rwx" θα χρησιμοποιήσουμε
αριθμούς αλλά θα πρέπει να αποστηθίσουμε ότι:
- ο αριθμός 4 είναι η άδεια ανάγνωσης ("r", read permission),
- το 2 είναι η άδεια επεξεργασίας ("w", write permission) και
- το 1 είναι η άδεια εκτέλεσης ("x", execute permission).
Αν λοιπόν για το αρχείο "trendy" θέλουμε να δώσουμε άδεια ανάγνωσης στο
χρήστη, άδεια επεξεργασίας στην ομάδα και άδεια εκτέλεσης στους υπόλοιπους
χρήστες, η εντολή θα είναι η εξής:
chmod 421 trendy
Μπορούμε όμως να κάνουμε και συνδυασμούς προσθέτοντας τους αριθμούς μας! Εκτός
δηλαδή από τα 1,2,4 μπορούμε να χρησιμοποιήσουμε και τα 5,6,7 τα οποία
ανταποκρίνονται στα εξής:
- το 5 (4+1) είναι η άδεια ανάγνωσης και εκτέλεσης,
- το 6 (4+2) είναι η άδεια ανάγνωσης και επεξεργασίας και
- το 7 (4+2+1) είναι η άδεια ανάγνωσης, επεξεργασίας και εκτέλεσης.
Για παράδειγμα ένας πολύ κλασικός συνδυασμός που βλέπουμε κατά κόρον στο Linux
σύστημα είναι ο εξής:
chmod 755 trendy
Με το "755" (rwxr-xr-x) δώσαμε άδεια ανάγνωσης, επεξεργασίας και εκτέλεσης στο
χρήστη (7), ενώ η ομάδα και οι υπόλοιποι χρήστες έχουν άδεια ανάγνωσης και
εκτέλεσης (5) για το αρχείο "trendy". Στην πραγματικότητα δε χρειάζεται να μάθουμε μεμονωμένα τους αριθμούς, αλλά
τους συνδυασμούς, με τους σημαντικότερους να είναι οι εξής:
- "777" (rwxrwxrwx) - Οποιοσδήποτε μπορεί να διαβάσει, επεξεργαστεί, εκτελέσει το αρχείο. Εννοείται ότι κάτι τέτοιο αποτελεί πρόβλημα για την ασφάλεια του υπολογιστή μας, ειδικά αν το εφαρμόσουμε σε αρχεία συστήματος.
- 700 (rwx------) - Μόνο ο χρήστης έχει άδεια ανάγνωσης, επεξεργασίας, εκτέλεσης. Είναι χρήσιμο για προγράμματα που θέλουμε μόνο εμείς να εκτελούμε, όπως για παράδειγμα τα δικά μας script.
- 666 (rw-rw-rw-) - Οι πάντες έχουν άδεια ανάγνωσης και επεξεργασίας, αλλά όχι εκτέλεσης.
- 644 (rw-r--r--) - Ο χρήστης μπορεί να διαβάσει και να επεξεργαστεί το αρχείο, ενώ όλοι οι υπόλοιποι μπορούν μόνο να το διαβάσουν. Χρήσιμο για αρχεία τα οποία θέλουμε να μοιραστούμε με άλλους αλλά να μην τους επιτρέψουμε να τα επεξεργαστούν.
- 600 (rw-------) - Ο χρήστης μπορεί να διαβάσει και να επεξεργαστεί το αρχείο, ενώ όλοι οι υπόλοιποι δεν έχουν καμία πρόσβαση. Πολύ χρήσιμο για αρχεία με ευαίσθητα προσωπικά δεδομένα.
Διαφήμιση
Αλλαγή ιδιοκτησίας αρχείων και φακέλων
Είπαμε στην αρχή ότι ο χρήστης ο οποίος αναφέρεται στις ιδιότητες του αρχείου
που εξετάζουμε είναι και ο ιδιοκτήτης του. Το ίδιο φυσικά ισχύει και για την
ομάδα. Πώς μπορούμε λοιπόν να μεταφέρουμε την ιδιοκτησία των αρχείων ή των
φακέλων μας σε άλλο χρήστη και άλλη ομάδα; Η απάντηση είναι το "chown" (εκ του
"change owner") και το "chgrp" (εκ του "change group").
Για να δώσουμε λοιπόν την ιδιοκτησία του αρχείου "trendy" στο χρήστη "mitsos",
θα δώσουμε την εντολή:
sudo chown mitsos trendy
Αντίστοιχα για να μεταφέρουμε την ιδιοκτησία του φακέλου "Documents" στην
ομάδα "hackers", θα δώσουμε την εντολή:
sudo chgrp hackers Documents
Εννοείται ότι μπορούμε να μεταφέρουμε και ταυτόχρονα την ιδιοκτησία ενός
αρχείου σε ένα χρήστη ή μία ομάδα. Για παράδειγμα:
sudo chown mitsos:hackers trendy
Προεπιλεγμένες άδειες συστήματος Linux
Για την εξυπηρέτησή μας το σύστημα δίνει ένα προεπιλεγμένο σετ αδειών σε κάθε
νέο αρχείο ή φάκελο που δημιουργούμε. Συνήθως αυτό το σετ είναι το "022" ή
"0022" και μπορούμε να το δούμε δίνοντας την εντολή:
umask
To "022" σημαίνει ότι σε όλα τα αρχεία που δημιουργούνται, ο χρήστης έχει όλες
τις άδειες, ενώ η ομάδα και οι υπόλοιποι έχουν άδεια για ανάγνωση και
εκτέλεση. Αυτό όμως είναι ακριβώς το ίδιο με το "755" που είδαμε νωρίτερα!
Γιατί λοιπόν ο αριθμός είναι διαφορετικός; Ο λόγος είναι γιατί το "umask" μας
δείχνει ποιες άδειες έχουν αφαιρεθεί από το αρχείο ή το φάκελό μας. Συγκεκριμένα:
- ο αριθμός 0 μας λέει ότι δεν έχει αφαιρεθεί καμία άδεια,
- το 2 μας λέει ότι έχει αφαιρεθεί η άδεια επεξεργασίας και
- το 1 μας λέει ότι έχει αφαιρεθεί η άδεια εκτέλεσης.
Αν θέλουμε λοιπόν τα νέα αρχεία που θα δημιουργήσουμε από εδώ και στο εξής να
έχουν διαφορετικά δικαιώματα από τα προεπιλεγμένα, αρκεί να δώσουμε το "umask"
και στη συνέχεια τους αριθμούς που θέλουμε. Για παράδειγμα:
umask 021
Αυτό όμως θα ισχύει μόνο για τη συγκεκριμένη συνεδρία του τερματικού. Για να
κάνουμε μόνιμες τις νέες προεπιλεγμένες άδειες θα πρέπει να προσθέσουμε την εντολή στο αρχείο "/etc/profile" ή το "/.bashrc".
Άδειες προγραμμάτων και ειδικές περιπτώσεις
Τα προγράμματα / διεργασίες που τρέχουν στον υπολογιστή μας έχουν και αυτά ιδιοκτησία και
άδειες. Στην ουσία κληρονομούν τις άδειες του χρήστη που εκτέλεσε το
πρόγραμμα, οι οποίες προβάλλονται με το "user ID" (UID) του χρήστη. Μιλήσαμε
για τα UID στο άρθρο για τους χρήστες.
Αν για παράδειγμα ο χρήστης "chris" χρησιμοποιήσει ένα πρόγραμμα σαν το
"touch", το πρόγραμμα θα τρέχει στο όνομά του και όλα τα αρχεία που θα
δημιουργηθούν με αυτό θα έχουν επίσης τη δική του ιδιοκτησία. Η συγκεκριμένη
διεργασία λοιπόν θα πάρει το UID του "chris" ("effective UID").
Υπάρχουν και κάποιες ειδικές περιπτώσεις στις οποίες οι χρήστες χρειάζονται
αυξημένες άδειες συστήματος, χωρίς όμως να γνωρίζουν τον κωδικό του "root" για
να τις αποκτήσουν. Για παράδειγμα αν ο "chris" τρέξει το πρόγραμμα "passwd"
για να αλλάξει τον κωδικό πρόσβασης του λογαριασμού του, το "effective UID"
της διεργασίας θα είναι αυτό του χρήστη "root" και όχι το δικό του! Αυτό
συμβαίνει γιατί με τις αλλαγές που κάνουμε με το "passwd", επεξεργαζόμαστε
στην ουσία το αρχείο "shadow" στο οποίο μόνο ο "root" έχει πρόσβαση.
Αν όμως το "passwd" τρέχει με την άδεια του "root", γιατί δεν μπορούμε να
αλλάξουμε τον κωδικό άλλων χρηστών; Ο λόγος είναι γιατί η διεργασία γνωρίζει
το πραγματικό UID του "chris" ("saved UID").
Για να δούμε λοιπόν τι συμβαίνει με αυτή την περίπτωση, ας ρίξουμε μια ματιά
στις ιδιότητες της εφαρμογής "passwd" με την εντολή:
ls -la /usr/bin/passwd
Το τερματικό θα μας επιστρέψει το εξής:
-rwsr-xr-x 1 root root 59640 Mar 22 2019 /usr/bin/passwd
Στο σημείο που αφορά τις άδειες της ομάδας (sr-x), περιλαμβάνεται το "s" το
οποίο είναι η άδεια "SUID" (εκ του "Set owner User ID"). Αυτό είναι που
επιτρέπει στα μέλη της ομάδας (δηλαδή στον "chris") να διαβάζουν και να
εκτελούν το συγκεκριμένο αρχείο με την άδεια που έχει ο ιδιοκτήτης του (δηλαδή
ο "root").
Για να προσθέσουμε την άδεια SUID σε οποιοδήποτε αρχείο (π.χ. "trendy"), μπορούμε να
χρησιμοποιήσουμε το συμβολικό τρόπο (u+s):
sudo chmod u+s trendy
αλλά και τον αριθμητικό (4):
sudo chmod 4755 trendy
Παρόμοια περίπτωση με το "SUID" είναι και το "SGID" ("Set owner Group ID"), το
οποίο προσθέτει ακριβώς την ίδια άδεια αλλά σε επίπεδο ομάδας. Μπορεί να
προστεθεί συμβολικά (g+s):
sudo chmod g+s trendy
αλλά και αριθμητικά (2):
sudo chmod 2555 trendy
Πάμε και στην τελευταία ειδική άδεια που θα δούμε σήμερα, η οποία μας
επιτρέπει να "καρφιτσώσουμε" ένα αρχείο ή έναν φάκελο, για να μην μπορεί να το
διαγράψει κανείς! Ένας από αυτούς του φακέλους που δε διαγράφονται στο Linux
είναι ο "tmp". Ας δούμε τις ιδιότητές του με την εντολή:
ls -ld /tmp
Το τερματικό θα μας επιστρέψει το εξής:
drwxrwxrwxt 1 root root 4096 Sep 15 14:36 /tmp
Στο συγκεκριμένο σετ αδειών βλέπουμε ότι οι πάντες μπορούν να διαβάσουν,
επεξεργαστούν, εκτελέσουν τα περιεχόμενα του φακέλου, αλλά με το γράμμα "t"
δηλώνουμε ότι μόνο ο ιδιοκτήτης (δηλαδή ο "root") μπορεί να τον διαγράψει.
Μπορούμε να προσθέσουμε συμβολικά (+t) τη συγκεκριμένη άδεια σε ένα φάκελο:
sudo chmod +t Documents
αλλά και αριθμητικά (1) με την εντολή:
sudo chmod 1755 Documents
Εν κατακλείδι
Αυτά ήταν όλα για τις άδειες και τα δικαιώματα των χρηστών επάνω στα αρχεία
και τους φακέλους στο Linux! Από όλα όσα είδαμε αξίζει στην ουσία να μπορούμε
να διαβάζουμε και να καταλαβαίνουμε τα σετ αδειών (π.χ. -rwsr-xr-x), όπως επίσης να μάθουμε πώς κάνουμε αλλαγές με τον αριθμητικό τρόπο (π.χ. chmod 755).
Το άρθρο είναι μέρος της σειράς "Μάθε παιδί μου Linux". Δείτε επίσης:
Σχόλια
Δημοσίευση σχολίου
Πες την άποψή σου ή κάνε την ερώτησή σου ελεύθερα, ακολουθώντας όμως τους στοιχειώδεις κανόνες ευγένειας.