Linux για αρχάριους/Βασικές γνώσεις Unix
Η σημασία των δικαιωμάτων
[επεξεργασία]Το UNIX είναι ένα λειτουργικό σύστημα που σχεδιάστηκε σε μία εποχή που δεν υπήρχαν προσωπικοί υπολογιστές, αλλά μόνο ορισμένοι κεντρικοί υπολογιστές τους οποίους χρησιμοποιούσαν ταυτόχρονα πολλοί χρήστες. Κατά συνέπεια, ίσως η πιο θεμελιώδης ανάγκη του σχεδιασμού του, είναι να υπάρχει η δυνατότητα να μπορούν να χρησιμοποιούν τους πόρους του υπολογιστή (πχ τον σκληρό δίσκο, τη μνήμη κτλ) πολλοί διαφορετικοί χρήστες, με τέτοιο τρόπο ώστε τα δεδομένα τους να είναι ασφαλή από τους άλλους χρήστες. Ο τρόπος που επιτυγχάνεται αυτό είναι μέσω της χρήσης ενός ορθολογικού και ευέλικτου συστήματος δικαιωμάτων για τους χρήστες και τα αρχεία του συστήματος.
Η βασική ιδέα του συστήματος αυτού είναι ότι κάθε χρήστης έχει τα ελάχιστα δυνατά δικαιώματα. Έτσι κάθε χρήστης μπορεί να κάνει συγκεκριμένες και απόλυτα καθορισμένες ενέργειες στο σύστημα και τίποτα περισσότερο. Αντίστοιχα, κάθε αρχείο μπορεί να χρησιμοποιηθεί ή να τροποποιηθεί μόνο από τους χρήστες που έχουν το δικαίωμα να κάνουν κάτι τέτοιο, και από κανέναν άλλο. Παραδείγματος χάριν, αν έχουμε δύο χρήστες που ονομάζονται john
και jane
, ο john
δεν μπορεί να σβήσει τα αρχεία της jane
και αντιστρόφως.
Σήμερα που τα Unix-like λειτουργικά, όπως το Linux, χρησιμοποιούνται σε προσωπικούς υπολογιστές η εφαρμογή των παραπάνω κανόνων ίσως να φαίνεται ότι προσθέτουν περιττή πολυπλοκότητα, όμως, ακόμη και σε υπολογιστές που χρησιμοποιούνται από ένα και μόνο άτομο, η χρήση των κανόνων του Unix μπορεί να ενισχύσει σημαντικά την ασφάλεια τόσο του υπολογιστή όσο και των δεδομένων μας.
Users
[επεξεργασία]Ένα από τα δυνατά σημεία του Linux είναι ότι μας προσφέρει μεγάλη ευελιξία σχετικά με τη διαχείρισή του. Έχουμε τα πλήρη δικαιώματα να κάνουμε ότι αλλαγές μας αρέσουν πάνω σε αυτό και να το προσαρμόσουμε στις ανάγκες μας. Όλα αυτά φυσικά, με την προϋπόθεση ότι ξέρουμε τι κάνουμε. Διότι ένα λάθος μπορεί να καταστρέψει το σύστημα ή να υποβαθμίσει την ασφάλεια του, αφήνοντας το επιρρεπές σε επιθέσεις.
Στην πραγματικότητα, στο Linux μόνο ένας χρήστης έχει τόσο εκτεταμένες ελευθερίες στη χρήση του συστήματος και αυτός δεν είναι άλλος από τον υπερχρήστη (superuser), ο οποίος είναι περισσότερο γνωστός με το όνομα root
. Ο root
είναι ο πρώτος user που δημιουργείται στο σύστημα και έχει «ειδικές ιδιότητες». Για την ακρίβεια ο root έχει τη δυνατότητα να διαβάσει, να τροποποιήσει και να εκτελέσει οποιοδήποτε αρχείο του συστήματος. Ουσιαστικά, σε ότι αφορά τη διαχείριση του συστήματος, ο root
είναι ο «απόλυτος άρχοντας».
Εξαιτίας των εκτεταμένων δικαιωμάτων που έχει ο root, προτείνεται να μη χρησιμοποιείται ο λογαριασμός του, εκτός και αν υπάρχει λόγος. Συνηθισμένοι λόγοι για τη χρήση των δικαιωμάτων του υπερχρήστη είναι:
- εργασίες σχετικές με τη διαχείριση του συστήματος.
- εγκατάσταση προγραμμάτων.
- ... (συμπληρώστε)
Αντί του λογαριασμού root, για την καθημερινή χρήση του υπολογιστή μας, είναι καλύτερο να χρησιμοποιούμε ένα λογαριασμό κανονικού user, o οποίος έχει δικαίωμα να τροποποιεί μόνο τα προσωπικά του αρχεία και να τρέχει προγράμματα που δεν κάνουν αλλαγές στο σύστημα. Με τον τρόπο αυτό περιορίζουμε σημαντικά τους πιθανούς κινδύνους για το σύστημά μας.
su/sudo/gksudo
[επεξεργασία]sudo & passwordless sudo & su.
Groups
[επεξεργασία]Δικαιώματα αρχείων (file permissions)
[επεξεργασία]Στο Linux, όπως και σε όλα τα λειτουργικά συστήματα που βασίζονται στο Unix, ισχύουν οι ακόλουθες αρχές:
- όλα τα αρχεία ανήκουν (είναι ιδιοκτησία) σε κάποιο user και σε κάποιο group.
- όλοι οι χρήστες ανήκουν σε τουλάχιστον ένα ή, συνηθέστερα, περισσότερα 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 του αρχείου κτλ).
Δείτε επίσης
[επεξεργασία]- http://linux-blog.org/linux-file-permissions-groups-and-users/
- http://library.linode.com/using-linux/users-and-groups#sph_administering-file-permissions
- http://www.yolinux.com/TUTORIALS/LinuxTutorialManagingGroups.html
- http://www.tuxfiles.org/linuxhelp/filepermissions.html
Δομή καταλόγων
[επεξεργασία]Οι πρώτες εντολές που μαθαίνει συνήθως κανείς κατά την πρώτη του επαφή με το τερματικό αφορούν την περιήγηση του μέσα στους φακέλους του linux. Γι'αυτό θα ήταν προτιμότερο να διαβάσετε πρώτα αυτόν τον οδηγό, πρίν πάτε παρακάτω στις βασικές εντολές.
Η ιεράρχηση των φακέλων είναι λίγο διαφορετική από αυτήν που έχετε συνηθίσει μέχρι τώρα. Στην κορυφή βρίσκεται ο ριζικός φάκελος που ονομάζεται "root" και συμβολίζεται με ένα "slash" ("/" - σε αντίθεση με το "backslash" "\" που χρησιμοποιειται στον κόσμο των Windows). Όλοι οι φακέλοι και όλα τα αρχεία βρίσκονται μέσα σε αυτόν τον ριζικό φάκελο ή σε υποφακέλους αυτού(δεν υπάρχουν, δηλαδή "C:\", "D:\", κλπ).
Για να πάρετε μία πρώτη γεύση, ρίξτε μια ματιά στο παρακάτω σχεδιάγραμμα, ώστε να καταλάβετε καλύτερα.
Προσοχή, πέραν του root φακέλου, στο Linux υπάρχει και ο root χρήστης. Αυτά τα δύο είναι διαφορετικά πράγματα και δεν πρέπει να συγχέονται μεταξύ τους.
(Το σχεδιάγραμμα δεν περιέχει όλους τους βασικούς φακέλους,
για λόγους απλότητας και ευκολίας. Εάν θέλετε μια πιο πλήρη εικόνα,
μπορείτε να ρίξετε μία ματιά εδώ.)
Ιδιαίτερο ενδιαφέρον παρουσιάζει ο φάκελος "/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 (στα αγγλικά)