Linux για αρχάριους/Βασικές γνώσεις Unix

Η σημασία των δικαιωμάτων

επεξεργασία

Το UNIX είναι ένα λειτουργικό σύστημα που σχεδιάστηκε σε μία εποχή που δεν υπήρχαν προσωπικοί υπολογιστές, αλλά μόνο ορισμένοι κεντρικοί υπολογιστές τους οποίους χρησιμοποιούσαν ταυτόχρονα πολλοί χρήστες. Κατά συνέπεια, ίσως η πιο θεμελιώδης ανάγκη του σχεδιασμού του, είναι να υπάρχει η δυνατότητα να μπορούν να χρησιμοποιούν τους πόρους του υπολογιστή (πχ τον σκληρό δίσκο, τη μνήμη κτλ) πολλοί διαφορετικοί χρήστες, με τέτοιο τρόπο ώστε τα δεδομένα τους να είναι ασφαλή από τους άλλους χρήστες. Ο τρόπος που επιτυγχάνεται αυτό είναι μέσω της χρήσης ενός ορθολογικού και ευέλικτου συστήματος δικαιωμάτων για τους χρήστες και τα αρχεία του συστήματος.

Η βασική ιδέα του συστήματος αυτού είναι ότι κάθε χρήστης έχει τα ελάχιστα δυνατά δικαιώματα. Έτσι κάθε χρήστης μπορεί να κάνει συγκεκριμένες και απόλυτα καθορισμένες ενέργειες στο σύστημα και τίποτα περισσότερο. Αντίστοιχα, κάθε αρχείο μπορεί να χρησιμοποιηθεί ή να τροποποιηθεί μόνο από τους χρήστες που έχουν το δικαίωμα να κάνουν κάτι τέτοιο, και από κανέναν άλλο. Παραδείγματος χάριν, αν έχουμε δύο χρήστες που ονομάζονται john και jane, ο john δεν μπορεί να σβήσει τα αρχεία της jane και αντιστρόφως.

Σήμερα που τα Unix-like λειτουργικά, όπως το Linux, χρησιμοποιούνται σε προσωπικούς υπολογιστές η εφαρμογή των παραπάνω κανόνων ίσως να φαίνεται ότι προσθέτουν περιττή πολυπλοκότητα, όμως, ακόμη και σε υπολογιστές που χρησιμοποιούνται από ένα και μόνο άτομο, η χρήση των κανόνων του Unix μπορεί να ενισχύσει σημαντικά την ασφάλεια τόσο του υπολογιστή όσο και των δεδομένων μας.

Σημείωση: Στην πράξη υπάρχουν δύο κατηγορίες χρηστών. Οι κανονικοί χρήστες και ο χρήστης root. Η βασική διαφορά τους είναι ότι ο χρήστης root μπορεί να τροποποιήσει τα αρχεία του συστήματος ενώ οι κανονικοί χρήστες όχι.
Προειδοποίηση: Ακόμα και αν δε μας ενδιαφέρει η ασφάλεια, τα δικαιώματα και οι λογαριασμοί είναι αναπόσπαστο μέρος του Unix και έστω κάποια στοιχειώδης γνώση του συστήματος αυτού είναι απαραίτητη για να χρησιμοποιήσουμε τον υπολογιστή μας.
Σημείωση: Η βασική αρχή που διέπει το Linux, όσον αφορά τους users είναι ότι «κάθε χρήστης πρέπει να έχει τα ελάχιστα δυνατά δικαιώματα και μόνο».

Ένα από τα δυνατά σημεία του Linux είναι ότι μας προσφέρει μεγάλη ευελιξία σχετικά με τη διαχείρισή του. Έχουμε τα πλήρη δικαιώματα να κάνουμε ότι αλλαγές μας αρέσουν πάνω σε αυτό και να το προσαρμόσουμε στις ανάγκες μας. Όλα αυτά φυσικά, με την προϋπόθεση ότι ξέρουμε τι κάνουμε. Διότι ένα λάθος μπορεί να καταστρέψει το σύστημα ή να υποβαθμίσει την ασφάλεια του, αφήνοντας το επιρρεπές σε επιθέσεις.

Στην πραγματικότητα, στο Linux μόνο ένας χρήστης έχει τόσο εκτεταμένες ελευθερίες στη χρήση του συστήματος και αυτός δεν είναι άλλος από τον υπερχρήστη (superuser), ο οποίος είναι περισσότερο γνωστός με το όνομα root. Ο root είναι ο πρώτος user που δημιουργείται στο σύστημα και έχει «ειδικές ιδιότητες». Για την ακρίβεια ο root έχει τη δυνατότητα να διαβάσει, να τροποποιήσει και να εκτελέσει οποιοδήποτε αρχείο του συστήματος. Ουσιαστικά, σε ότι αφορά τη διαχείριση του συστήματος, ο root είναι ο «απόλυτος άρχοντας».

Σημείωση: Ο root είναι κάτι αντίστοιχο με τον administrator των Windows. Η διαφορά είναι ότι στα Windows o χρήστης έχει δικαιώματα administrator συνέχεια, δημιουργώντας με τον τρόπο αυτό κενά ασφαλείας χωρίς λόγο. Αντίθετα στο Linux, χρησιμοποιούμε δικαιώματα root μόνο όταν τα χρειαζόμαστε.

Εξαιτίας των εκτεταμένων δικαιωμάτων που έχει ο root, προτείνεται να μη χρησιμοποιείται ο λογαριασμός του, εκτός και αν υπάρχει λόγος. Συνηθισμένοι λόγοι για τη χρήση των δικαιωμάτων του υπερχρήστη είναι:

  • εργασίες σχετικές με τη διαχείριση του συστήματος.
  • εγκατάσταση προγραμμάτων.
  • ... (συμπληρώστε)

Αντί του λογαριασμού root, για την καθημερινή χρήση του υπολογιστή μας, είναι καλύτερο να χρησιμοποιούμε ένα λογαριασμό κανονικού user, o οποίος έχει δικαίωμα να τροποποιεί μόνο τα προσωπικά του αρχεία και να τρέχει προγράμματα που δεν κάνουν αλλαγές στο σύστημα. Με τον τρόπο αυτό περιορίζουμε σημαντικά τους πιθανούς κινδύνους για το σύστημά μας.

Συμβουλή: Επιπρόσθετα, θεωρείται καλή πρακτική κάθε χρήστης του συστήματος να έχει τον δικό του προσωπικό user ώστε να υπάρχει διαχωρισμός μεταξύ των δραστηριοτήτων τους καθώς με τον τρόπο αυτό ελαχιστοποιούνται οι κίνδυνοι για το σύστημα.

sudo & passwordless sudo & su.

Δικαιώματα αρχείων (file permissions)

επεξεργασία

Στο Linux, όπως και σε όλα τα λειτουργικά συστήματα που βασίζονται στο Unix, ισχύουν οι ακόλουθες αρχές:

  1. όλα τα αρχεία ανήκουν (είναι ιδιοκτησία) σε κάποιο user και σε κάποιο group.
  2. όλοι οι χρήστες ανήκουν σε τουλάχιστον ένα ή, συνηθέστερα, περισσότερα groups.

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

Αναλυτικότερα, υπάρχουν τρεις κατηγορίες δικαιωμάτων:

  • Τα δικαιώματα που έχει ο user που είναι ο ιδιοκτήτης του αρχείου - Οwner.
  • Τα δικαιώματα που έχουν οι users που είναι μέλη του group στο οποίο ανήκει το αρχείο - Group.
  • Τα δικαιώματα που έχουν όλοι οι υπόλοιποι users, δηλαδή οι users οι οποίοι δεν είναι ούτε ιδιοκτήτες του αρχείου, ούτε ανήκουν στο group που έχει υπό την ιδιοκτησία του το αρχείο - Other.

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

  • Ανάγνωση (r), η οποία δηλώνει τη δυνατότητα προβολής (ή αντιγραφής) του περιεχομένου του αρχείου.
  • Εγγραφή (w), η οποία δηλώνει τη δυνατότητα τροποποίησης (ή διαγραφής) του περιεχομένου του αρχείου.
  • Εκτέλεση (x). η οποία χρησιμοποιείται αν το αρχείο είναι το εκτελέσιμο κάποιας εφαρμογής.

Τα δικαιώματα πρόσβασης που έχει κάθε κατηγορία δίνονται σε τριάδες της μορφής rwx. Η σειρά των γραμμάτων παίζει σημασία και έτσι, το πρώτο αφορά την δυνατότητα ανάγνωσης, το δεύτερο τη δυνατότητα εγγραφής και το τρίτο τη δυνατότητα εκτέλεσης του αρχείου. Αν ο χρήστης δεν έχει κάποιο από τα δικαιώματα, τότε το αντίστοιχο γράμμα αντικαθίσταται από μία παύλα. Πχ η τριάδα rw- δηλώνει ότι ο χρήστης έχει δικαίωμα μόνο ανάγνωσης και εγγραφής ενώ η τριάδα r-x δηλώνει ότι έχει δικαίωμα μόνο ανάγνωσης και εκτέλεσης. Η τριάδα --- δηλώνει ότι ο χρήστης δεν έχει τη δυνατότητα ούτε να διαβάσει, ούτε να εγγράψει αλλά ούτε και να εκτελέσει το αρχείο.

Τα δικαιώματα πρόσβασης των αρχείων δίνονται μέσω μία αλληλουχίας 10 χαρακτήρων της μορφής -rw-rw-r--, της οποίας ο πρώτος χαρακτήρας δηλώνει το είδος του αρχείου ενώ οι 9 χαρακτήρες που ακολουθούν είναι οι τριάδες που αντιστοιχούν στην κάθε κατηγορία δικαιωμάτων. Ο πρώτος χαρακτήρας παίρνει την τιμή (d) αν το αρχείο είναι κατάλογος, την τιμή (-) αν είναι απλό αρχείο, ενώ αν είναι συντόμευση παίρνει την τιμή (l).

Παράδειγμα 1

επεξεργασία

Προκειμένου να εμφανίσουμε τις ιδιότητες των αρχείων χρησιμοποιούμε την εντολή ls -l. To output της εντολής θα είναι κάτι σαν τη πρώτη γραμμή του κώδικα που ακολουθεί, ενώ η δεύτερη γραμμή είναι η επεξήγησή της:

-rw-rw-r-- 1 vladimir moderators 2.5K Jan 22 21:06 README.txt

permission # username groupname size +---date---+ filename


Δηλαδή, το αρχείο README.txt ανήκει στον user vladimir και στο group moderators ενώ ο πίνακας των δικαιωμάτων πρόσβασης είναι ο -rw-rw-r--. Πιο συγκεκριμένα, από τον πίνακα των δικαιωμάτων πρόσβασης συμπεραίνουμε ότι:

  • Πρόκειται για ένα κανονικό αρχείο (το πρώτο πεδίο είναι το -).
  • Ο χρήστης vladimir ο οποίος είναι ο ιδιοκτήτης του (user-owner) έχει δικαιώματα εγγραφής και ανάγνωσης (τα πεδία 2-4 έχουν τις τιμές rw-).
  • Τα μέλη του group moderators το οποίο είναι ο ιδιοκτήτης του (group-owner) έχουν δικαιώματα εγγραφής και ανάγνωσης (τα πεδία 5-7 έχουν τις τιμές rw-).
  • Όλα οι υπόλοιποι χρήστες έχουν δικαιώματα μόνο ανάγνωσης (τα πεδία 8-10 έχουν τις τιμές r--).

Παράδειγμα 2

επεξεργασία

Παραδείγματος χάριν, ας πούμε ότι εξετάζουμε τα περιεχόμενα του φακέλου project, οποίος βρίσκεται στο home folder του χρήστη μας: <pre<noinclude></noinclude> style="margin-bottom: 0; border-bottom:none; padding-bottom:0.8em; background-color:LightCyan"> $ ls -l ~/project</pre<noinclude></noinclude>> <pre<noinclude></noinclude> style="margin-top: 0; border-top-style:dashed; padding-top: 0.8em; background-color:LightCyan"> drwxr-xr-x 3 john users 4.0K Feb 9 12:28 geo2D/ -rw-r--r-- 1 john moderators 2.5K Jan 22 21:06 README.txt </pre<noinclude></noinclude>>

Όπως βλέπουμε, ο φάκελος project περιέχει 2 αρχεία. Τον φάκελο geo2D, ο οποίος ανήκει στο χρήστη john και στο group users και το απλό αρχείο README.txt το οποίο ανήκει στο χρήστη john και στο group moderators. Όσον αφορά τα δικαιώματα πρόσβασης του φακέλου geo2D:

  • ο john έχει δικαιώματα ανάγνωσης, γραφής και εκτέλεσης (πεδία rwx).
  • τα μέλη του group users έχει δικαιώματα μόνο ανάγνωσης και εκτέλεσης (πεδία r-x).
  • όλοι οι υπόλοιποι χρήστες έχουν δικαιώματα μόνο ανάγνωσης και εκτέλεσης (πεδία r-x).

Ενώ για το αρχείο README.txt:

  • ο john έχει δικαιώματα ανάγνωσης και γραφής (πεδία rw-).
  • τα μέλη του group moderators έχει δικαίωμα μόνο ανάγνωσης (πεδία r--).
  • όλοι οι υπόλοιποι χρήστες έχουν δικαίωμα μόνο ανάγνωσης (πεδία r--).

Octal representation

επεξεργασία
0 ---      indicates no permissions
1 --x      indicates execute permissions
2 -w-      indicates write permissions
3 -wx      indicates write and execute permissions
4 r--      indicates read permissions
5 r-x      indicates read and execute permissions
6 rw-      indicates read and write permissions
7 rwx      indicates read, write, and execute permissions

Αλλαγή δικαιωμάτων

επεξεργασία

chmod

Βασικές ερωτήσεις

επεξεργασία

Πώς καθορίζεται τι δικαιώματα θα έχει ένα αρχείο όταν πρωτοδημιουργείται;

Τα δικαιώματα ενός αρχείου όταν πρωτοδημιουργείται ορίζονται από την παράμετρο umask. Στην πλειοψηφία των περιπτώσεων, η τιμή της ΔΕΝ πρέπει να αλλάζει. Με την default τιμή της, τα απλά αρχεία δημιουργούνται με δικαιώματα -rw-r--r-- και οι φάκελοι με δικαιώματα drwxr-xr-x.

Πώς τροποποιούμε τα δικαιώματα, τον χρήστη-ιδιοκτήτη ή την ομάδα-ιδιοκτήτη ενός αρχείου;

O ενός αρχείου μπορεί να αλλάξει μόνο από τον . Μόνο ο ιδιοκτήτης χρήστης μπορεί να αλλάξει τα δικαιώματα ή την ομάδα-ιδιοκτήτη ενός αρχείου (μέσω της εντολής chmod και της εντολής αντίστοιχα. Τον owner (ιδιοκτήτης-χρήστης) ενός αρχείου μπορεί να τον αλλάξει μόνο ο χρήστης root, μέσω της εντολής chown. Εναλλακτικά οι όποιες αλλαγές, μπορούν να γίνουν και μέσω του file-manager που χρησιμοποιούμε, υπό την προυπόθεση όμως ότι έχουμε τα απαραίτητα δικαιώματα (να είναι δηλαδή ο χρήστης μας owner του αρχείου κτλ).

Συμβουλή: Τα αρχεία έχουν και ορισμένα άλλα προαιρετικά «attributes», τα οποία όμως ξεφεύγουν από τα πλαίσια του οδηγού αυτού. Αν σας ενδιαφέρει το θέμα, μπορείτε να δείτε ένα παράδειγμα εδώ (στα αγγλικά).

Δείτε επίσης

επεξεργασία

Δομή καταλόγων

επεξεργασία

Οι πρώτες εντολές που μαθαίνει συνήθως κανείς κατά την πρώτη του επαφή με το τερματικό αφορούν την περιήγηση του μέσα στους φακέλους του linux. Γι'αυτό θα ήταν προτιμότερο να διαβάσετε πρώτα αυτόν τον οδηγό, πρίν πάτε παρακάτω στις βασικές εντολές.

Η ιεράρχηση των φακέλων είναι λίγο διαφορετική από αυτήν που έχετε συνηθίσει μέχρι τώρα. Στην κορυφή βρίσκεται ο ριζικός φάκελος που ονομάζεται "root" και συμβολίζεται με ένα "slash" ("/" - σε αντίθεση με το "backslash" "\" που χρησιμοποιειται στον κόσμο των Windows). Όλοι οι φακέλοι και όλα τα αρχεία βρίσκονται μέσα σε αυτόν τον ριζικό φάκελο ή σε υποφακέλους αυτού(δεν υπάρχουν, δηλαδή "C:\", "D:\", κλπ). Για να πάρετε μία πρώτη γεύση, ρίξτε μια ματιά στο παρακάτω σχεδιάγραμμα, ώστε να καταλάβετε καλύτερα. Προσοχή, πέραν του root φακέλου, στο Linux υπάρχει και ο root χρήστης. Αυτά τα δύο είναι διαφορετικά πράγματα και δεν πρέπει να συγχέονται μεταξύ τους.

 
Δομή συστήματος αρχείων στο Linux

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

Ιδιαίτερο ενδιαφέρον παρουσιάζει ο φάκελος "/home/" . Εκεί μέσα υπάρχει ένας φάκελος για κάθε χρήστη. Το όνομα του φακέλου είναι ίδιο με το όνομαΧρήστη (username). Για παράδειγμα, εάν το όνομα χρήστη σας είναι "john", τότε ο προσώπικός σας φάκελος είναι ο "/home/john/". Εκεί μέσα βρίσκονται όλα τα προσωπικά αρχεία του χρήστη, συνήθως σε υποφάκελους όπως "Desktop", "Documents", "Music", κλπ. Στο home-folder του χρήστη υπάρχουν και αρχεία και φακέλοι που το ονομά του ξεκινάει με τελεία ("."), γνωστά και ως dot files. Τα dot-files και folders είναι κρυφά και εκεί μέσα αποθηκεύονται, μεταξύ άλλων, οι διάφορες ρυθμίσεις, τα αρχεία και η cache των προγραμμάτων του χρήστη. Για παράδειγμα, ο φάκελος "/home/john/.Skype/" περιέχει αρχεία που αφορούν το Skype του χρήστη John. Οι περισσότεροι file managers δεν εμφανίζουν τα κρυφά αρχεία και φακέλους από προεπιλογή και θα πρέπει να το ενεργοποιήσετε (συνήθως πατώντας τον συνδυασμο "Ctrl+H"). Θέλει ιδιαίτερη προσοχή αν κάνετε backup να μην ξεχάσετε να φυλάξετε τέτοια αρχεία γιατί μπορεί να σας είναι απαραίτητα.


Οι βασικοί υποφάκελοι του ριζικού που μας ενδιαφέρουν είναι κυρίως οι:

Φάκελος Περιγραφή
/ Ο ριζικός φάκελος του συστήματος. Όλοι οι υπόλοιποι είναι υποφάκελοί του.
/home/* Οι προσωπικοί φάκελοι όλων των χρηστών, εκτός του υπερχρήστη.
/root Ο προσωπικός φάκελος του υπερχρήστη.
/etc Εδώ βρίσκονται οι βασικές ρυθμίσεις του συστήματος και των διαφόρων services που τρέχουν σε αυτό (πχ webserver, mailserver κτλ).
/dev Περιέχει ειδικά αρχεία που αντιστοιχούν στις συσκευές του υπολογιστή. Εδώ συνήθως μας ενδιαφέρουν τα αρχεία
"/dev/sda" (ο πρώτος σκληρός δίσκος), "/dev/sdb" (ο δεύτερος), κλπ.
/bin τα απολύτως βασικά προγράμματα που χρειάζεται κανείς για να επικοινωνήσει με την linux συσκευή του, βρίσκονται εδώ μέσα, όπως οι εντολές "pwd" και "cd".
/sbin Περιέχει τα υπόλοιπα προγράμματα του συστήματος.
/usr Περιέχει τις βιβλιοθήκες του συστήματος.
/var Εδώ αποθηκεύονται οι καταγραφές των αρχείων log.
/boot Περιέχει απαραίτητα αρχεία για την εκκίνηση του συστήματος.
/mnt και /media Εδώ προσαρτώνται οι συσκευές με την εντολή "mount".
/tmp Εδώ αποθηκεύονται τα προσωρινά αρχεία.
/opt Εδώ αποθηκεύονται τα επιπρόσθετα προγραμμάτων (add-ons) ή και προγράμματα που αποφάσισε να εγκαταστίσει χειροκίνητα ο χρήστης.


Ένας απλός χρήστης δεν έχει τα δικαιώματα να περιηγείται σε όλους τους φακέλους ή να επεξεργάζεται όλα τα αρχεία, για <link>λόγους ασφαλείας. Συνήθως παραμένει μόνο στον προσωπικό του φάκελο. Οτιδήποτε κάνει έξω από αυτόν τον φάκελο καλό θα ήταν να ξέρει καλά τι κάνει, καθώς επεμβαίνει σε σημαντικά κομμάτια του συστήματος. Τέτοιου είδους ενέργειες χρειάζονται πολλές φορές να εκτελεστούν με δικαιώματα υπερχρήστη, μέσω της εντολής "sudo".

Τα πάντα εμφανίζονται ως αρχεία στο linux. Όλα τα προγράμματα, όλες οι ρυθμίσεις, ακόμα και οι φυσικές συσκευές αντιπροσωπεύονται από αρχεία και αντιμετωπίζονται από το σύστημα ως τέτοια. Στον φάκελο "/dev" βρίσκονται τα αρχεία των φυσικών και εικονικών συσκευών. Μερικά ενδιαφέροντα αρχεία σε αυτόν τον φάκελο είναι:

/dev/null Η μαύρη τρύπα. Οτιδήποτε ανακατευθύνεται εδώ μέσα χάνεται. Συνήθως χρησιμοποιείται για να χαθούν τα μηνύματα από την έξοδο κάποιου προγράμματος χωρίς να γεμίσουν το log του συστημάτος.
/dev/random και /dev/urandom Πηγές που παράγουν τυχαίες τιμές.
/dev/sda, /dev/sdb κλπ Το πρώτο συνήθως αντιπροσωπεύει τον πρώτο σκληρό δίσκο, το δεύτερο τον δεύτερο σκληρό ή κάποιο usb stick. Παλαιότερα οι σκληροί δίσκοι έπαιρναν και το όνομα /dev/hda αντί για sda. Μπορεί να συναντήσετε ακόμα σε υπολογιστές με παλιές εκδόσεις του λειτουργικού ή να το διαβάσετε σε οδηγούς και βιβλία που έχουν γραφτεί πριν από καιρό.
/dev/zero Μία πηγή που παράγει πολλά μηδενικά. Για παράδειγμα μπορούμε να την χρησιμοποιήσουμε για να γεμίσουμε έναν σκληρό δίσκο με μηδενικά.

Αν και η γενική δομή των φακέλων και των αρχείων είναι ίδια σε όλα τα Unix-οειδή συστήματα, ενδέχεται να συναντήσετε διαφορές ανάμεσα στις διάφορες διανομές. Δεν θα βρείτε τους ίδιους φακέλους σε κάθε σύστημα, ούτε τις ίδιες ρυθμίσεις, κλπ. Γι'αυτό αν έχετε κάποιο πρόβλημα θα πρέπει να αναζητάτε την λύση του ειδικά για την συγκεκριμένη διανομή με την οποία δουλεύετε. Όσοι έχουν κάποια εμπειρία με την χρήση τερματικού σε κάποιο BSD ή OS X σύστημα δεν θα δυσκολευτούν να προσαρμοστούν στο linux. Για παράδειγμα, σε ένα σύστημα OS X, αντί για το "/home", υπάρχει ο φάκελος "/Users", ενώ το μεγαλύτερο μέρος (αν όχι όλο) του οδηγού με τις βασικές εντολές θα πρέπει να ισχύει και εκεί.

Δείτε επίσης

επεξεργασία

Βίντεο που εξηγεί τους φακέλους του Linux (στα αγγλικά)