« Επιστροφή στις Δικτυακές Κάμερες
« Επιστροφή στα Mini Fixed Domes και Δικτυακά Domes
« Επιστροφή στα Υπέρυθρα / Αντιβανδαλιστικά Domes
Όλα
ξεκίνησαν (όπως πάντα, άλλωστε) μερικές δεκαετίες πριν. Οι υπολογιστές της εποχής, εκτός από ογκώδεις και
δύσχρηστοι, ήταν πλήρως ασύμβατοι μεταξύ τους, χαρακτηρίζονταν από διαφορετικές δυνατότητες και φυσικά
διαφοροποιούνταν σημαντικά σε επιδόσεις. Έτσι, κάθε μηχάνημα είχε το δικό του λειτουργικό σύστημα και κατ’
επέκταση το δικό του περιβάλλον εργασίας και τρόπο χρήσης. Κάθε χρήστης εξειδικευόταν σε συγκεκριμένο τύπο
υπολογιστή και, όταν παρουσιαζόταν η ανάγκη να εργαστεί σε κάποιον άλλο, χρειαζόταν επανεκπαίδευση...
Σύντομα διεφάνη ότι το παραπάνω πρόβλημα απαιτούσε επειγόντως λύση. Αυτή υλοποιήθηκε στο λειτουργικό
σύστημα ονόματι Unix. Το εν λόγω λειτουργικό, σχεδιασμένο από μια ομάδα προγραμματιστών της Bell Labs, ήταν ικανό
να εκτελείται σε κάθε υπολογιστή, προσφέροντας ένα ενιαίο περιβάλλον εργασίας. Βέβαια, η δυνατότητα αυτή του
Unix δεν ήταν τυχαία, αλλά αποτελούσε απόρροια συγκεκριμένων επιλογών που υιοθετήθηκαν κατά τη σχεδίαση του. Ας τις εξετάσουμε εν τάχει:
Απλότητα και ευελιξία.
Σε αντίθεση με άλλα λειτουργικά συστήματα, το Unix στηριζόταν σε ένα σύνολο μικρών, ανεξάρτητων και απόλυτα
εξειδικευμένων εργαλείων. Η δύναμή του πήγαζε από τους μηχανισμούς που επέτρεπαν το συνδυασμό επιμέρους
εργαλείων για την εκτέλεση οσοδήποτε πολύπλοκων εργασιών.
Ανάπτυξη σε γλώσσα C. Τα λειτουργικά συστήματα της εποχής
ήταν γραμμένα σε γλώσσα μηχανής. Ως αποτέλεσμα, για την ενδεχόμενη μετανάστευσή τους σε έναν υπολογιστή
διαφορετικής αρχιτεκτονικής απαιτούνταν γράψιμο από την αρχή! Αντίθετα, για την ανάπτυξη του Unix
δημιουργήθηκε και χρησιμοποιήθηκε η γλώσσα C. Έτσι, για την εκτέλεση του σε διαφορετικά μηχανήματα χρειαζόταν
τροποποιήσεις μόνο σε ένα μικρό τμήμα του κώδικα (τον πυρήνα ή kernel, που μεσολαβεί μεταξύ του υλικού και των
εφαρμογών), καθώς και μια απλή αναμεταγλώτιση (recompilation).
Ανακύκλωση κώδικα.
Η απλότητα και η ευελιξία που χαρακτήριζαν τη λειτουργία του Unix επεκρινόταν και στην αρχιτεκτονική του. Αυτό άλλωστε το επέτρεπε και η γλώσσα C.
Κάθε εφαρμογή δεν γραφόταν ως ένα ενιαίο και αδιαίρετο πρόγραμμα, αλλά ως ένα σύνολο υποπρογραμμάτων.
Επιπρόσθετα, πολλές φορές επαναχρησιμοποιούνταν ρουτίνες αποθηκευμένες σε βιβλιοθήκες (libraries), που δεν είναι τίποτε άλλο από
ξεχωριστές οντότητες λογισμικού. Με τον τρόπο αυτό προγραμματιστικά προβλήματα που απαντώνται συχνά λύνονται μόνο μια φορά!
Καλοκαιράκι του 1991. Στο Ελσίνκι, βέβαια, δεν κάνει και τόση ζέστη! Ο Linus Torvalds έχει αρχίσει να προετοιμάζεται για τη δημιουργία
του λειτουργικού του συστήματος και συγκεντρώνει τις απαραίτητες πληροφορίες. Το Linux – αν και τότε ο δημιουργός του δεν σκεφτόταν καν
πως θα το βαφτίσει – έπρεπε να είναι πλήρως συμβατό με το Unix. Για τον λόγο αυτό ο Linus χρειαζόταν κάθε πληροφορία σχετική με το πρότυπο
POSIX. Έστειλε, λοιπόν, στα newsgroup, το ακόλουθο μήνυμα:
From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
Newsgroups: comp.os.minix
Subject: Gcc?1.40 and a posix?question
Message?ID: 1991Jul13.100050.9886@klaava.Helsinki.FI
Date: 3 Jul 91 10:00:50 GMT
Hello netlanders,
Due to a project I’m working on (in minix), I’m interested in the posix standard definition. Could somebody please point me
to a (preferably) machine?readable format of the latest posix rules? Ftp?sites would be nice.
|
Επιστροφή στις ρίζες.
Η περίοδος που δημιουργήθηκε το Unix πέρασε. Μαζί της χάθηκε και το μεγάλο πρόβλημα, στο οποίο έδινε λύση το λειτουργικό της Bell labs. Τα πλεονεκτήματα
που πρόσφερε το Unix ήταν πολλά, αλλά εξαιτίας προβλημάτων που είχαν να κάνουν περισσότερο με επιχειρηματικές
παρά με τεχνικές αποφάσεις, το λειτουργικό οδηγήθηκε σε πολυδιάσπαση και μοιραία έχασε σε δημοτικότητα.
Μολαταύτα εξακολούθησε να χρησιμοποιείται στα πανεπιστήμια και στα ερευνητικά κέντρα. Όλα αυτά μέχρι
το 1991. Την περίοδο αυτή ένας φοιτητής του τμήματος πληροφορικής στο Πανεπιστήμιο του Ελσίνκι αποφάσισε να
δημιουργήσει έναν κλώνο του Unix, τον οποίο θα μπορούσαν να χρησιμοποιούν όλοι ελεύθερα (σε αντίθεση με το
εμπορικό και πανάκριβο Unix). Ο φοιτητής αυτός ήταν ο Linus Torvalds και το λειτουργικό του σύστημα θα το ονόμαζε Linux (το όνομα
αποτελεί ένα λογοπαίγνιο που προέρχεται από τις λέξεις Linus και Unix).
Για την ανάπτυξη του Linux επρόκειτο, ουσιαστικά, για ένα πυρήνα – ο Torvalds χρησιμοποίησε τη γλώσσα C καθώς και ένα
σύνολο εργαλείων, τα οποία, όπως ήταν αναμενόμενο, προστέθηκαν και στο ίδιο το λειτουργικό. Τα εργαλεία αυτά είχαν
αναπτυχθεί από προγραμματιστές που εργάζονταν στο project GNU (www.gnu.org) και υποστηρίζονταν από τον οργανισμό FSF (Free
Software Foundation, www.fsf.org).
Πρακτικά, ο πυρήνας Linux ήταν δημιούργημα του Linus, ενώ ένα μεγάλο σύνολο εφαρμογών και εργαλείων γύρω
από τον πυρήνα ήταν προϊόντα του project GNU. Για το λόγο αυτό το λειτουργικό σύστημα του Torvalds αναφέρεται πολύ συχνά και ως GNU/Linux.
Όπως αναφέραμε και νωρίτερα, ο Linus επιθυμούσε το δημιούργημά του να είναι ελεύθερα και αδέσμευτα διαθέσιμο σε
οποιονδήποτε ενδιαφερόμενο. Μάλιστα, ο Linus ήθελε το πνευματικό του παιδί να είναι ελεύθερο όχι μόνο σε εκτελέσιμη
μορφή, αλλά και σε πηγαία (source code, δηλαδή με τη μορφή του κώδικα σε γλώσσα C). Για το λόγο αυτό ο πυρήνας καθώς και ένα
μεγάλο μέρος των εφαρμογών που γράφτηκαν και γράφονται για Linux, εκδίδονται υπό την άδεια χρήσης GNU GPL
(www.gnu.org/licenses/licenses.html). Η εν λόγω άδεια στηρίζεται στις αρχές που προσπαθεί να διαφυλάξει ο οργανισμός FSF και, με απλά
λόγια, προστατεύει την ελεύθερη διακίνηση της γνώσης, καθώς και αλλά θεμελιώδη δικαιώματα. Δικαιώματα που,
σύμφωνα με τον εμπνευστή της, τον Richard Stallman (www.stallman.org), πρέπει να έχει κάθε χρήστης υπολογιστή. Για να πετύχει η
όλη ιδέα, η άδεια GNU GPL εξασφαλίζει την πρόσβαση στον πηγαίο κώδικα κάθε προγράμματος που εκδίδεται υπό την «αιγίδα»
της, ενώ επιτρέπει στον καθένα να αναδιανείμει το πρόγραμμα, αφού κάνει όποιες και όσες τροποποιήσεις επιθυμεί!
Το Linux σήμερα.
Στα πρώτα δειλά του βήματα το Linux υποστήριζε ένα περιορισμένο σύνολο υλικού. Ωστόσο, πολλοί αξιόλογοι
προγραμματιστές που μπορούσαν να εκτιμήσουν την αξία του ασχολήθηκαν μαζί του και έγραψαν οδηγούς για μια
πληθώρα περιφερειακών και άλλων συσκευών. Σήμερα, η λίστα με το υλικό που υποστηρίζει το Linux μεγαλώνει
συνεχώς και ταυτόχρονα αυξάνει και η δημοτικότητά του. Επίσης, με την πάροδο του χρόνου παρουσιάστηκαν και εκδόσεις
για υπολογιστές διαφόρων αρχιτεκτονικών. Έτσι, το Linux μπορεί να εκτελεστεί σε υπολογιστές με
επεξεργαστές ALPHA, SPARC, ARM, PowerPC και, φυσικά, σε όλους όσοι προέρχονται από τις Intel και AMD.
Αποτέλεσμα της ραγδαίας ανάπτυξης του Linux είναι το γεγονός της πανταχού παρουσίας του: από το PC στο σπίτι ή στο
γραφείο, στα υπέρ-υπολογιστικά συστήματα που χρησιμοποιούνται σε ερευνητικά κέντρα και σε συστήματα
κατανεμημένης υπολογιστικής ισχύος (clusters), όπου επιστρατεύονται, π.χ., σε μεγάλα δικτυακά καταστήματα ή σε
διάφορα κινηματογραφικά στούντιο (τα γραφικά σε ταινίες όπως ο «Τιτανικός» και το «Shrek» δημιουργήθηκαν σε cluster που
έτρεχαν Linux).
Τα τελευταία χρόνια το Linux άρχισε να εμφανίζεται και σε διάφορες μικροσυσκευές. Σε αυτές ανήκουν μικροί
δρομολογητές (routers), δικτυακές κάμερες, υπολογιστές παλάμης, κάποιες συσκευές κινητής τηλεφωνίας και πολλές άλλες,
που φέρουν επεξεργαστή ή μικροελεγκτή.
Η άδεια χρήσης GNU GPL.
Η άδεια GNU GPL έχει στόχο να εξασφαλίσει την ελευθερία κάθε χρήστη, όπως αυτή περιγράφεται από το «Κίνημα του Ελεύθερου Λογισμικού»
(FSM, Free Software Movement). Η ελευθερία του χρήστη, σύμφωνα με το FSM, έχει τις ακόλουθες τέσσερις έννοιες:
(0). Ελευθερία να εκτελεί ένα πρόγραμμα για οποιονδήποτε σκοπό και σε όποιους ή όσους υπολογιστές επιθυμεί.
(1).Ελευθερία να μελετά τον τρόπο λειτουργίας του προγράμματος και να τον μεταβάλλει, ώστε να ικανοποιεί
τις όποιες ανάγκες του.
(2). Ελευθερία να αναδιανέμει το πρόγραμμα προς όφελος και άλλων χρηστών.
(3). Ελευθερία να αναδιανέμει τροποποιημένες, πιθανώς βελτιωμένες, εκδόσεις του
προγράμματος, προς ακόμα μεγαλύτερο όφελος της κοινότητας χρηστών.
Σκόπιμη η αρίθμηση των ελευθεριών ξεκινά από το 0 και όχι από το 1! Αυτό γίνεται στο πλαίσιο ενός αστείου, το
οποίο είναι αρκετά διάσημο στους κύκλους των βετεράνων προγραμματιστών... Αξίζει να παρατηρήσουμε ότι ένα
προαπαιτούμενο, για την εξασφάλιση της δεύτερης και τέταρτης ελευθερίας, είναι το εκτελέσιμο πρόγραμμα να συνοδεύεται πάντα από
τον πηγαίο κώδικα. Επίσης, προσοχή χρειάζεται και στην ερμηνεία του όρου «Free», ο οποίος, κατά το Free Software
Movement, δεν αναφέρεται στο κόστος! Με άλλα λόγια, ένα πρόγραμμα που εκδίδεται υπό την άδεια GNU GPL είναι «ελεύθερο»
αλλά δεν είναι κατ’ ανάγκη δωρεάν.
|
Linux για όλους. Ως προϊόν μιας μεγάλης κοινότητας προγραμματιστών, το Linux διαθέτει ένα
ευρύτατο σύνολο εργαλείων, για κάθε πιθανή εργασία. Ακόμη και κάθε έκδοση του πυρήνα του κυκλοφορεί σε
διαφορετικές εκδοχές, ακόμα και σε διάφορα στάδια ανάπτυξης. Μέσα σε αυτόν το... χαμό, έπρεπε να μπει μια τάξη.
Την πρώτη εποχή ανάπτυξης του Linux η εγκατάστασή του σε ένα σύστημα ήταν υπόθεση που οι ικανοί προγραμματιστές
και οι πολύ προχωρημένοι χρήστες μπορούσαν να φέρουν εις πέρας. Πολλά κομμάτια κώδικα έπρεπε να μεταγλωττιστούν ένα προς ένα, να
αντιγραφούν χειροκίνητα στις κατάλληλες κατατμήσεις και, φυσικά, να ρυθμιστούν και να προσαρμοστούν στο
υλικό. Η ίδια η εγκατάσταση του λειτουργικού ήταν από μόνη της ένα μεγάλο κατόρθωμα!
Όμως, ακόμη και μετά την ολοκλήρωσή της τα προβλήματα δεν τελείωναν. Οι περισσότερες έξτρα εφαρμογές
απαιτούσαν μεταγλώττιση και προβλήματα, όπως π.χ., απουσία κατάλληλων βιβλιοθηκών ή ασυμβατότητα
με τις υπάρχουσες, δεν είχαν τελειωμό. Στο στάδιο εκείνο το Linux ήταν ελεύθερο και διαθέσιμο σε όλους, αλλά ελάχιστοι
μπορούσαν να το απολαύσουν...
Η κατάσταση αυτή άρχισε να βελτιώνεται με την εμφάνιση διάφορων διανομών. Ο όρος διανομή (distribution) αναφέρεται σε ένα
σύνολο προγραμμάτων που απαιτείται για τη συγκρότηση, την εγκατάσταση και τη συντήρηση ενός συστήματος Linux. Όπως
είδαμε, όμως, το Linux μπορεί να βρεθεί παντού και για κάθε σκοπό. Έτσι, οι διανομές που κυκλοφορούν σήμερα
ξεχωρίζουν ως προς αρκετά χαρακτηριστικά.
Ας δούμε τα τρία σημαντικότερα:
Αποστολή του συστήματος.
Ένας υπολογιστής έχει ξεκάθαρα διαφορετικό ρόλο σε σχέση με κάποιον που παρέχει δικτυακές υπηρεσίες. Έτσι,
υπάρχουν διανομές που εστιάζουν κυρίως σε εφαρμογές γραφείου, πολυμέσων κ.λ.π., ενώ κάποιες άλλες κατά κύριο λόγο
ενσωματώνουν δικτυακά εργαλεία, διακομιστές κ.ο.κ.
Σύνθεση του συστήματος.
Το Linux τρέχει σχεδόν σε υπολογιστή, ανεξάρτητα από την αρχιτεκτονική του. Ωστόσο, ακόμη και στον κόσμο των PC
παρατηρούνται σημαντικές διαφοροποιήσεις στο υλικό. Όπως είναι φανερό, υπάρχουν διανομές βελτιστοποιημένες για κάθε σύστημα.
Χαρακτηριστικότερο παράδειγμα αποτελούν εκείνες που διατίθενται σε δύο εκδόσεις, μία για τα 32μπιτα και μία
για 64μπιτα συστήματα.
Εργαλεία της διανομής.
Ένας παράγοντας που επηρεάζει σε μεγάλο βαθμό την ευχρηστία μιας διανομής αφορά στα εργαλεία που
αναλαμβάνουν τη διαχείριση εφαρμογών, την ενημέρωση (update) του συστήματος και άλλες διαχειριστικές εργασίες. Για να
αντιληφθούμε τη σημασία τους, αρκεί να σκεφθούμε ότι στο δίκτυο διατίθενται εκατοντάδες εφαρμογές, δωρεάν. Θα ήταν
κρίμα αν για την δοκιμή αυτών που μας ενδιαφέρουν έπρεπε να ταλαιπωρούμαστε πάντα με τη μεταγλώττιση και τα πιθανά
σχετικά προβλήματα. Εξάλλου, οι διάφορες αναβαθμίσεις του συστήματος είναι κρίσιμες για την δικτυακή
ασφάλεια και την ομαλή λειτουργία του υπολογιστή. Η χειροκίνητη αναβάθμιση του πυρήνα ή άλλων τμημάτων του
λειτουργικού σίγουρα δεν είναι η πιο ευχάριστη ασχολία.
Αναφερόμενοι στις διανομές, θα πρέπει να ξεκαθαρίσουμε ότι δεν παρέχονται όλες δωρεάν. Οι προγραμματιστές που
αναπτύσσουν τον πυρήνα και το μεγαλύτερο μέρος των εφαρμογών του Linux προσφέρουν το έργο τους δωρεάν. Ωστόσο,
σε πολλές διανομές περιέχονται και εμπορικές εφαρμογές, καθώς και πρόσθετη τεκμηρίωση (distribution). Επομένως,
ο υποψήφιος αγοραστής και χρήστης οφείλει να πληρώσει την άδεια χρήσης των εμπορικών τμημάτων της διανομής,
καθώς και τις όποιες έξτρα υπηρεσίες υποστήριξης προσφέρει ο διανομέας. Επιπρόσθετα, ένα άλλο πάγιο έξοδο για
τους κατασκευαστές διανομών, που μεταβιβάζεται στο χρήστη, αφορά στο κόστος της συσκευασίας και των
συνοδευτικών βιβλίων. Πάντως, πολλές εμπορικές διανομές διατίθενται δωρεάν για κατέβασμα, χωρίς όμως τα εμπορικά
προγράμματα.
Λογαριασμοί χρηστών.
Το Unix και τα άλλα λειτουργικά της οικογένειας, όπως είναι το Linux, ήταν ανέκαθεν πολυχρηστικά λειτουργικά
(multi-user operating systems). Με απλά λόγια, ένα πολυχρηστικό λειτουργικό προβλέπει τη χρήση του συστήματος από πολλούς
χρήστες. Για τον καθένα διατηρεί ένα ξεχωριστό σύνολο ρυθμίσεων και προσφέρει διαφορετικά δικαιώματα
πρόσβασης σε αρχεία και πόρους του συστήματος. Επιπρόσθετα, επιτρέπει την ταυτόχρονη «σύνδεση» (login) πολλών
χρηστών, οι οποίοι εργάζονται με το σύστημα είτε τοπικά (local) είτε δικτυακά απομακρυσμένα (remotely). Οι έννοιες αυτές
μάς είναι γνώριμες και από τα Windows, αν και στην περίπτωση τους δεν επιτρέπεται ταυτόχρονη σύνδεση πολλών χρηστών!
Ο όρος «λογαριασμός χρήστη» (user account) αναφέρεται σε ένα σύνολο, στοιχεία του οποίου είναι το όνομα σύνδεσής τού
χρήστη (login name), ο κωδικός σύνδεσης (login password), ένας φάκελος για την φύλαξη των προσωπικών αρχείων, καθώς και τα
δικαιώματα πρόσβασης στο σύστημα. Όπως συμβαίνει και σε άλλα πολυχρηστικά λειτουργικά συστήματα, στο Linux υπάρχουν
δύο είδη λογαριασμών:
Ο λογαριασμός του διαχειριστή (υπερχρήστη).
Ο λογαριασμός αυτός έχει απεριόριστα δικαιώματα στο σύστημα. Μέσα από αυτόν μπορεί να ρυθμίσει το καθετί και,
φυσικά, είναι δυνατόν να καθοριστούν ή να μεταβληθούν τα δικαιώματα όλων των άλλων χρηστών. Κατά παράδοση, το εξ
ορισμού όνομα σύνδεσης που χρησιμοποιείται για το λογαριασμό του διαχειριστή είναι το «root» (χωρίς
εισαγωγικά). Σε αυτό το σημείο οφείλουμε να επισημάνουμε ότι στο Linux είναι φρόνιμο να αποφεύγουμε τη χρήση
του λογαριασμού του υπερχρήστη, εκτός αν είναι απολύτως αναγκαίο!
Ο λογαριασμός του απλού χρήστη.
Κάθε χρήστης που διαθέτει τέτοιο λογαριασμό έχει περιορισμένη πρόσβαση στο σύστημα. Για κάθε απλό χρήστη
υπάρχει ο λεγόμενος γονικός κατάλογος (home directory), μέσα στον οποίο μπορεί να κάνει ό,τι θέλει – με άλλα λόγια έχει
πλήρη δικαιώματα. «Απλοί» λογαριασμοί, σε αντίθεση εκείνον του root, μπορούν να υπάρχουν αρκετοί. Ακόμα και στην
περίπτωση που ο υπολογιστής χρησιμοποιείται από ένα φυσικό πρόσωπο, οι καθημερινές εργασίες πρέπει να
διεκπεραιώνονται από το λογαριασμό ενός απλού χρήστη και όχι από το λογαριασμό του root.
Κάθε μηχάνημα με Linux είναι πολυάσχολο.
Διεκπεραιώνει ένα σωρό υπηρεσίες και συνδέονται σε αυτό και άλλοι υπολογιστές, ασχέτως αν βρίσκονται
εντός του τοπικού δικτύου ή όχι. Όταν γίνεται κάτι τέτοιο, μπορούμε ανά πάσα στιγμή να προσαρμόζουμε τη συμπεριφορά
του στις εκάστοτε ανάγκες, να πραγματοποιούμε όποιες δοκιμές επιθυμούμε, να διαχειριζόμαστε το
λογισμικό του ή απλώς να του αναθέτουμε πρόσθετες εργασίες. Φυσικά, όλα αυτά χωρίς να βρισκόμαστε κοντά του! Σε αυτό
βοηθούν προγράμματα που υλοποιούν το πρωτόκολλο telnet. Ωστόσο η «αθώα φύση»
του εν λόγω πρωτοκόλλου ενδέχεται να αποδειχθεί μοιραία για την ασφάλεια τού συστήματος. Κατά την διάρκεια μιας
συνεδρίας telnet μεταδίδονται σε μορφή απλού κειμένου (plain text) όλα τα στοιχεία
του λογαριασμού του συστήματος. Επομένως κάποιος που υποκλέπτει τη συνεδρία (π.χ. με χρήση ενός packet sniffer)
μπορεί εύκολα να μάθει το όνομα χρήστη και το συνθηματικό, καθώς και ένα σωρό άλλες πληροφορίες που δεν θα έπρεπε να γνωρίζει.
Κρυπτογραφία.
Για την απόκρυψη των ευαίσθητων δεδομένων υπάρχουν πολλές μέθοδοι που βασίζονται στην κρυπτογραφία (cryptography).
Τα συστήματα κρυπτογράφησης (encryption systems) αποτελούν μηχανισμούς που μετατρέπουν ένα σύνολο πληροφοριών (plain
text) σε ένα άλλο (cipher text), από το οποίο δεν μπορεί να εξαχθεί κανένα νόημα. Η λειτουργία ενός τέτοιου μηχανισμού
απαιτεί την παρουσία μιας ακολουθίας χαρακτήρων που ονομάζεται κλειδί (key). Το ίδιο ισχύει και κατά την
αποκρυπτογράφηση (decryption). Με άλλα λόγια, η διαδικασία παραγωγής του plain text από το cipher text απαιτεί την ύπαρξη του
κατάλληλου κλειδιού. Έτσι, όταν αποστέλλουμε πληροφορίες που κρυπτογραφήθηκαν σύμφωνα με ένα
συγκεκριμένο κλειδί, η περίπτωση να υποκλαπούν δεν μας ανησυχεί! Τα δεδομένα που θα κλέψει ο (υπερβολικά
περίεργος) φίλος μας θα του είναι εντελώς άχρηστα, εφόσον δεν θα διαθέτει το κλειδί για την αποκρυπτογράφηση.
Οι μηχανισμοί κρυπτογράφησης χωρίζονται σε δυο βασικές κατηγορίες.
Κρυπτογραφία συμμετρικού κλειδιού (symmetric key cryptography).
Το κλειδί κρυπτογράφησης ταυτίζεται με το κλειδί αποκρυπτογράφησης. Έτσι, για την αποστολή ενός κρυπτογραφημένου
μηνύματος θα πρέπει πρώτα να γνωρίζουμε ότι ο παραλήπτης διαθέτει το ίδιο κλειδί. Η μέθοδος αυτή παρέχει
ικανοποιητική ασφάλεια αλλά δεν μπορεί να αποτρέψει κάθε απάτη! Για παράδειγμα, κάποιος επιτήδειος που απέκτησε το
κλειδί είναι πιθανό να υποκλέψει ένα μήνυμα, να το αποκρυπτογραφήσει, να το τροποποιήσει και, τέλος να το
ξαναστείλει, αφού πρώτα το κρυπτογραφήσει εκ νέου. Ο τελικός παραλήπτης δεν θα καταλάβει τίποτε!
Κρυπτογραφία δημόσιου κλειδιού (public key cryptography).
Σε αυτή τη μέθοδο το κλειδί κρυπτογράφησης διαφέρει από εκείνο της αποκρυπτογράφησης. Το ένα είναι γνωστό
μόνο στον κάτοχό του και ονομάζεται κρυφό ή ιδιωτικό (private key), ενώ το άλλο είναι διαθέσιμο σε κάθε ενδιαφερόμενο
και για το λόγο αυτό ονομάζεται δημόσιο (public key). Σε κάθε ιδιωτικό κλειδί αντιστοιχεί αποκλειστικά ένα δημόσιο.
Δεδομένα που κρυπτογραφήθηκαν με ένα συγκεκριμένο κλειδί, για την αποκρυπτογράφηση, απαιτούν το ταίρι του! Έτσι, κρυπτογραφώντας δεδομένα με
το δημόσιο κλειδί κάποιου, μόνο εκείνος θα είναι σε θέση να το αποκρυπτογραφήσει. Ο επίδοξος υποκλοπέας δεν θα έχει καμία ελπίδα
πλέον, εφόσον το απαιτούμενο κλειδί (το ιδιωτικό) βρίσκεται μόνο στα χέρια του «αυθεντικού» παραλήπτη!
Πρωτόκολλο ή πρόγραμμα;
Ο λόγος γίνεται για το SSH και η απάντηση είναι «και τα δύο»! Το πρωτόκολλο (συνήθως γράφεται με κεφαλαία γράμματα)
περιγράφει ένα μηχανισμό κρυπτογράφησης δημόσιου κλειδιού. Όσο για το πρόγραμμα, το ssh, που γράφεται
πάντα με μικρά γράμματα, υλοποιεί το ομώνυμο πρωτόκολλο. Έτσι, με χρήση ssh μπορούμε να συνδεθούμε σε ένα μηχάνημα
που υποστηρίζει τέτοιες συνδέσεις, όπως ακριβώς θα κάναμε χρησιμοποιώντας ένα πρόγραμμα telnet. Ωστόσο, αυτή τη φορά
θα είναι κρυπτογραφημένα! Οι ευαίσθητες πληροφορίες που ανταλλάσσουμε με το απομακρυσμένο μηχάνημα – και ειδικότερα τα στοιχεία
του λογαριασμού – θα είναι καλά κρυμμένα από τα αδιάκριτα βλέμματα! Πράγματι, υπολογίζεται ότι για την αποκρυπτογράφηση ενός μηνύματος χωρίς
την ύπαρξη του κατάλληλου κλειδιού θα χρειαζόταν εκατοντάδες χρόνια – ακόμα και για τον ταχύτερο υπολογιστή!
Συνεδρία ssh. Μια συνεδρία με το πρόγραμμα ssh προσφέρει μέγιστη μυστικότητα. Πως όμως
επιτυγχάνεται;
Το απομακρυσμένο σύστημα, την
πρώτη φορά που θα συνδεθούμε,
αποστέλλει το δημόσιο κλειδί του. Το
πρόγραμμα ssh μάς ειδοποιεί για τη λήψη
του κλειδιού και το αποθηκεύει.
Αμέσως μετά το ssh κρυπτογραφεί το
δημόσιο κλειδί μας, χρησιμοποιώντας το
δημόσιο κλειδί που μόλις έλαβε.
Στη συνέχεια ξεκινά η ουσιαστική
επικοινωνία μας με το απομακρυσμένο
μηχάνημα. Σε αυτή την επικοινωνία ο
εκάστοτε αποστολέας κρυπτογραφεί τα
δεδομένα προς αποστολή,
χρησιμοποιώντας το δημόσιο κλειδί του
παραλήπτη. Τα ιδιωτικά κλειδιά δεν
μεταδίδονται ποτέ. Επίσης, σε κάθε
συναλλαγή πληροφορίας μεταξύ των δυο
άκρων πραγματοποιείται κρυπτογράφηση
με το δημόσιο κλειδί του εκάστοτε
παραλήπτη. Έτσι, κανένας άλλος δεν θα
μπορέσει να αποκρυπτογραφήσει τα
δεδομένα που ανταλλάσσονται!
Επιστροφή στην πράξη.
Ένα σύστημα Linux δέχεται συνδέσεις SSH
όταν τρέχει το κατάλληλο πρόγραμμα-διακομιστή.
Πρόκειται για το sshd. Για την
πραγματοποίηση μιάς σύνδεσης προς ένα
άλλο σύστημα προσφέρεται το πρόγραμμα
ssh. Το ssh είναι πρόγραμμα που λειτουργεί
στη γραμμή εντολής. Εναλλακτικά
μπορούμε να χρησιμοποιήσουμε το
πρόγραμμα kssh, που λειτουργεί στο
περιβάλλον Χ. Όσο για την πλατφόρμα Windows
προσφέρονται πολλά προγράμματα για
συνδέσεις, με πλέον δημοφιλές το putty.
Ξεκινώντας το sshd και φροντίζοντας να
επιστρέψουμε τη λειτουργία του στο
εξωτερικό ενδιάμεσο (από εργαλείο
διαχείρισης του firewall), μπορούμε να
διαχειριζόμαστε τον διακομιστή μας με
ασφάλεια., από παντού!
Ο χαριτωμένος πιγκουίνος έχει πολλά να προσφέρει.
Με τις δυνατότητες του Linux μπορούμε να
πραγματοποιήσουμε ένα σωρό,
καθημερινές και μη, εργασίες. Όλα αυτά
όμως χρησιμοποιώντας τα μέσα που
εγγενώς προσφέρει το λειτουργικό ή
αξιοποιώντας τα εργαλεία που το
συνοδεύουν ή διατίθενται γι’ αυτό. Σε
όσους έχουν προγραμματιστικές γνώσεις,
το Linux μπορεί να προσφέρει σε αυτούς
υπέρ-ικανοποιητικές και άκρως
δημιουργικές διεξόδους. Με τα εργαλεία
που διαθέτει και τη μακρόχρονη
προγραμματιστική παράδοση που το
συνοδεύει, αποτελεί μια από τις πλέον
σύγχρονες πλατφόρμες ανάπτυξης
εφαρμογών. Με τον πανίσχυρο
μεταγλωττιστή GCC, η δημιουργία ενός
προγράμματος για το κέλυφος γραμμής
εντολών, είναι πολύ απλή.
Θεμέλιος λίθος.
Τα εργαλεία που περιστοιχίζουν τον
πυρήνα Linux και, μαζί με αυτόν,
σχηματίζουν το λειτουργικό, αποτελούν
παράγωγα του project GNU (www.gnu.org) . το
σπουδαιότερο από αυτά ίσως είναι ο
μεταγλωττιστής GCC (GNU C Compiler, gnu.gcc.com).
άλλωστε σε αυτόν οφείλονται η ταχύτατη
ανάπτυξη και βελτίωση μιας
υπερπληθώρας εργαλείων, προγραμμάτων
και εφαρμογών, καθώς και η ευρεία
διάδοσή τους στα λειτουργικά της
οικογένειας Unix – ακόμη και στα Windows.
Στην πραγματικότητα το όνομα GCC
αναφέρεται σε ένα σύνολο
μεταγλωττιστών, όχι μόνο για τη γλώσσα
C, ενοποιημένων σε ένα εργαλείο (GNU Compiler
Collection). Εντούτοις, πολύ συχνά
αναφέρεται ως μεταγλωττιστής της C,
καθώς οι περισσότεροι χρήστες τον
αξιοποιούν για την μεταγλώττιση
προγραμμάτων που είναι γραμμένα σε C.
Παρεμπιπτόντως, η γλώσσα C
χρησιμοποιείται και για την ανάπτυξη
του ίδιου του GCC. Ποια είναι όμως τα
χαρακτηριστικά που κατατάσσουν τον GCC
κορυφαίο στην κατηγορία του;
Ο GCC, στην καθιερωμένη του έκδοση
(standard), μπορεί να μεταγλωττίσει ένα
μεγάλο σύνολο προγραμματιστικών
γλωσσών. Μεταξύ αυτών συγκαταλέγονται
οι Fortran C, C++, Ada και Java. Επίσης, σε πιο
πλούσιες εκδοχές του είναι ικανός να
μεταγλωττίσει προγράμματα σε PL/I, Mercury
και VHDL.
Ο GCC κατέχει πρωτιά σε ό,τι αφορά το
πλήθος των αρχιτεκτονικών που
υποστηρίζει. Μπορεί να δημιουργήσει
κώδικα για επεξεργαστές IA-64, AMD64, Alpha,
PowerPC, SPARC, MIPS, VAX, ARM, Motorola 68000/88000.
Επιπρόσθετα, υποστηρίζει και ένα
μεγάλο σύνολο μικροελεγκτών (microcontrollers),
που συναντάμε και στα λεγόμενα Embedded
Systems.
Ως συνέπεια του προηγούμενου χαρακτηριστικού, ο GCC αποτελεί τον καλύτερο μεταγλωττιστή για την ανάπτυξη διαπλατφορμικών εφαρμογών (cross-platform applications). Η χρήση του εγγυάται ότι το εκάστοτε πρόγραμμα, εφόσον έχει λειτουργήσει σε μια αρχιτεκτονική, θα λειτουργεί και στις άλλες.
|