Δικαιώματα (permissions) |
Βασικά
Τα δικαιώματα (permissions) είναι ένα από τα βασικά χαρακτηριστικά των συστημάτων unix γενικότερα, που επιτρέπει τους χρήστες να ανταλλάσουν αρχεία ή να περιορίζουν την πρόσβαση τρίτων. Ας ανοίξουμε όμως ένα τερματικό από Αpplications > Accessories > Terminal για να δούμε ακριβώς τι συμβαίνει. Είμαστε λογικά στο αρχικό κατάλογο (/home/user όπου user το ονομα χρήστη σας) Πληκτρολογούμε:
ls -l
H εντολή αυτή μας εμφανίζει τα περιεχόμενα του καταλόγου μαζί με χίλιες δυο άλλες άχρηστες πληροφορίες.
Η πρώτη στηλη μπορεί να είναι d ή -, d για φάκελος (directory), - για απλό αρχείο. Κάθε αρχείο, κι όταν λέω αρχείο εννοώ και φακέλους, έχει ορισμένα χαρακτηριστικά, όπως σε ποιον ανήκει το αρχείο, σε ποια ομάδα ανήκει, ποιος έχει δικαίωμα να το διαβάσει, να το τροποποιήσει ή να το εκτελέσει. Η επόμενες 9 στήλες είναι συνδυασμοί των r,w,x,- έπειτα ακολουθεί ένας αριθμός, κι εκεί βλέπεται το όνομα του χρήστη σας δύο φορές. Η πρώτη εμφάνιση του user συμβολίζει τον ιδιοκτήτη του αρχείου (owner). H δεύτερη εμφάνιση την ομάδα (group). Oι 9 στήλες που περάσαμε είναι 3 συνδυασμοί των 3. Οι πρώτοι 3 συνδυασμοί αναφέρονται στα δικαιώματα του χρήστη. Η δεύτερη τριάδα αναφέρεται στα δικαιώματα της ομάδας και η τελευταία τριάδα στα δικαιώματα των άλλων (οthers, βλ. ανέκδοτο: εσύ με ποιούς είσαι με μας ή με τους άλλους; )
r σημαίνει δικαιώματα ανάγνωσης (read). w σημαίνει δικαιώματα τροποποίησης (write). x σημαίνει δικαιώματα εκτέλεσης (execute). Οποτε αν δούμε το συνδυασμό -rw-r--r-- σημαίνει ότι το αρχείο είναι απλό αρχείο και όχι φάκελος, ο χρήστης στον οποίο ανήκει το αρχείο έχει δικαιώματα να το διαβάσει και να το τροποποιήσει, αλλά όχι να το εκτελέσει. Οι χρήστες που ανήκουν στην ομάδα έχουν δικαίωμα μόνο ανάγνωσης και οι άλλοι έχουν επισης δικαίωμα μόνο ανάγνωσης.
Ο αριθμός που μας διέφυγε σημαίνει πόσα αρχεία περιλαμβάνει το αρχείο μας (Τι αριθμό θα έχει ένα αρχείο με - μπροστα κι όχι d; )
Φυσικά όλα αυτά τα δικαιώματα μπορούν να αλλάξουν. Μερικές χρήσιμες εντολές είναι η chgrp, chown, chmod. H chgrp αλλάζει την ομάδα του αρχείου. Η chown αλλάζει τον ιδιοκτήτη του αρχείου. Και η chmod αλλάζει τα δικαιώματα. Φυσικά για να αλλάξουν αυτά πρέπει να είμαστε ιδιοκτήτες του αρχείου.
Σύνταξη εντολών
Η σύνταξη της εντολής chgrp είναι:
chgrp mygroup myfile
όπου mygroup είναι η ομάδα στην οποιά θα αλλάξει το αρχείο myfile. Mερικές επιλογές είναι -R η οποία αλλάζει και τις ομάδες στους υποφακέλους του myfile, αν υπάρχουν.
Αντίστοιχα, η σύνταξη της εντολής chown είναι:
chown owner myfile
όπου owner είναι o καινούριος ιδιοκτήτης στον οποιά θα ανηκει το αρχείο myfile. Mερικές επιλογές είναι -R η οποία αλλάζει και τους ιδιοκτήτες στους υποφακέλους του myfile, αν υπάρχουν.
Η εντολή chmod αλλάζει τα δικαιώματα ως εξής:
chmod mode myfile
όπου mode είναι τα νέα δικαιώματα του αρχείου myfile. Oι επιλογές του mode δίνονται με ένα γράμμα που δείχνει ποιον αφορά η αλλάγη (u, g, o), επειτα + για να προσθέσουμε δικαιώματα ή με - για να τα αφαιρέσουμε και έπειτα ακολουθουν τι δικαιώματα θέλουμε να δώσουμε ή να αφαιρέσουμε (r,w,x).
Με μερικά παραδείγματα θα γίνει πιο κατανοητό.
ls -l -rw-r--r-- 1 dp staff 0 Aug 27 10:01 myfile
έχουμε ένα απλό αρχείο με δικαιώματα αναγνωσης και τροποποίησης από τον ιδιοκτήτη (dp), αναγνωσης από την ομάδα (staff) και αναγνωσης από όλους τους άλλους. Η εντολή:
chmod u+x myfile
δίνει στον ιδιοκτητη το δικαίωμα να το εκτελεσει το αρχειο. Φυσικά αν δεν είναι bash script, ή εκτελέσιμο πρόγραμμα ή python script, κτλ. θα βγάλει σφάλμα αν πάμε να το εκτελέσουμε με
./myfile
Aλλά υποτίθεται ότι ξέρουμε σε ποια αρχεία δίνουμε το δικαίωμα της εκτέλεσης. Mε ls -l
-rwxr--r-- 1 dp staff 0 Aug 27 10:01 myfile*
βλέπουμε στην πρώτη τριαδα το x. Aναλογα με τις ρυθμίσεις του κελύφους bash θα αλλάξει και το χρώμα του myfile (σε μενα βάζει ένα αστεράκι). Η εντολή:
chmod u-x myfile
το επαναφέρει στην αρχική του κατάσταση.
chmod go+w myfile
θα δώσει δικαιώματα τροποποίησης στην ομάδα staff και σε όλους τους άλλους. Το αποτελεσμα της ls -l θα είναι τότε:
-rwxrw-rw- 1 dp staff 0 Aug 27 10:01 myfile*
στη δεύτερη και την τρίτη στήλη θα υπάρχει και w.
chmod o-wr myfile
θα αφαιρέσει το δικαίωμα τροποποιησης και αναγνωσης από όλους όσους δεν ανήκουν στην ομάδα staff.
Υπάρχει και ένας δεύτερος τρόπος περιγραφης των δικαίωματων, κάπως πιο απόκρυφος ο οποίος χρησιμοποιείται και κάπως παραλαγμένος στην umask (Θα φτάσουμε κι εκεί.) Την κάθε τριάδα μπορούμε να την δούμε σαν ένα δυαδικό αριθμό που αποτελείται από bits τα οποία μπορεί να είναι 0 ή 1. Όταν υπάρχει ένα δικαίωμα το αντίστοιχο bit είναι 1, όταν δεν υπάρχει είναι 0. Η τριάδα r-- θα είναι ο αριθμό 100 στο δυαδικό σύστημα, τον οποίο αν το μετατρέψουμε στο δεκαδικό θα είναι ο 1x2**2+0x2**1 +0x2**0 (** σημαίνει ύψωση σε δύναμη) δηλαδή 4. Αντίστοιχα η τριάδα rw- αντιστοιχεί στο δυαδικό αριθμό 110 ή στον δεκαδικό 6. Αν θέλουμε τώρα να δώσουμε τα δικαιώματα rw-r--r-- σε ένα αρχείο θα δίναμε την εντολή:
chmod 644 myfile
Άσκηση: Ποιο θα είναι το αποτέλεσμα της εντολής;
chmod 755 myfile
Ένα σημείο το οποίο χωράει συζήτηση είναι το δικαίωμα ανάγνωσης (r). Όταν κάποιος άλλος χρήστης έχει δικαίωμα ανάγνωσης μόνο, σημαίνει ότι μπορεί να διαβάσει το αρχείο αλλά όχι να το τροποποιήση. Να διαβάσει όμως σημαίνει όχι απλώς να το ανοιξει με έναν editor και να το διαβάσει, αλλά να το αντιγράψει κι όλας, με την εντολή cp για παράδειγμα. Φυσικά το νέο αρχείο θα έχει ως ιδιοκτήτη το νέο χρήστη. Αυτό δημιουργία κάποια ανασφάλεια στους νέους χρήστες, αλλά δυστυχώς ή ευτυχώς έτσι είναι. Δεν είναι ούτε bug ούτε feature. Πολλές μεγάλες δισκογραφικές εταιρίες κάνουν έρευνα ώστε να μπορεί κάποιος να διαβάζει κάτι χωρίς να μπορεί να το αντιγράψει αλλά ανεπιτυχώς θα έλεγα. Οπότε αν θέλετε να μη μπορεί κάποιος να αντιγραψει τα αρχεία σας θα πρέπει να μην τους δώσετε δικαιώματα ανάγνωσης.
Μια δεύτερη επισήμανση είναι οι φάκελοι. Για να μπορέσει κανείς να "μπει" μέσα σε ένα φάκελο πρέπει να έχει δικαίωμα εκτέλεσης του φακέλου.
Αν θέλουμε να αναφερθούμε σε όλους τους χρήστες (u, g και ο) τότε μπορούμε να γράψουμε a (all) δηλαδή
chmod a+w myfile
δίνει σε όλους δικαίωμα τροποποίησης.
Ακόμη μία άσκηση: Πώς μπορούμε να δημιουργήσουμε ένα φάκελο που να λειτουργεί σαν γραμματοκιβώτιο όπου όλοι μπορούν να γράψουν ένα αρχειό (να στείλουν ένα γράμμα) αλλά να μόνο ο ιδιοκτήτης να μπορεί να δεί το γραμματοκιβώτιό του. Το γράμμα μπορεί να το καταστρέψει ο αποστολέας; Ο παραλήπτης;
