5.3 Μάθημα 1
Πιστοποιητικό: |
Linux Essentials |
---|---|
Έκδοση: |
1.6 |
Θέμα: |
5 Ασφάλεια και Δικαιώματα Αρχείων |
Σκοπός: |
5.3 Διαχείριση Δικαιωμάτων και Ιδιοκτησίας Αρχείων |
Μάθημα: |
1 απο 1 |
Εισαγωγή
Όντας ένα σύστημα πολλών χρηστών, το Linux χρειάζεται κάποιο τρόπο για να παρακολουθεί σε ποιον ανήκει κάθε αρχείο και εάν επιτρέπεται ή όχι ένας χρήστης να εκτελεί ενέργειες σε αυτό το αρχείο. Αυτό γίνεται για να διασφαλιστεί το απόρρητο των χρηστών που μπορεί να θέλουν να διατηρήσουν το περιεχόμενο των αρχείων τους εμπιστευτικό, καθώς και για να διασφαλιστεί η συνεργασία καθιστώντας ορισμένα αρχεία προσβάσιμα σε πολλούς χρήστες.
Αυτό γίνεται μέσω ενός συστήματος δικαιωμάτων τριών επιπέδων: κάθε αρχείο στο δίσκο ανήκει σε έναν χρήστη και μια ομάδα χρηστών και έχει τρία σύνολα δικαιωμάτων: ένα για τον κάτοχό του, ένα για την ομάδα που κατέχει το αρχείο και ένα για όλους τους άλλους. Σε αυτό το μάθημα, θα μάθετε πώς να ζητάτε τα δικαιώματα για ένα αρχείο και πώς να τα χειρίζεστε.
Αναζήτηση Πληροφοριών σχετικά με Αρχεία και Καταλόγους
Η εντολή ls
χρησιμοποιείται για τη λήψη μιας λίστας με τα περιεχόμενα οποιουδήποτε καταλόγου. Σε αυτή τη βασική μορφή, το μόνο που λαμβάνετε είναι τα ονόματα αρχείων:
$ ls Another_Directory picture.jpg text.txt
Υπάρχουν όμως πολύ περισσότερες διαθέσιμες πληροφορίες για κάθε αρχείο, όπως τύπος, μέγεθος, ιδιοκτησία και άλλα. Για να δείτε αυτές τις πληροφορίες, πρέπει να ζητήσετε από το ls
μια παράθεση “μακράς μορφής”, χρησιμοποιώντας την παράμετρο -l
:
$ ls -l total 536 drwxrwxr-x 2 carol carol 4096 Dec 10 15:57 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
Κάθε στήλη στην παραπάνω έξοδο έχει μια σημασία:
-
Η πρώτη στήλη στην παράθεση δείχνει τον τύπο αρχείου και τα δικαιώματα.
Για παράδειγμα, στο
drwxrwxr-x
:-
Ο πρώτος χαρακτήρας,
d
, υποδηλώνει τον τύπο αρχείου. -
Οι επόμενοι τρεις χαρακτήρες,
rwx
, υποδεικνύουν τα δικαιώματα για τον κάτοχο του αρχείου, που αναφέρεται επίσης ως user ήu
. -
Οι επόμενοι τρεις χαρακτήρες,
rwx
, υποδεικνύουν τα δικαιώματα της ομάδας, group που κατέχει το αρχείο, που αναφέρεται επίσης ωςg
. -
Οι τρεις τελευταίοι χαρακτήρες,
r-x
, υποδεικνύουν τα δικαιώματα για οποιονδήποτε άλλο, γνωστά και ως others ήo
.
-
-
Η δεύτερη στήλη υποδεικνύει τον αριθμό των hard links [σκληρών συνδέσμων] που οδηγούν σε αυτό το αρχείο. Για έναν κατάλογο, αυτό σημαίνει τον αριθμό των υποκαταλόγων, συν έναν σύνδεσμο προς τον εαυτό του (
.
) και τον parent κατάλογο (..
). -
Η τρίτη και τέταρτη στήλη εμφανίζουν πληροφορίες ιδιοκτησίας: τον χρήστη και την ομάδα που κατέχουν το αρχείο αντίστοιχα.
-
Η πέμπτη στήλη δείχνει το μέγεθος αρχείου, σε byte.
-
Η έκτη στήλη εμφανίζει την ακριβή ημερομηνία και ώρα, ή χρονοσήμανση [timestamp], όταν το αρχείο τροποποιήθηκε τελευταία φορά.
-
Η έβδομη και η τελευταία στήλη δείχνει το όνομα του αρχείου.
Εάν θέλετε να δείτε τα μεγέθη αρχείων σε μορφή “αναγνώσιμη από τον άνθρωπο”, προσθέστε την παράμετρο -h
στο ls
. Τα αρχεία με μέγεθος μικρότερο από ένα kilobyte θα έχουν το μέγεθος τους να εμφανίζεται σε byte. Στα αρχεία με μέγεθος μεγαλύτερο από ένα kilobyte και λιγότερο από ένα megabyte θα προστεθεί ένα K
μετά το μέγεθος, υποδεικνύοντας ότι το μέγεθος είναι σε kilobyte. Το ίδιο ισχύει για τα μεγέθη αρχείων με εύρος μεγέθους megabyte (M
) και gigabyte (G
):
$ ls -lh total 1,2G drwxrwxr-x 2 carol carol 4,0K Dec 10 17:59 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip -rw------- 1 carol carol 528K Dec 10 10:43 picture.jpg ---xr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh -rwxr--r-- 1 carol carol 1,9K Dec 20 18:13 text.txt -rw-rw-r-- 1 carol carol 2,6M Dec 11 22:14 Zipped.zip
Για να εμφανίσετε πληροφορίες μόνο για ένα συγκεκριμένο σύνολο αρχείων, προσθέστε τα ονόματα αυτών των αρχείων στο ls
:
$ ls -lh HugeFile.zip test.sh total 1,2G -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip ---xr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Τι Γίνεται με τους Καταλόγους;
Εάν προσπαθήσετε να αναζητήσετε πληροφορίες σχετικά με έναν κατάλογο χρησιμοποιώντας το ls -l
, θα εμφανιστεί μια λίστα με τα περιεχόμενα του καταλόγου:
$ ls -l Another_Directory/ total 0 -rw-r--r-- 1 carol carol 0 Dec 10 17:59 another_file.txt
Για να το αποφύγετε αυτό και να ζητήσετε πληροφορίες σχετικά με τον ίδιο τον κατάλογο, προσθέστε την παράμετρο -d
στο ls
:
$ ls -l -d Another_Directory/ drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory/
Εμφάνιση Κρυφών Αρχείων
Η λίστα καταλόγου που ανακτήσαμε χρησιμοποιώντας το ls -l
πριν, είναι ελλιπής:
$ ls -l total 544 drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
Υπάρχουν άλλα τρία αρχεία σε αυτόν τον κατάλογο, αλλά είναι κρυμμένα. Στο Linux, τα αρχεία των οποίων το όνομα αρχίζει με τελεία (.
) κρύβονται αυτόματα. Για να τα δούμε πρέπει να προσθέσουμε την παράμετρο -a
στο ls
:
$ ls -l -a total 544 drwxrwxr-x 3 carol carol 4096 Dec 10 16:01 . drwxrwxr-x 4 carol carol 4096 Dec 10 15:56 .. drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt -rw-r--r-- 1 carol carol 0 Dec 10 16:01 .thisIsHidden
Το αρχείο .thisIsHidden
είναι κρυφό απλώς επειδή το όνομά του ξεκινά με .
.
Ωστόσο, οι κατάλογοι .
και ..
είναι ιδιαίτεροι. Το .
είναι ένας δείκτης στον τρέχοντα κατάλογο, ενώ το ..
είναι ένας δείκτης στον parent κατάλογο (ο κατάλογος που περιέχει τον τρέχοντα κατάλογο). Στο Linux, κάθε κατάλογος περιέχει τουλάχιστον αυτούς τους δύο ειδικούς καταλόγους.
Tip
|
Μπορείτε να συνδυάσετε πολλές παραμέτρους για το |
Κατανόηση των Τύπων Αρχείων
Έχουμε ήδη αναφέρει ότι το πρώτο γράμμα σε κάθε έξοδο του ls -l
περιγράφει τον τύπο του αρχείου. Οι τρεις πιο συνηθισμένοι τύποι αρχείων είναι:
-
(κανονικό αρχείο)-
Ένα αρχείο μπορεί να περιέχει δεδομένα οποιουδήποτε είδους. Τα αρχεία μπορούν να τροποποιηθούν, να μετακινηθούν, να αντιγραφούν και να διαγραφούν.
d
(κατάλογος)-
Ένας κατάλογος περιέχει άλλα αρχεία ή καταλόγους και βοηθά στην οργάνωση του συστήματος αρχείων. Τεχνικά, οι κατάλογοι είναι ένα ειδικό είδος αρχείων.
l
(soft link)-
Αυτό το “αρχείο” είναι ένας δείκτης σε άλλο αρχείο ή κατάλογο σε άλλο σημείο του συστήματος αρχείων.
Επιπροσθέτως, υπάρχουν άλλοι τρεις τύποι αρχείων που θα πρέπει τουλάχιστον να γνωρίζετε, αλλά είναι εκτός πεδίου εφαρμογής για αυτό το μάθημα:
b
(συσκευή block)-
Αυτό το αρχείο είναι μια εικονική ή φυσική συσκευή, συνήθως δίσκοι ή άλλα είδη συσκευών αποθήκευσης. Για παράδειγμα, ο πρώτος σκληρός δίσκος στο σύστημα μπορεί να αντιπροσωπεύεται ως
/dev/sda
. c
(συσκευή χαρακτήρων)-
Αυτό το αρχείο είναι μια εικονική ή φυσική συσκευή. Τα τερματικά (όπως το κύριο τερματικό στο
/dev/ttyS0
) και οι σειριακές θύρες είναι κοινά παραδείγματα συσκευών χαρακτήρων. s
(socket)-
Τα sockets χρησιμεύουν ως “αγωγοί” που περνούν πληροφορίες μεταξύ δύο προγραμμάτων.
Warning
|
Μην τροποποιείτε τα δικαιώματα σε συσκευές block, συσκευές χαρακτήρων ή sockets, εκτός εάν γνωρίζετε τι κάνετε. Αυτό μπορεί να εμποδίσει το σύστημά σας να λειτουργήσει! |
Κατανοώντας τα Δικαιώματα
Στην έξοδο του ls -l
τα δικαιώματα του αρχείου εμφανίζονται αμέσως μετά τον τύπο αρχείου, ως τρεις ομάδες των τριών χαρακτήρων η καθεμία, με τη σειρά r
, w
και x
. Εδώ είναι το τι σημαίνουν. Λάβετε υπόψη ότι η παύλα -
αντιπροσωπεύει την έλλειψη ενός συγκεκριμένου δικαιώματος.
Δικαιώματα Αρχείων
r
-
Σημαίνει ανάγνωση [read] και έχει οκταδική τιμή
4
(μην ανησυχείτε, θα συζητήσουμε για τα οκταδικά σύντομα). Αυτό σημαίνει διακαίωμα ανοίγματος ενός αρχείου και ανάγνωσης του περιεχομένου του. w
-
Σημαίνει εγγραφή [write] και έχει οκταδική τιμή
2
. Αυτό σημαίνει δικαίωμα για επεξεργασία ή διαγραφή ενός αρχείου. x
-
Σημαίνει εκτέλεση [execute] και έχει οκταδική τιμή
1
. Αυτό σημαίνει ότι το αρχείο μπορεί να τρέξει ως εκτελέσιμο ή script.
Έτσι, για παράδειγμα, ένα αρχείο με δικαιώματα rw-
μπορεί να διαβαστεί και να γραφτεί, αλλά δεν μπορεί να εκτελεστεί.
Δικαιώματα Καταλόγων
r
-
Σημαίνει ανάγνωση [read] και έχει οκταδική τιμή
4
. Αυτό σημαίνει διακαίωμα ανάγνωσης των περιεχομένων του καταλόγου, όπως ονόματα αρχείων. Αλλά δεν υπονοεί δικαίωμα ανάγνωσης των ίδιων των αρχείων που περιέχονται στον κατάλογο. w
-
Σημαίνει εγγραφή [write] και έχει οκταδική τιμή
2
. Αυτό σημαίνει δικαίωμα δημιουργίας ή διαγραφής αρχείων σε έναν κατάλογο ή αλλαγής των ονομάτων, των δικαιωμάτων και των κατόχων τους. Εάν ένας χρήστης έχει το δικαίωμα εγγραφής σε έναν κατάλογο, ο χρήστης μπορεί να αλλάξει τα δικαιώματα οποιουδήποτε αρχείου στον κατάλογο, ακόμα κι αν ο χρήστης δεν έχει δικαιώματα στο αρχείο ή αν το αρχείο ανήκει σε άλλο χρήστη. x
-
Σημαίνει εκτέλεση [execute] και έχει οκταδική τιμή
1
. Αυτό σημαίνει δικαίωμα για την είσοδο σε ένα κατάλογο, αλλά όχι για τη παράθεση των αρχείων του (για αυτό, απαιτείται το δικαίωμαr
).
Το τελευταίο κομμάτι για τους καταλόγους μπορεί να ακούγεται λίγο μπερδεμένο. Ας φανταστούμε, για παράδειγμα, ότι έχετε έναν κατάλογο με το όνομα Another_Directory
, με τα ακόλουθα δικαιώματα:
$ ls -ld Another_Directory/ d--xr-xr-x 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Φανταστείτε επίσης ότι μέσα σε αυτόν τον κατάλογο έχετε ένα shell script που ονομάζεται hello.sh
με τα ακόλουθα δικαιώματα:
-rwxr-xr-x 1 carol carol 33 Dec 20 18:46 hello.sh
Εάν είστε ο χρήστης carol
και προσπαθήσετε να παραθέσετε τα περιεχόμενα του Another_Directory
, θα λάβετε ένα μήνυμα σφάλματος, καθώς ο χρήστης σας δεν έχει δικαίωμα ανάγνωσης για αυτόν τον κατάλογο:
$ ls -l Another_Directory/ ls: cannot open directory 'Another_Directory/': Permission denied
Ωστόσο, ο χρήστης carol
έχει δικαιώματα εκτέλεσης, πράγμα που σημαίνει ότι μπορεί να εισέλθει στον κατάλογο. Επομένως, ο χρήστης carol
μπορεί να έχει πρόσβαση σε αρχεία μέσα στον κατάλογο, αρκεί να έχει τα σωστά δικαιώματα για το αντίστοιχο αρχείο. Σε αυτό το παράδειγμα, ο χρήστης έχει πλήρη δικαιώματα για το script hello.sh
, επομένως μπορεί να εκτελέσει το script, ακόμα και αν δεν μπορεί να διαβάσει τα περιεχόμενα του καταλόγου που το περιέχει. Το μόνο που χρειάζεται είναι το πλήρες όνομα αρχείου.
$ sh Another_Directory/hello.sh Hello LPI World!
Όπως είπαμε προηγουμένως, τα δικαιώματα καθορίζονται με τη σειρά: πρώτα για τον ιδιοκτήτη του αρχείου, μετά για την ομάδα ιδιοκτησίας και μετά για άλλους χρήστες. Κάθε φορά που κάποιος προσπαθεί να εκτελέσει μια ενέργεια στο αρχείο, τα δικαιώματα ελέγχονται με τον ίδιο τρόπο. Πρώτα το σύστημα ελέγχει εάν ο τρέχων χρήστης είναι κάτοχος του αρχείου και, εάν αυτό ισχύει, εφαρμόζει μόνο το πρώτο σύνολο δικαιωμάτων. Διαφορετικά, ελέγχει εάν ο τρέχων χρήστης ανήκει στην ομάδα που κατέχει το αρχείο. Σε αυτήν την περίπτωση, εφαρμόζει μόνο το δεύτερο σύνολο δικαιωμάτων. Σε κάθε άλλη περίπτωση, το σύστημα θα εφαρμόσει το τρίτο σύνολο δικαιωμάτων. Αυτό σημαίνει ότι εάν ο τρέχων χρήστης είναι ο ιδιοκτήτης του αρχείου, ισχύουν μόνο τα δικαιώματα ιδιοκτήτη, ακόμα κι αν τα δικαιώματα ομάδας ή τα άλλα δικαιώματα είναι πιο χαλαρά από τα δικαιώματα του ιδιοκτήτη.
Τροποποίηση Δικαιωμάτων Αρχείου
Η εντολή chmod
χρησιμοποιείται για την τροποποίηση των δικαιωμάτων ενός αρχείου και παίρνει τουλάχιστον δύο παραμέτρους: η πρώτη περιγράφει ποια δικαιώματα πρέπει να αλλάξει και η δεύτερη δείχνει το αρχείο ή τον κατάλογο όπου θα γίνει η αλλαγή. Ωστόσο, τα δικαιώματα προς αλλαγή μπορούν να περιγραφούν με δύο διαφορετικούς τρόπους, ή “μεθόδους”.
Η πρώτη, που ονομάζεται συμβολική μέθοδος [symbolic mode] προσφέρει λεπτομερή έλεγχο, επιτρέποντάς σας να προσθέσετε ή να ανακαλέσετε ένα μόνο δικαίωμα χωρίς να τροποποιήσετε άλλα στο σύνολό τους. Η άλλη μέθοδος, που ονομάζεται αριθμητική μέθοδος [numeric mode], είναι πιο εύκολη στη μνημόνευσή της και πιο γρήγορη στη χρήση εάν θέλετε να ορίσετε όλες τις τιμές δικαιωμάτων ταυτόχρονα.
Και οι δύο τρόποι θα οδηγήσουν στο ίδιο τελικό αποτέλεσμα. Έτσι, για παράδειγμα, οι εντολές:
$ chmod ug+rw-x,o-rwx text.txt
και
$ chmod 660 text.txt
θα παράγουν ακριβώς την ίδια έξοδο, ένα αρχείο με το σύνολο δικαιωμάτων:
-rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Τώρα, ας δούμε πώς λειτουργεί η κάθε μέθοδος.
Συμβολική Μέθοδος
Όταν περιγράφετε ποιά δικαιώματα πρέπει να αλλάξετε στη συμβολική μέθοδο, ο(οι) πρώτος(οι) χαρακτήρας(ες) υποδεικνύει(ουν) τα δικαιώματα των οποίων θα αλλάξετε: αυτά για τον χρήστη (u
), για την ομάδα (g
), για άλλους (o `) ή/και και για τα τρία μαζί (`a
).
Στη συνέχεια, πρέπει να πείτε στην εντολή τι να κάνει: μπορείτε να παραχωρήσετε ένα δικαίωμα (+
), να ανακαλέσετε ένα δικαίωμα (-
) ή να του ορίσετε μια συγκεκριμένη τιμή (=
).
Τέλος, προσδιορίζετε ποιό δικαίωμα θέλετε να επηρεάσετε: ανάγνωση (r
), εγγραφή (w
) ή εκτέλεση (x
).
Για παράδειγμα, φανταστείτε ότι έχουμε ένα αρχείο που ονομάζεται text.txt
με το ακόλουθο σύνολο δικαιωμάτων:
$ ls -l text.txt -rw-r--r-- 1 carol carol 765 Dec 20 21:25 text.txt
Εάν θέλετε να παραχωρήσετε δικαιώματα εγγραφής στα μέλη της ομάδας που κατέχει το αρχείο, θα χρησιμοποιήσετε την παράμετρο g+w
. Είναι πιο εύκολο αν το σκεφτείτε ως εξής: “Για την ομάδα (g
), παραχώρησε (+
) δικαιώματα εγγραφής (w
)”. Έτσι, η εντολή θα ήταν:
$ chmod g+w text.txt
Ας ελέγξουμε το αποτέλεσμα με την ls
:
$ ls -l text.txt -rw-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
Εάν θέλετε να καταργήσετε τα δικαιώματα ανάγνωσης για τον ιδιοκτήτη του ίδιου αρχείου, σκεφτείτε το ως εξής: “Για τον χρήστη (u
) ανακάλεσε (-
), δικαιώματα ανάγνωσης (r
)”. Άρα η παράμετρος είναι u-r
, όπως:
$ chmod u-r text.txt $ ls -l text.txt --w-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
Τι γίνεται αν θέλουμε να ορίσουμε τα δικαιώματα ακριβώς ως rw-
για όλους; Στη συνέχεια, σκεφτείτε το ως: “Για όλους (a
), ορίστε ακριβώς (=
), ανάγνωση (r
), εγγραφή (w
) και όχι εκτέλεση (-
)”. Ετσι:
$ chmod a=rw- text.txt $ ls -l text.txt -rw-rw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
Φυσικά, είναι δυνατή η ταυτόχρονη τροποποίηση πολλαπλών δικαιωμάτων. Σε αυτήν την περίπτωση, διαχωρίστε τα με κόμμα (,
):
$ chmod u+rwx,g-x text.txt $ ls -lh text.txt -rwxrw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
Το παραπάνω παράδειγμα μπορεί να διαβαστεί ως εξής: “Για τον χρήστη (u
), παραχώρησε (+
) δικαιώματα ανάγνωσης, εγγραφής και εκτέλεσης (rwx
), για την ομάδα (g
) ανακάλεσε (-
), δικαιώματα εκτέλεσης (x
)”.
Όταν εκτελείται σε έναν κατάλογο, η εντολή chmod
τροποποιεί μόνο τα δικαιώματα του καταλόγου. Το chmod
έχει μια αναδρομική λειτουργία, χρήσιμη όταν θέλετε να αλλάξετε τα δικαιώματα για “όλα τα αρχεία μέσα σε έναν κατάλογο και τους υποκαταλόγους του”. Για να τη χρησιμοποιήσετε, προσθέστε την παράμετρο -R
μετά το όνομα της εντολής και πριν από τα δικαιώματα για αλλαγή, όπως:
$ chmod -R u+rwx Another_Directory/
Αυτή η εντολή μπορεί να διαβαστεί ως εξής: “Αναδρομικά (-R
), για τον χρήστη (u
), παραχωρήστε (+
) δικαιώματα ανάγνωσης, εγγραφής και εκτέλεσης (rwx
)”.
Warning
|
Να είστε προσεκτικοί και να σκεφτείτε δύο φορές πριν χρησιμοποιήσετε το διακόπτη |
Αριθμητική Μέθοδος
Στην αριθμητική μέθοδο, τα δικαιώματα καθορίζονται με διαφορετικό τρόπο: ως τριψήφια αριθμητική τιμή σε οκταδικό συμβολισμό, ένα αριθμητικό σύστημα βάσης 8.
Κάθε δικαιώμα έχει μια αντίστοιχη τιμή και καθορίζεται με την ακόλουθη σειρά: πρώτα έρχεται η ανάγνωση (r
), που είναι 4
, μετά η εγγραφή (w
), η οποία είναι 2
και τελευταία η εκτέλεση (x
), αντιπροσωπεύεται από το 1
. Εάν δεν υπάρχει δικαίωμα, χρησιμοποιήστε την τιμή μηδέν (0
). Άρα, ένα δικαίωμα rwx
θα ήταν 7
(4+2+1
) και το r-x
θα ήταν 5
(4+0+1
).
Το πρώτο από τα τρία ψηφία στο σύνολο δικαιωμάτων αντιπροσωπεύει τα δικαιώματα για τον χρήστη (u
), το δεύτερο για την ομάδα (g
) και το τρίτο για τους άλλους (o
). Αν θέλαμε να ορίσουμε τα δικαιώματα για ένα αρχείο σε rw-rw----
, η οκταδική τιμή θα ήταν 660
:
$ chmod 660 text.txt $ ls -l text.txt -rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Εκτός αυτού, η σύνταξη στην αριθμητική μέθοδο είναι η ίδια όπως στην συμβολική μέθοδο, η πρώτη παράμετρος αντιπροσωπεύει τα δικαιώματα που θέλετε να αλλάξετε και η δεύτερη δείχνει το αρχείο ή τον κατάλογο όπου θα γίνει η αλλαγή.
Tip
|
Εάν μια τιμή δικαιώματος είναι μονή, το αρχείο είναι σίγουρα εκτελέσιμο! |
Ποια σύνταξη να χρησιμοποιήσω; Η αριθμητική μέθοδος συνιστάται εάν θέλετε να αλλάξετε τα δικαιώματα σε μια συγκεκριμένη τιμή, για παράδειγμα 640
(rw- r-- ---
).
Η συμβολική μέθοδος είναι πιο χρήσιμη εάν θέλετε να αλλάξετε μόνο μια συγκεκριμένη τιμή, ανεξάρτητα από τα τρέχοντα δικαιώματα για το αρχείο. Για παράδειγμα, μπορώ να προσθέσω δικαιώματα εκτέλεσης για τον χρήστη χρησιμοποιώντας απλώς το chmod u+x script.sh
χωρίς να λαμβάνω υπόψη ή ακόμα και να αγγίζω τα τρέχοντα δικαιώματα για την ομάδα και τους άλλους.
Τροποποίηση Ιδιοκτησίας Αρχείου
Η εντολή chown
χρησιμοποιείται για την τροποποίηση της ιδιοκτησίας ενός αρχείου ή καταλόγου. Η σύνταξη είναι αρκετά απλή:
chown όνομα χρήστη:όνομα ομάδας όνομα αρχείου
Για παράδειγμα, ας ελέγξουμε ένα αρχείο που ονομάζεται text.txt
:
$ ls -l text.txt -rw-rw---- 1 carol carol 1881 Dec 10 15:57 text.txt
Ο χρήστης που κατέχει το αρχείο είναι carol
και η ομάδα είναι επίσης carol
. Τώρα, ας τροποποιήσουμε την ομάδα που κατέχει το αρχείο σε κάποια άλλη ομάδα, όπως students
:
$ chown carol:students text.txt $ ls -l text.txt -rw-rw---- 1 carol students 1881 Dec 10 15:57 text.txt
Λάβετε υπόψη ότι ο χρήστης που κατέχει ένα αρχείο δεν χρειάζεται να ανήκει στην ομάδα που κατέχει ένα αρχείο. Στο παραπάνω παράδειγμα, ο χρήστης carol
δεν χρειάζεται να είναι μέλος της ομάδας students
. Ωστόσο, πρέπει να είναι μέλος της ομάδας για να μπορεί μεταβιβάσει την ιδιοκτησία της ομάδας του αρχείου σε αυτήν την άλλη ομάδα.
Ο χρήστης ή η ομάδα μπορεί να παραλειφθεί εάν δεν θέλετε να τα αλλάξετε. Έτσι, για να αλλάξετε μόνο την ομάδα που κατέχει ένα αρχείο, θα χρησιμοποιούσατε το chown :students text.txt
. Για να αλλάξετε μόνο τον χρήστη, η εντολή θα ήταν chown carol text.txt
. Εναλλακτικά, μπορείτε να χρησιμοποιήσετε την εντολή chgrp student text.txt
για να αλλάξετε μόνο την ομάδα.
Αν δεν είστε ο διαχειριστής του συστήματος (root χρήστης), δεν μπορείτε να αλλάξετε την ιδιοκτησία ενός αρχείου που ανήκει σε άλλο χρήστη ή σε μια ομάδα στην οποία δεν ανήκετε. Εάν προσπαθήσετε να το κάνετε αυτό, θα λάβετε το μήνυμα σφάλματος Operation not permitted
.
Ερωτήσεις Ομάδων
Πριν αλλάξετε την ιδιοκτησία ενός αρχείου, ίσως είναι χρήσιμο να γνωρίζετε ποιες ομάδες υπάρχουν στο σύστημα, ποιοι χρήστες είναι μέλη μιας ομάδας και σε ποιες ομάδες ανήκει ένας χρήστης. Αυτές οι εργασίες μπορούν να ολοκληρωθούν με δύο εντολές, groups
και groupmems
.
Για να δείτε σε ποιες ομάδες είστε μέλος, απλώς πληκτρολογήστε groups
:
$ groups carol students cdrom sudo dip plugdev lpadmin sambashare
Και αν θέλετε να μάθετε σε ποιες ομάδες ανήκει ένας χρήστης, προσθέστε το όνομα χρήστη ως παράμετρο:
$ groups carol carol : carol students cdrom sudo dip plugdev lpadmin sambashare
Για να κάνετε το αντίστροφο, εμφανίζοντας ποιοι χρήστες ανήκουν σε μια ομάδα, χρησιμοποιήστε το groupmems
. Η παράμετρος -g
καθορίζει την ομάδα και το -l
θα εμφανίσει όλα τα μέλη της:
$ sudo groupmems -g cdrom -l carol
Tip
|
Το |
Ειδικά Δικαιώματα
Εκτός από τα δικαιώματα ανάγνωσης, εγγραφής και εκτέλεσης για χρήστη, ομάδα και άλλους, κάθε αρχείο μπορεί να έχει τρία άλλα ειδικά δικαιώματα που μπορούν να αλλάξουν τον τρόπο λειτουργίας ενός καταλόγου ή τον τρόπο εκτέλεσης ενός προγράμματος. Μπορούν να καθοριστούν είτε με συμβολικό είτε με αριθμητικό τρόπο και είναι τα εξής:
Sticky Bit
Το sticky bit, που ονομάζεται επίσης σημαία περιορισμένης διαγραφής, έχει την οκταδική τιμή 1
και συμβολικά αντιπροσωπεύεται από ένα t
εντός των δικαιωμάτων για τους άλλους. Βρίσκει εφαρμογή μόνο επί καταλόγων και στο Linux εμποδίζει τους χρήστες να αφαιρέσουν ή να μετονομάσουν ένα αρχείο σε έναν κατάλογο, εκτός εάν ο χρήστης είναι ιδιοκτήτης αυτού του αρχείου ή του καταλόγου.
Οι κατάλογοι με εφαρμοσμένο το sticky bit εμφανίζουν ένα t
που αντικαθιστά το x
στα δικαιώματα για άλλους στην έξοδο του ls -l
:
$ ls -ld Sample_Directory/ drwxr-xr-t 2 carol carol 4096 Dec 20 18:46 Sample_Directory/
Στην αριθμητική μέθοδο, τα ειδικά δικαιώματα καθορίζονται χρησιμοποιώντας ένα “συμβολισμό 4 ψηφίων”, με το πρώτο ψηφίο να αντιπροσωπεύει το ειδικό δικαίωμα προς εφαρμογή. Για παράδειγμα, για να ορίσετε το sticky bit (τιμή 1
) για τον κατάλογο Another_Directory
με αριθμητική μέθοδο, με δικαιώματα 755
, η εντολή θα είναι:
$ chmod 1755 Another_Directory $ ls -ld Another_Directory drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Εφαρμογή GID
Η εφαρμογή του GID, γνωστή και ως SGID bit ή Set Group ID, έχει την οκταδική τιμή 2
και στη συμβολική μέθοδο αντιπροσωπεύεται από ένα s
στα δικαιώματα ομάδας. Μπορεί να εφαρμοστεί σε εκτελέσιμα αρχεία ή καταλόγους. Σε εκτελέσιμα αρχεία, θα παραχωρήσει στο process που προκύπτει από την εκτέλεση του αρχείου πρόσβαση στα προνόμια της ομάδας που κατέχει το αρχείο. Όταν εφαρμόζεται σε καταλόγους, θα κάνει κάθε αρχείο ή κατάλογο που δημιουργείται κάτω από αυτόν να κληρονομήσει την ομάδα από τον parent κατάλογο.
Τα αρχεία και οι κατάλογοι με SGID bit εμφανίζουν ένα s
που αντικαθιστά το x
στα δικαιώματα για την ομάδα στην έξοδο του ls -l
:
$ ls -l test.sh -rwxr-sr-x 1 carol carol 33 Dec 11 10:36 test.sh
Για να προσθέσετε δικαιώματα SGID σε ένα αρχείο με συμβολική μέθοδο, η εντολή θα ήταν:
$ chmod g+s test.sh $ ls -l test.sh -rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
Το παρακάτω παράδειγμα θα σας κάνει να κατανοήσετε καλύτερα τα αποτελέσματα του SGID σε έναν κατάλογο. Ας υποθέσουμε ότι έχουμε έναν κατάλογο που ονομάζεται Sample_Directory
, που ανήκει στον χρήστη carol
και την ομάδα users
, με την ακόλουθη δομή δικαιωμάτων:
$ ls -ldh Sample_Directory/ drwxr-xr-x 2 carol users 4,0K Jan 18 17:06 Sample_Directory/
Τώρα, ας αλλάξουμε σε αυτόν τον κατάλογο και, χρησιμοποιώντας την εντολή touch
, ας δημιουργήσουμε ένα κενό αρχείο μέσα σε αυτόν. Το αποτέλεσμα θα ήταν:
$ cd Sample_Directory/ $ touch newfile $ ls -lh newfile -rw-r--r-- 1 carol carol 0 Jan 18 17:11 newfile
Όπως μπορούμε να δούμε, το αρχείο ανήκει στον χρήστη carol
και στην ομάδα carol
. Αλλά, εάν ο κατάλογος είχε το δικαιώμα SGID, το αποτέλεσμα θα ήταν διαφορετικό. Αρχικά, ας προσθέσουμε το SGID bit στο Sample_Directory
και ας ελέγξουμε τα αποτελέσματα:
$ sudo chmod g+s Sample_Directory/ $ ls -ldh Sample_Directory/ drwxr-sr-x 2 carol users 4,0K Jan 18 17:17 Sample_Directory/
Το s
στα δικαιώματα ομάδας υποδεικνύει ότι το SGID bit έχει οριστεί. Τώρα, ας αλλάξουμε σε αυτόν τον κατάλογο και, ξανά, δημιουργούμε ένα κενό αρχείο με την εντολή touch
:
$ cd Sample_Directory/ $ touch emptyfile $ ls -lh emptyfile -rw-r--r-- 1 carol users 0 Jan 18 17:20 emptyfile
Όπως μπορούμε να δούμε, η ομάδα στην οποία ανήκει το αρχείο είναι users
. Αυτό συμβαίνει επειδή το SGID bit έκανε το αρχείο να κληρονομήσει τον ιδιοκτήτη ομάδας του parent καταλόγου του, ο οποίος είναι users
.
Εφαρμογή UID
Το SUID, γνωστό και ως Set User ID, έχει την οκταδική τιμή 4
και αντιπροσωπεύεται από ένα s
στα δικαιώματα χρήστη στη συμβολική μέθοδο. Ισχύει μόνο για αρχεία και η συμπεριφορά του είναι παρόμοια με το SGID bit, αλλά το process θα εκτελεστεί με τα προνόμια του χρήστη που κατέχει το αρχείο. Τα αρχεία με το SUID bit εμφανίζουν ένα s
που αντικαθιστά το x
στα δικαιώματα για τον χρήστη στην έξοδο του ls -l
:
$ ls -ld test.sh -rwsr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Μπορείτε να συνδυάσετε πολλά ειδικά δικαιώματα σε μία παράμετρο προσθέτοντάς τα μαζί. Έτσι, για να ορίσετε το SGID (τιμή 2
) και το SUID (τιμή 4
) με αριθμητική μέθοδο για το script test.sh
με δικαιώματα 755
, θα πληκτρολογήσετε:
$ chmod 6755 test.sh
Και το αποτέλεσμα θα ήταν:
$ ls -lh test.sh -rwsr-sr-x 1 carol carol 66 Jan 18 17:29 test.sh
Tip
|
Εάν το τερματικό σας υποστηρίζει χρώματα, και σήμερα τα περισσότερα από αυτά υποστηρίζουν, μπορείτε να δείτε γρήγορα εάν αυτά τα ειδικά δικαιώματα έχουν εφαρμοστεί κοιτάζοντας την έξοδο του |
Καθοδηγούμενες Ασκήσεις
-
Δημιουργήστε έναν κατάλογο με το όνομα
emptydir
χρησιμοποιώντας την εντολήmkdir emptydir
. Τώρα, χρησιμοποιώντας τηνls
, παραθέστε τα δικαιώματα για τον κατάλογοemptydir
. -
Δημιουργήστε ένα κενό αρχείο με το όνομα
emptyfile
με την εντολήtouch emptyfile
. Τώρα, χρησιμοποιώντας τοchmod
με συμβολικό τρόπο, προσθέστε δικαιώματα εκτέλεσης για τον κάτοχο του αρχείουemptyfile
και αφαιρέστε τα δικαιώματα εγγραφής και εκτέλεσης για όλους τους άλλους. Κάντε αυτό χρησιμοποιώντας μόνο μία εντολήchmod
. -
Ποια θα είναι τα δικαιώματα για ένα αρχείο που ονομάζεται
text.txt
αφού χρησιμοποιήσετε την εντολήchmod 754 text.txt
; -
Ας υποθέσουμε ότι ένα αρχείο με το όνομα
test.sh
είναι ένα shell script με τα ακόλουθα δικαιώματα και ιδιοκτησία:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Ποια είναι τα δικαιώματα για τον ιδιοκτήτη του αρχείου;
-
Εάν ο χρήστης
john
εκτελέσει αυτό το script, κάτω από ποια δικαιώματα χρήστη θα εκτελεστεί; -
Χρησιμοποιώντας τον αριθμητικό συμβολισμό, ποια θα πρέπει να είναι η σύνταξη του chmod για να “αποκαταστήσετε” την ειδική άδεια που έχει χορηγηθεί σε αυτό το αρχείο;
-
-
Σκεφτείτε αυτό το αρχείο:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Τι είδους αρχείο είναι το
sdb1
; Και ποιος μπορεί να γράψει σε αυτό; -
Σκεφτείτε τα ακόλουθα 4 αρχεία:
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Καταγράψτε τα αντίστοιχα δικαιώματα για κάθε αρχείο και κατάλογο χρησιμοποιώντας τετραψήφιο αριθμητικό συμβολισμό.
Another_Directory
-
foo.bar
-
HugeFile.zip
-
Sample_Directory
-
Ασκήσεις Εξερεύνησης
-
Δοκιμάστε το σε ένα τερματικό: δημιουργήστε ένα κενό αρχείο που ονομάζεται
emptyfile
με την εντολήtouch emptyfile
. Τώρα “μηδενίστε” τα δικαιώματα για το αρχείο μεchmod 000 emptyfile
. Τι θα συμβεί εάν αλλάξετε τα δικαιώματα για τοemptyfile
περνώντας μόνο μία τιμή για τοchmod
στην αριθμητική μέθοδο, όπως τοchmod 4 emptyfile
; Τι γίνεται αν χρησιμοποιήσουμε δύο, όπωςchmod 44 emptyfile
; Τι μπορούμε να μάθουμε για τον τρόπο που τοchmod
διαβάζει την αριθμητική τιμή; -
Μπορείτε να εκτελέσετε ένα αρχείο για το οποίο έχετε δικαίωμα εκτέλεσης, αλλά όχι δικαίωμα ανάγνωσης (
--x
); Γιατί ή γιατί όχι? -
Σκεφτείτε τα δικαιώματα για τον προσωρινό κατάλογο σε ένα σύστημα Linux,
/tmp
:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
Ο χρήστης, η ομάδα και οι άλλοι έχουν πλήρη δικαιώματα. Μπορεί όμως ένας κανονικός χρήστης να διαγράψει οποιαδήποτε αρχεία μέσα σε αυτόν τον κατάλογο; Γιατί συμβαίνει αυτό;
-
Ένα αρχείο που ονομάζεται
test.sh
έχει τα ακόλουθα δικαιώματα:-rwsr-xr-x
, που σημαίνει ότι το SUID bit έχει οριστεί. Τώρα, εκτελέστε τις ακόλουθες εντολές:$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Τι κάναμε; Τι σημαίνει το κεφαλαίο
S
; -
Πώς θα δημιουργήσατε έναν κατάλογο με το όνομα
Box
όπου όλα τα αρχεία ανήκουν αυτόματα στην ομάδαusers
και μπορούν να διαγραφούν μόνο από τον χρήστη που τα δημιούργησε;
Σύνοψη
Ως σύστημα πολλών χρηστών, το Linux χρειάζεται έναν τρόπο να παρακολουθεί ποιος κατέχει και ποιος μπορεί να έχει πρόσβαση σε κάθε αρχείο. Αυτό γίνεται μέσω ενός συστήματος δικαιωμάτων τριών επιπέδων και σε αυτό το μάθημα μάθαμε τα πάντα για το πώς λειτουργεί αυτό το σύστημα.
Σε αυτό το μάθημα μάθατε πώς να χρησιμοποιείτε το ls
για να λαμβάνετε πληροφορίες σχετικά με τα δικαιώματα αρχείων, πώς να ελέγχετε ή να αλλάζετε ποιος μπορεί να δημιουργήσει, να διαγράψει ή να τροποποιήσει ένα αρχείο με το chmod
, τόσο με αριθμητικό όσο και με συμβολικό τρόπο και πώς να αλλάξετε την ιδιοκτησία αρχείων με chown
και chgrp
.
Οι ακόλουθες εντολές συζητήθηκαν σε αυτό το μάθημα:
ls
-
Παραθέστε αρχεία, προαιρετικά με λεπτομέρειες όπως δικαιώματα.
chmod
-
Αλλάξτε τα δικαιώματα ενός αρχείου ή καταλόγου.
chown
-
Αλλάξτε τον ιδιοκτήτη ή/και την ομάδα ενός αρχείου ή καταλόγου.
chgrp
-
Αλλάξτε την ομάδα ιδιοκτησίας ενός αρχείου ή καταλόγου.
Απαντήσεις στις Καθοδηγούμενες Ασκήσεις
-
Δημιουργήστε έναν κατάλογο με το όνομα
emptydir
χρησιμοποιώντας την εντολήmkdir emptydir
. Τώρα, χρησιμοποιώντας τηνls
, παραθέστε τα δικαιώματα για τον κατάλογοemptydir
.Προσθέστε την παράμετρο
-d
στοls
για να δείτε τα χαρακτηριστικά αρχείου ενός καταλόγου, αντί να παραθέσετε τα περιεχόμενά του. Επομένως η απάντηση είναι:ls -l -d emptydir
Επιπλέον πόντοι εάν συγχωνεύσατε τις δύο παραμέτρους σε μία, όπως στο
ls -ld emptydir
. -
Δημιουργήστε ένα κενό αρχείο με το όνομα
emptyfile
με την εντολήtouch emptyfile
. Τώρα, χρησιμοποιώντας τοchmod
με συμβολικό τρόπο, προσθέστε δικαιώματα εκτέλεσης για τον κάτοχο του αρχείουemptyfile
και αφαιρέστε τα δικαιώματα εγγραφής και εκτέλεσης για όλους τους άλλους. Κάντε αυτό χρησιμοποιώντας μόνο μία εντολήchmod
.Σκεφτείτε το ως εξής:
-
“Για τον χρήστη που κατέχει το αρχείο (
u
) προσθέστε (+
) δικαιώματα εκτέλεσης (x
)”, άραu+x
. -
“Για την ομάδα (
g
) και άλλους χρήστες (o
), αφαιρέστε (-
) τα δικαιώματα εγγραφής (w
) και εκτέλεσης (x
)”, άραgo-wx
.Για να συνδυάσουμε αυτά τα δύο σύνολα δικαιωμάτων, προσθέτουμε ένα κόμμα μεταξύ τους. Το τελικό αποτέλεσμα λοιπόν είναι:
chmod u+x,go-wx emptyfile
-
-
Ποια θα είναι τα δικαιώματα για ένα αρχείο που ονομάζεται
text.txt
αφού χρησιμοποιήσω την εντολήchmod 754 text.txt
;Θυμηθείτε ότι στην αριθμητική μέθοδο κάθε ψηφίο αντιπροσωπεύει ένα σύνολο τριών δικαιωμάτων, το καθένα με μια αντίστοιχη τιμή: το read είναι
4
, το write είναι2
, το execute είναι1
και το κανένα δικαίωμα είναι0
. Λαμβάνουμε την τιμή για ένα ψηφίο προσθέτοντας τις αντίστοιχες τιμές για κάθε δικαιώμα. Το7
είναι4+2+1
ήrwx
, το5
είναι4+0+1
, οπότε είναιr-x
και το4
είναι απλώς read ήr--
. Τα δικαιώματα για τοtext.txt
θα είναιrwxr-xr--
-
Ας υποθέσουμε ότι ένα αρχείο με το όνομα
test.sh
είναι ένα shell script με τα ακόλουθα δικαιώματα και ιδιοκτησία:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Ποια είναι τα δικαιώματα για τον ιδιοκτήτη του αρχείου;
Τα δικαιώματα για τον ιδιοκτήτη (2ος έως 4ος χαρακτήρας στην έξοδο του
ls -l
) είναιrwx
, επομένως η απάντηση είναι: “για ανάγνωση, εγγραφή και εκτέλεση του αρχείου”. -
Εάν ο χρήστης
john
εκτελέσει αυτό το script, κάτω από ποια δικαιώματα χρήστη θα εκτελεστεί;Δώστε προσοχή στα δικαιώματα για την ομάδα. Είναι
r-s
, που σημαίνει ότι το SGID bit έχει οριστεί. Η ομάδα στην οποία ανήκει αυτό το αρχείο είναιroot
, επομένως το script, ακόμη και όταν ξεκινά από έναν κανονικό χρήστη, θα εκτελείται με τα πρόνομια της ομάδας που ανήκει το αρχείο. -
Χρησιμοποιώντας τον αριθμητικό συμβολισμό, ποια θα πρέπει να είναι η σύνταξη του chmod για να “αποκαταστήσετε” την ειδική άδεια που έχει χορηγηθεί σε αυτό το αρχείο;
Μπορούμε να “ακυρώσουμε” τα ειδικά δικαιώματα περνώντας ένα 4ο ψηφίο,
0
, στοchmod
. Τα τρέχοντα δικαιώματα είναι755
, επομένως η εντολή πρέπει να είναιchmod 0755
.
-
-
Σκεφτείτε αυτό το αρχείο:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Τι είδους αρχείο είναι το
sdb1
; Και ποιος μπορεί να γράψει σε αυτό;Ο πρώτος χαρακτήρας της εξόδου από το
ls -l
δείχνει το είδος του αρχείου. Τοb
είναι μια συσκευή block, συνήθως ένας δίσκος (εσωτερικός ή εξωτερικός), συνδεδεμένος στο μηχάνημα. Ο κάτοχος (root
) και όλοι οι χρήστες της ομάδαςdisk
μπορούν να γράψουν σε αυτό. -
Σκεφτείτε τα ακόλουθα 4 αρχεία:
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Καταγράψτε τα αντίστοιχα δικαιώματα για κάθε αρχείο και κατάλογο χρησιμοποιώντας τετραψήφιο αριθμητικό συμβολισμό.
Τα αντίστοιχα δικαιώματα, με αριθμητικό συμβολισμό, είναι τα εξής:
Another_Directory
-
Απάντηση:
1755
1
για το sticky bit,755
για τα κανονικά δικαιώματα (rwx
για τον χρήστη,r-x
για την ομάδα και τους άλλους). foo.bar
-
Απάντηση:
0044
Χωρίς ειδικά δικαιώματα (επομένως το πρώτο ψηφίο είναι
0
), χωρίς δικαιώματα για τον χρήστη (---
) και απλά ανάγνωση (r—r--
) για την ομάδα και τους άλλους. HugeFile.zip
-
Απάντηση:
0664
Χωρίς ειδικά δικαιώματα, επομένως το πρώτο ψηφίο είναι
0
.6
(rw-
) για τον χρήστη και την ομάδα,4
(r--
) για τους άλλους. Sample_Directory
-
Απάντηση:
2755
2
για το SGID bit,7
(rwx
) για τον χρήστη,5
(r-x
) για την ομάδα και τους άλλους.
Απαντήσεις στις Ασκήσεις Εξερεύνησης
-
Δοκιμάστε το σε ένα τερματικό: δημιουργήστε ένα κενό αρχείο που ονομάζεται
emptyfile
με την εντολήtouch emptyfile
. Τώρα “μηδενίστε” τα δικαιώματα για το αρχείο μεchmod 000 emptyfile
. Τι θα συμβεί εάν αλλάξετε τα δικαιώματα για τοemptyfile
περνώντας μόνο μία τιμή για τοchmod
στην αριθμητική μέθοδο, όπως τοchmod 4 emptyfile
; Τι γίνεται αν χρησιμοποιήσουμε δύο, όπωςchmod 44 emptyfile
; Τι μπορούμε να μάθουμε για τον τρόπο που τοchmod
διαβάζει την αριθμητική τιμή;Θυμηθείτε ότι “μηδενίσαμε” τα δικαιώματα για το
emptyfile
. Άρα, η αρχική του κατάσταση θα ήταν:---------- 1 carol carol 0 Dec 11 10:55 emptyfile
Τώρα, ας δοκιμάσουμε την πρώτη εντολή,
chmod 4 emptyfile
:$ chmod 4 emptyfile $ ls -l emptyfile -------r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Τα δικαιώματα για τους άλλους άλλαξαν. Και τι γίνεται αν δοκιμάσουμε δύο ψηφία, όπως
chmod 44 emptyfile
;$ chmod 44 emptyfile $ ls -l emptyfile ----r--r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Τώρα, επηρεάστηκαν τα δικαιώματα για την ομάδα και τους άλλους. Από αυτό, μπορούμε να συμπεράνουμε ότι στον αριθμητικό συμβολισμό το
chmod
διαβάζει την τιμή “προς τα πίσω”, από το λιγότερο σημαντικό ψηφίο (άλλοι) έως το πιο σημαντικό (χρήστης). Εάν περάσετε ένα ψηφίο, τροποποιείτε τα δικαιώματα για τους άλλους. Με δύο ψηφία τροποποιείτε την ομάδα και τους άλλους, και με τρία τροποποιείτε τον χρήστη, την ομάδα και τους άλλους και με τέσσερα ψηφία τροποποιείτε τον χρήστη, την ομάδα, τους άλλους και τα ειδικά δικαιώματα. -
Μπορείτε να εκτελέσετε ένα αρχείο για το οποίο έχετε δικαίωμα εκτέλεσης, αλλά όχι δικαίωμα ανάγνωσης (
--x
); Γιατί ή γιατί όχι?Αρχικά, η απάντηση φαίνεται προφανής: εάν έχετε δικαίωμα εκτέλεσης, το αρχείο θα μπορεί να εκτελεστεί. Αυτό βρίσκει εφαρμογή σε προγράμματα σε binary μορφή που εκτελούνται απευθείας απο τον πυρήνα. Ωστόσο, υπάρχουν προγράμματα (π.χ. shell scripts) τα οποία θα πρέπει να διαβαστούν πρώτα, επομένως σε αυτές τις περιπτώσεις το δικαίωμα ανάγνωσης (
r
) πρέπει να οριστεί επιπροσθέτως. -
Σκεφτείτε τα δικαιώματα για τον προσωρινό κατάλογο σε ένα σύστημα Linux,
/tmp
:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
Ο χρήστης, η ομάδα και οι άλλοι έχουν πλήρη δικαιώματα. Μπορεί όμως ένας κανονικός χρήστης να διαγράψει οποιαδήποτε αρχεία μέσα σε αυτόν τον κατάλογο; Γιατί συμβαίνει αυτό;
Το
/tmp
είναι αυτό που ονομάζουμε κατάλογος world writeable, που σημαίνει ότι οποιοσδήποτε χρήστης μπορεί να γράψει σε αυτόν. Αλλά δεν θέλουμε ένας χρήστης να τροποποιεί αρχεία που δημιουργούνται από άλλους, επομένως ορίζεται το sticky bit (όπως υποδεικνύεται από τοt
στα δικαιώματα για others). Αυτό σημαίνει ότι ένας χρήστης μπορεί να διαγράψει αρχεία στο/tmp
, αλλά μόνο εάν δημιούργησε αυτό το αρχείο. -
Ένα αρχείο που ονομάζεται
test.sh
έχει τα ακόλουθα δικαιώματα:-rwsr-xr-x
, που σημαίνει ότι το SUID bit έχει οριστεί. Τώρα, εκτελέστε τις ακόλουθες εντολές:$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Τι κάναμε; Τι σημαίνει το κεφαλαίο
S
;Καταργήσαμε τα δικαιώματα εκτέλεσης για τον χρήστη που κατέχει το αρχείο. Το
s
(ήt
) παίρνει τη θέση τουx
στην έξοδο τουls -l
, επομένως το σύστημα χρειάζεται έναν τρόπο για να δείξει εάν ο χρήστης έχει δικαιώματα εκτέλεσης ή όχι. Αυτό το κάνει αλλάζοντας τον ειδικού χαρακτήρα απο πεζό σε κεφαλαίο.Ένα πεζό
s
στην πρώτη ομάδα δικαιωμάτων σημαίνει ότι ο χρήστης που κατέχει το αρχείο έχει δικαιώματα εκτέλεσης και ότι έχει οριστεί το SUID bit. Ένα κεφαλαίοS
σημαίνει ότι ο χρήστης που κατέχει το αρχείο δεν διαθέτει δικαιώματα εκτέλεσης (-
) και ότι έχει οριστεί το SUID bit.Το ίδιο μπορεί να ειπωθεί για το SGID. Ένα πεζό
s
στη δεύτερη ομάδα δικαιωμάτων σημαίνει ότι η ομάδα στην οποία ανήκει το αρχείο έχει δικαιώματα εκτέλεσης και ότι έχει οριστεί το SGID bit. Ένα κεφαλαίοS
σημαίνει ότι η ομάδα στην οποία ανήκει το αρχείο δεν διαθέτει δικαιώματα εκτέλεσης (-
) και ότι έχει οριστεί το SGID bit.Αυτό ισχύει επίσης για το sticky bit, που αντιπροσωπεύεται από το
t
στην τρίτη ομάδα δικαιωμάτων. Τα πεζόt
σημαίνει ότι το sticky bit έχει οριστεί και ότι οι άλλοι έχουν δικαιώματα εκτέλεσης. Το κεφαλαίοT
σημαίνει ότι το sticky bit έχει οριστεί και ότι οι άλλοι δεν έχουν δικαιώματα εκτέλεσης. -
Πώς θα δημιουργήσατε έναν κατάλογο με το όνομα
Box
όπου όλα τα αρχεία ανήκουν αυτόματα στην ομάδαusers
και μπορούν να διαγραφούν μόνο από τον χρήστη που τα δημιούργησε;Αυτή είναι μια διαδικασία πολλαπλών βημάτων. Το πρώτο βήμα είναι να δημιουργήσετε τον κατάλογο:
$ mkdir Box
Θέλουμε κάθε αρχείο που δημιουργείται μέσα σε αυτόν τον κατάλογο να εκχωρείται αυτόματα στην ομάδα
users
. Μπορούμε να το κάνουμε αυτό ορίζοντας αυτήν την ομάδα ως ιδιοκτήτη του καταλόγου και, στη συνέχεια, ορίζοντας το SGID bit σε αυτόν τον κατάλογο. Πρέπει επίσης να βεβαιωθούμε ότι οποιοδήποτε μέλος της ομάδας μπορεί να γράψει σε αυτόν τον κατάλογο.Δεδομένου ότι δεν μας ενδιαφέρει ποια είναι τα άλλα δικαιώματα και θέλουμε να “γυρίσουμε” μόνο τα ειδικά bits, είναι λογικό να χρησιμοποιήσουμε τη συμβολική μέθοδο:
$ chown :users Box/ $ chmod g+wxs Box/
Σημειώστε ότι εάν ο τρέχων χρήστης δεν ανήκει στην ομάδα
users
, θα πρέπει να χρησιμοποιήσετε την εντολήsudo
πριν από τις παραπάνω εντολές για να κάνετε την αλλαγή ως ο root χρήστης.Τώρα για το τελευταίο μέρος, βεβαιωθείτε ότι μόνο ο χρήστης που δημιούργησε ένα αρχείο επιτρέπεται να το διαγράψει. Αυτό γίνεται ορίζοντας το sticky bit (που αντιπροσωπεύεται από ένα
t
) στον κατάλογο. Θυμηθείτε ότι ορίζεται στα δικαιώματα για τους άλλους (o
).$ chmod o+t Box/
Τα δικαιώματα στον κατάλογο
Box
θα πρέπει να εμφανίζονται ως εξής:drwxrwsr-t 2 carol users 4,0K Jan 18 19:09 Box
Φυσικά, μπορείτε να καθορίσετε το SGID και το sticky bit χρησιμοποιώντας μόνο μία εντολή
chmod
:$ chmod g+wxs,o+t Box/
Επιπλέον πόντοι αν το σκεφτήκατε.