Μάθε παιδί μου Linux (μέρος 8) | Άδειες φακέλων, αρχείων και διεργασιών

Linux file permissions

Στο προηγούμενό μας άρθρο μάθαμε για το ρόλο των χρηστών και των ομάδων στο 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"): το αρχείο / φάκελος μπορεί να εκτελεστεί ως πρόγραμμα

Οπότε για να ανακεφαλαιώσουμε με το πρώτο μας παράδειγμα, βλέπουμε ότι στον φάκελο "Documents" ο χρήστης "chris" είναι ο ιδιοκτήτης και έχει δικαίωμα ανάγνωσης, επεξεργασίας και εκτέλεσης, το group "admins" μπορεί να διαβάσει και να εκτελέσει το αρχείο, ενώ όλοι οι υπόλοιποι χρήστες του συστήματος μπορούν απλά να τον διαβάσουν.

Linux folder permissions

Διαφήμιση

Επεξεργασία αδειών σε αρχεία και φακέλους


Είναι πολύ σημαντικό να γνωρίζουμε πώς μπορούμε να επεξεργαστούμε αυτές τις άδειες, κάτι που χρησιμεύει όταν θέλουμε να μοιραστούμε αρχεία και φακέλους με άλλους χρήστες ή να προστατεύσουμε σημεία του συστήματος. Η επεξεργασία τους γίνεται με την εντολή "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".

Linux umask command

Άδειες προγραμμάτων και ειδικές περιπτώσεις 


Τα προγράμματα / διεργασίες που τρέχουν στον υπολογιστή μας έχουν και αυτά ιδιοκτησία και άδειες. Στην ουσία κληρονομούν τις άδειες του χρήστη που εκτέλεσε το πρόγραμμα, οι οποίες προβάλλονται με το "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". Δείτε επίσης:


Σχόλια

Δείτε επίσης...

Android | Γιατί δε θα αγόραζα ποτέ smartphone της OnePlus

Άποψη | Πώς το Facebook και η ανθρώπινη βλακεία καταστρέφουν την ψυχολογία μας και τον κοινωνικό ιστό

Ubuntu Touch 2020 review | Μια πραγματική mobile GNU/Linux διανομή έτοιμη για καθημερινή χρήση

Docker (μέρος 1) | Τι είναι και πώς το εγκαθιστούμε στον υπολογιστή μας;

Google Pixel 4a, OnePlus Nord, iPhone SE | Συγκρίνουμε τα πιο ενδιαφέροντα smartphone του 2020

Home Assistant (μέρος 3) | Πώς δημιουργούμε αυτοματισμούς στο smart home server μας

Android Basics | Τι είναι το ADB, πώς το χρησιμοποιώ και ποιες είναι οι βασικές εντολές του

Android | Περιόρισε την παρακολούθηση των εφαρμογών και κόψε τις διαφημίσεις με το TrackerControl

Μάθε παιδί μου Linux (μέρος 7) | Ο ρόλος των χρηστών και των ομάδων στο Linux