Από Coder σε Engineer
Linux & το Terminal
Εισαγωγή στο DevOps
Στοιχειώδες Networking
HTTP επικοινωνία
Git vs Github
Εισαγωγή στο Cloud
Ρόλοι στο Tech
Πώς να τα καταφέρεις στο Interview
Take-Home Assignments
Απορίες;
Permissions & Root
Αργά ή γρήγορα θα γράψεις μια εντολή και το terminal θα σου πετάξει στα μούτρα το διασημότερο μήνυμα του Linux:
textPermission denied
Οι περισσότεροι αρχάριοι, μόλις το δουν, βάζουν
sudo μπροστά μέχρι να "δουλέψει"... Λάθος μοιραίο. Σε αυτό το μάθημα θα καταλάβεις γιατί το Linux σου λέει όχι, καθώς και πότε το sudo είναι η σωστή απάντηση και πότε επικίνδυνη κίνηση.1. Γιατί υπάρχουν permissions
Το Linux φτιάχτηκε από την αρχή για πολλούς χρήστες στο ίδιο μηχάνημα. Φαντάσου ένα κτίριο γραφείων: Δεν θες ο κάθε υπάλληλος να μπορεί να μπει στο γραφείο του διευθυντή ή να ανοίξει το χρηματοκιβώτιο. Ο καθένας έχει το κλειδί μόνο για τα δικά του.
Έτσι, κάθε αρχείο και φάκελος στο Linux ξέρει ποιος επιτρέπεται να το διαβάσει, να το αλλάξει ή να το τρέξει. Αυτό δεν είναι γραφειοκρατία. Είναι το πρώτο τείχος ασφάλειας ενός server.
2. Διαβάζοντας τα permissions με ls -l
Τρέξε
ls -l και θα δεις κάτι σαν:text-rwxr-xr-- 1 ioannis staff 220 Jun 13 script.sh
Εστίασε στο πρώτο κομμάτι:
-rwxr-xr--. Διαβάζεται σε τέσσερα μέρη:text- rwx r-x r-- type owner group others
- Πρώτος χαρακτήρας (
-): Ο τύπος.-= αρχείο,d= directory (φάκελος). - owner (
rwx): Τι μπορεί να κάνει ο ιδιοκτήτης (εδώ οioannis). - group (
r-x): Τι μπορεί να κάνει η ομάδα (εδώ το groupstaff). - others (
r--): Τι μπορεί να κάνει οποιοσδήποτε άλλος.
Και τα τρία γράμματα σημαίνουν:
r= read (διάβασμα)w= write (αλλαγή/σβήσιμο)x= execute (τρέξιμο, για προγράμματα/scripts)
Μια παύλα
- στη θέση ενός γράμματος σημαίνει "αυτό το δικαίωμα δεν υπάρχει". Άρα το r-- σημαίνει "μόνο διάβασμα, ούτε αλλαγή ούτε τρέξιμο".3. Αλλάζοντας permissions - chmod
Το πιο κλασικό σενάριο: Έγραψες ένα script, προσπαθείς να το τρέξεις, και παίρνεις
Permission denied. Γιατί; Γιατί του λείπει το x (execute).bashchmod +x script.sh # δώσε δικαίωμα εκτέλεσης ./script.sh # τώρα τρέχει
Το
chmod = change mode. Η απλή μορφή που θα χρησιμοποιείς συνέχεια:bashchmod +x file # πρόσθεσε execute chmod -w file # αφαίρεσε write (κάν' το read-only)
Θα δεις και αριθμητική μορφή, π.χ.
chmod 755 file. Αυτή κωδικοποιεί τα δικαιώματα σε αριθμούς (r=4, w=2, x=1, τα προσθέτεις). Μην την αποστηθίσεις τώρα - απλά αναγνώρισέ την: 755 = "ο owner τα πάντα, οι άλλοι μόνο read+execute", το πιο κοινό setting για scripts.Παίξε με το παρακάτω εργαλείο: Τσέκαρε δικαιώματα για owner/group/others και δες ζωντανά πώς αλλάζει η συμβολική μορφή (
rwxr-xr--), ο αριθμός (754) και η εντολή chmod:Υπολογιστής Permissions (chmod)
Read (r)
= 4Write (w)
= 2Execute (x)
= 1Ιδιοκτήτης (owner)
Ομάδα (group)
Άλλοι (others)
Συμβολική μορφή-rwxr-xr--
Αριθμητική μορφή754
$ chmod 754 script.sh
Γρήγορα presets:
4. Αλλάζοντας ιδιοκτήτη - chown
Καμιά φορά το πρόβλημα δεν είναι τα δικαιώματα αλλά το ποιος είναι ο ιδιοκτήτης. Με το
chown (change owner) το αλλάζεις:bashchown ioannis file.txt # κάνε ιδιοκτήτη τον ioannis chown ioannis:staff file.txt # ιδιοκτήτης ioannis, group staff
Αυτό το χρειάζεσαι συχνά σε servers, όπου αρχεία φτιάχνονται από έναν χρήστη (π.χ. το
root ή ένα service) αλλά πρέπει να τα διαχειρίζεσαι εσύ.5. Ο root & το sudo
Σε κάθε Linux υπάρχει ένας υπερχρήστης(γνωστός ως root) με απόλυτη εξουσία: Ο root. Μπορεί να διαβάσει, να αλλάξει και να σβήσει οτιδήποτε, αγνοώντας όλα τα permissions. Έχει το πασπαρτού όλου του κτιρίου.
Δεν δουλεύεις ως root στην καθημερινότητα. Είναι πολύ επικίνδυνο (ένα λάθος
rm και τέλος). Αντίθετα, όταν χρειάζεσαι προσωρινά δικαιώματα διαχειριστή, βάζεις μπροστά το sudo:bashsudo apt install nginx # εγκατάσταση προγράμματος (θέλει δικαιώματα admin)
Το
sudo σημαίνει "do this as the superuser". Δηλαδή εκτέλεσε αυτή τη μία εντολή με δικαιώματα root. Συνήθως θα σου ζητήσει τον κωδικό σου.Ο χρυσός κανόνας τουsudo: Μη το βάζεις από συνήθεια μπροστά σε ό,τι αποτυγχάνει. ΤοPermission deniedσυνήθως σου λέει κάτι χρήσιμο. Σου λέει ότι πειράζεις κάτι που δεν θα έπρεπε. Με τοsudoπαρακάμπτεις κάθε δικλείδα ασφαλείας. Χρησιμοποίησέ το όταν ξέρεις γιατί το χρειάζεσαι, όχι σαν καραμέλα.
Σύνοψη
- Τα permissions υπάρχουν γιατί το Linux είναι multi-user - προστατεύουν αρχεία και server.
- Με
ls -lδιαβάζεις:type | owner | group | others, όπουr=read,w=write,x=execute. chmod +x→ κάνε ένα script εκτελέσιμο.chmodαλλάζει δικαιώματα.chownαλλάζει τον ιδιοκτήτη ενός αρχείου.- root = απόλυτη εξουσία. Το
sudoδίνει προσωρινά δικαιώματα root - χρησιμοποίησέ το συνειδητά, όχι από συνήθεια.
Θες να συνεχίσεις;
Αυτό το μάθημα είναι δωρεάν. Κάνε σύνδεση για να κρατάς την πρόοδο και τις σημειώσεις σου, ή απόκτησε το course για να ξεκλειδώσεις τα υπόλοιπα μαθήματα, τα labs και την κοινότητα.