Άδειες συστήματος αρχείων

Τα σύγχρονα συστήματα αρχείων των λειτουργικών συστημάτων έχουν μεθόδους διαχείρισης αδειών ή δικαιωμάτων πρόσβασης που αποδίδουν σε συγκεκριμένους χρήστες και ομάδες χρηστών. Με αυτόν τον τρόπο το σύστημα μπορεί να ελέγχει την ικανότητα των χρηστών να επιφέρουν αλλαγές στα περιεχόμενα του συστήματος αρχείων.

Οι άδειες στο Unix

Κάθε αρχείο ενός λειτουργικού συστήματος της οικογένειας unix χαρακτηρίζεται από κάποιες άδειες που καθορίζουν ποιες διεργασίες έχουν δικαίωμα να το διαβάσουν, γράψουν, εκτελέσουν.
Τα δικαιώματα διαχειρίζονται σε τρεις κλάσεις. Αυτές είναι γνωστές ως χρήστης, ομάδα, και άλλοι. Πρακτικά οι άδειες στο unix είναι μια απλοποιημένη μορφή από λίστες ελέγχου πρόσβασης.
Όταν δημιουργείται ένα αρχείο σε ένα σύστημα unix, οι άδειες του καθορίζονται από την umask της διεργασίας που το δημιουργεί.

Κλάσεις

Στα συστήματα αρχείων λειτουργικών συστημάτων unix κάθε αρχείο και κατάλογος ανήκει σε κάποιον συγκεκριμένο χρήστη. Ο ιδιοκτήτης ενός αντικειμένου αποτελεί την κλάση των χρηστών. Άδειες που ανατίθενται στην κλάση των χρηστών εφαρμόζονται μόνο σε αυτόν τον χρήστη.
Επίσης σε κάθε αρχείο ή κατάλογο ανατίθεται μια ομάδα που αποτελεί την κλάση της ομάδας. Δικαιώματα που ανατίθενται στην κλάση της ομάδας ισχύουν μόνο για τα μέλη της (εκτός από τον ιδιοκτήτη). Ενώ ένα συγκεκριμένο αρχείο μπορεί να ανατεθεί μόνο σε μια ομάδα , ένας χρήστης μπορεί να είναι μέλος σε πολλές ομάδες και μια ομάδα μπορεί να περιλαμβάνει οποιονδήποτε αριθμό χρηστών. Η εντολή "groups" εμφανίζει όλες τις ομάδες στις οποίες ανήκει ένας χρήστης και η εντολή "members" τους χρήστες που ανήκουν σε κάποια ομάδα . Ο διαχειριστής του συστήματος με την εντολή "addgroup" μπορεί να προσθέσει έναν χρήστη σε μια ομάδα.
Οι χρήστες που δεν ανήκουν (σχετικά με ένα αρχείο) είτε στην κλάση των χρηστών (δηλαδή δεν είναι ιδιοκτήτες) ούτε στην κλάση της ομάδας ανήκουν στην κλάση άλλοι.
Οι τελικές άδειες που ισχύουν για έναν χρήστη σε σχέση με ένα αρχείο καθορίζονται με λογική προτεραιότητα. Πχ ο χρήστης στον οποίο ανήκει ένα αρχείο θα έχει και τα τελικά δικαιώματα που αντιστοιχούν στην κλάση χρήστη ανεξάρτητα από τα δικαιώματα που ανατίθενται στην κλάση ομάδα ή άλλοι.

Επιπρόσθετες άδειες

Υπάρχουν τρία ακόμα μπιτ τα οποία καθορίζουν δικαιώματα πρόσβασης και δεν είναι ευρέως γνωστά.

setuid

Το setuid καθορίζει αν το εκτελέσιμο αρχείο θα τρέχει με τις άδειες του ιδιοκτήτη ή τις άδειες αυτού που το κάλεσε. Όταν προσπαθείτε να εκτελέσετε ένα αρχείο και εφόσον έχετε τα δικαιώματα να το εκτελέσετε τότε κανονικά αυτό εκτελείται με τα δικαιώματα τα δικά σας. Είναι χρήσιμο όμως να μπορεί να εκτελεστεί το αρχείο με τα δικαιώματα του ιδιοκτήτη του αρχείου και όχι με τα δικαιώματα αυτού που το εκτελεί. Κλασικό παράδειγμα είναι τα παιχνίδια στα οποία θέλουμε να κρατάμε το σκορ για όλους τους χρήστες του υπολογιστή. Σε αυτές τις περιπτώσεις συνήθως δημιουργείται ένας χρήστης που κρατάει το σκορ (χωρίς άλλα δικαιώματα και χωρίς καν δικαίωμα εισόδου στο σύστημα).
Το setuid είχε "εφευρεθεί" από τον Dennis MacAlistair Ritchie. Είχε πατενταριστεί από την AT&T αλλά το κόστος παρακολούθησης των δικαιωμάτων υπερέβαινε τα έσοδα οπότε η εταιρεία το παραχώρησε σαν κοινό κτήμα (public domain). Η παραχώρηση αυτή θεωρείται εξαιρετικά σημαντική για την κοινότητα του Linux αφού χωρίς αυτή τη λειτουργία θα ήταν τελείως διαφορετικό σήμερα.

setgid

Αντίστοιχο με το setuid, αλλά επιβάλλει το να τρέχει το εκτελέσιμο με τις άδειες της ομάδας. Κανονικά σε ένα αρχείο που δημιουργείται ανήκει αυτόματα στην ομάδα που ανήκει και ο χρήστης που το δημιούργησε. Αν έχει "τεθεί" το setgid σε φάκελο, τότε τα αρχεία που δημιουργούνται μέσα σε αυτόν ανήκουν αυτόματα στην ομάδα που ανήκει ο φάκελος. Εννοείται, βέβαια, ότι ο ιδιοκτήτης του αρχείου μπορεί να αλλάξει την ομάδα αν θέλει.

sticky bit

Στην αρχή χρησίμευε για να διατηρεί στη μνήμη ένα εκτελέσιμο αρχείο, όταν τελείωνε τη λειτουργία του, ώστε να μην χρειάζεται να ξαναδιαβαστεί από το αποθηκευτικό μέσο. Έτσι, αν κάποιος το χρησιμοποιούσε πολλές φορές, δεν θα χρειαζόταν να ξαναδιαβαστεί ο δίσκος ή η μαγνητοταινία. Με τα σημερινά γρήγορα αποθηκευτικά μέσα, σπάνια χρειάζεται γι αυτήν τη διαδικασία και είχε περάσει στην αφάνεια. Τώρα χρησιμοποιείται για να προσδιορίσει ποιος μπορεί να διαγράψει τα αρχεία ενός φακέλου. Πολύ χρήσιμο για υποφακέλους μέσα σε κοινόχρηστους φακέλους. Για παράδειγμα στον φάκελο /tmp μπορεί να δημιουργήσει κάποιος έναν φάκελο και να θέσει το sticky bit. Τα αρχεία που θα δημιουργεί θα μπορεί μόνο αυτός να τα διαγράφει.