Τι είναι οι οκταδικές και συμβολικές λειτουργίες chmod;

Το chmod ορίζει τα δικαιώματα ενός αρχείου σε Linux, macOS και άλλα συστήματα Unix και τα δέχεται σε δύο σημειογραφίες. Μια οκταδική λειτουργία, όπως η 755, έχει ένα ψηφίο για τον κάτοχο, την ομάδα και όλους τους υπόλοιπους, όπου η ανάγνωση είναι 4, η εγγραφή είναι 2 και η εκτέλεση είναι 1. Μια συμβολική λειτουργία, όπως η u=rwx,g=rx,o=rx, ονομάζει τις κατηγορίες (u κάτοχος, g ομάδα, o άλλοι, a όλοι) και τα δικαιώματα (r, w, x) αντίστοιχα.

Οι συμβολικές λειτουργίες μπορούν επίσης να τροποποιούν τα δικαιώματα αντί να τα ορίζουν όλα: η u+x προσθέτει δικαίωμα εκτέλεσης στον κάτοχο, η go-w αφαιρεί το δικαίωμα εγγραφής από την ομάδα και τους άλλους και η g=u αντιγράφει τα δικαιώματα του κατόχου στην ομάδα. Μια οκταδική λειτουργία ορίζει πάντα κάθε δικαίωμα, επομένως το οκταδικό αποτέλεσμα μιας αλλαγής εξαρτάται από τη λειτουργία που είχε προηγουμένως το αρχείο.

Περιγραφή εργαλείου

Αυτό το εργαλείο μετατρέπει λειτουργίες chmod μεταξύ οκταδικής και συμβολικής σημειογραφίας. Επιλέξτε τη σημειογραφία προέλευσης και προορισμού ή αφήστε την προέλευση στην αυτόματη ανίχνευση: εισαγάγετε 755 για να λάβετε u=rwx,g=rx,o=rx ή εισαγάγετε μια συμβολική λειτουργία για να λάβετε την οκταδική τιμή. Για αλλαγές όπως u+x ή a+X, εισαγάγετε την τρέχουσα λειτουργία του αρχείου και δείτε τη λειτουργία που θα άφηνε το chmod. Μπορείτε επίσης να επικολλήσετε μια συμβολοσειρά δικαιωμάτων από την ls -l, όπως -rwxr-xr-x, ή μια ολόκληρη εντολή chmod.

Παραδείγματα

Οκταδική Συμβολική ls -l Τυπική χρήση
644 u=rw,go=r -rw-r--r-- Κανονικά αρχεία
755 u=rwx,go=rx -rwxr-xr-x Script, προγράμματα και κατάλογοι
600 u=rw,go= -rw------- Ιδιωτικά αρχεία, όπως κλειδιά SSH
2775 u=rwx,g=rwxs,o=rx drwxrwsr-x Κοινόχρηστοι κατάλογοι που διατηρούν την ομάδα τους
1777 a=rwx,+t drwxrwxrwt /tmp και άλλοι κοινόχρηστοι προσωρινοί φάκελοι
4755 u=rwxs,go=rx -rwsr-xr-x Προγράμματα όπως το passwd

Δυνατότητες

  • Μετατρέπει οκταδική σημειογραφία σε συμβολική και συμβολική σε οκταδική, με κουμπί εναλλαγής για αλλαγή κατεύθυνσης
  • Εντοπίζει τη σημειογραφία της λειτουργίας που εισαγάγετε ή πραγματοποιεί τη μετατροπή από τη σημειογραφία που επιλέγετε
  • Εφαρμόζει σχετικές αλλαγές, όπως u+x, go-w, a=r,u+w, g=u και a+X, σε μια τρέχουσα λειτουργία
  • Υποστηρίζει τα setuid, setgid και το sticky bit (s, t και τετραψήφιες οκταδικές λειτουργίες)
  • Γράφει τη συμβολική λειτουργία πλήρως (u=rwx,g=rx,o=rx) ή σε συμπτυγμένη μορφή (u=rwx,go=rx)
  • Διαβάζει και γράφει συμβολοσειρές δικαιωμάτων ls -l, συμπεριλαμβανομένων των s, S, t και T
  • Δέχεται επικολλημένες εντολές, όπως sudo chmod -R 755 dir
  • Υποδεικνύει τον ακριβή χαρακτήρα όταν μια λειτουργία δεν είναι έγκυρη

Πώς λειτουργεί

Μια οκταδική λειτουργία διαβάζεται ως έως τέσσερα ψηφία: το προαιρετικό πρώτο ψηφίο περιέχει τα setuid (4), setgid (2) και sticky (1), ενώ τα άλλα τρία περιέχουν τα δικαιώματα του κατόχου, της ομάδας και των άλλων. Μια συμβολική λειτουργία διαβάζεται ρήτρα προς ρήτρα, σύμφωνα με τη γραμματική POSIX, και εφαρμόζεται στην τρέχουσα λειτουργία με τον τρόπο που το GNU chmod στο Linux:

  • Το + προσθέτει δικαιώματα, το - τα αφαιρεί και το = τα ορίζει και διαγράφει τα υπόλοιπα για τις αναφερόμενες κατηγορίες.
  • Το X προσθέτει δικαίωμα εκτέλεσης μόνο σε καταλόγους και σε αρχεία που έχουν ήδη δικαίωμα εκτέλεσης για κάποιον.
  • Το s ορίζει το setuid μαζί με το u και το setgid μαζί με το g. Το t ορίζει το sticky bit μαζί με τα o, a ή χωρίς κατηγορία.
  • Χωρίς κατηγορία, όπως στην +x, η αλλαγή εφαρμόζεται σε όλους, εκτός από τα bit που αποκλείονται από το umask.
  • Σε καταλόγους, τα setuid και setgid παραμένουν όπως είναι, εκτός αν τα ορίζει ρητά η λειτουργία, όπως στην g-s.

Η συμβολική έξοδος ορίζει ρητά κάθε bit, επομένως σε ένα αρχείο δίνει το ίδιο αποτέλεσμα ανεξάρτητα από τη λειτουργία που είχε προηγουμένως το αρχείο. Το sticky bit γράφεται ως ξεχωριστή ρήτρα +t, επειδή τόσο το GNU όσο και το BSD chmod το δέχονται σε αυτή τη μορφή.

Συμβουλές

  • Χρησιμοποιήστε την a+X με την chmod -R, ώστε οι κατάλογοι να μπορούν να διασχίζονται χωρίς να γίνονται όλα τα αρχεία εκτελέσιμα.
  • Η chmod 755 σε έναν κατάλογο δεν καταργεί το setgid με το GNU chmod. Χρησιμοποιήστε chmod 00755 ή g-s για να το αφαιρέσετε.
  • Το Ansible και πολλά αρχεία ρυθμίσεων απαιτούν ένα αρχικό μηδενικό, όπως στο 0755. Ενεργοποιήστε την επιλογή «Να εμφανίζονται πάντα 4 οκταδικά ψηφία» για να το λαμβάνετε.
  • Μια . ή ένα + μετά από μια συμβολοσειρά ls -l υποδεικνύει ένα context SELinux ή ένα ACL. Χρησιμοποιήστε την getfacl για να δείτε τις εγγραφές ACL, τις οποίες δεν εμφανίζει η λειτουργία.