X-windows, πως και γιατί;: X-Windows το πως (η αλλιώς η πράξη)
Description: This is issue 35 of Magaz, the Hellenic LinuxMagazine
Keywords: magaz hellenic greek hellas greece hellug linux magazine

Magaz, The Greek Linux Magazine
Τεύχος #35
Περιληπτικά Περιεχόμενα Αναλυτικά Περιεχόμενα Mirrors Links Πληροφορίες Συντάκτες Αναζήτηση Επικοινωνία
Επόμενο Προηγούμενο Περιεχόμενα ### 3. X-Windows το πως (η αλλιώς η πράξη) Και ερχόμαστε στο πρακτικό κομμάτι του άρθρου. Δεν πρόκειται όμως να αναφερθούμε εκτενώς στις λεπτομέρειες καθώς αυτές είναι ήδη μαζεμένες στο Remote-X-apps HOWTO το οποίο οφείλετε να διαβάσετε αν θέλετε πραγματικά να ασχοληθείτε με το "άθλημα". Θα περιοριστούμε λοιπόν σε μερικά μόνο σημαντικά σημεία. Καταρχήν πρέπει να ξέρετε τρία πράγματα πριν ξεκινήσετε οποιοδήποτε πείραμα. Πρώτον προσέξτε το firewall της διανομή σας. Μερικές διανομές έχουν ανάμεσα στις προκαθορισμένες (default) ρυθμίσεις τους και ένα απλό firewall. Επειδή τα X-Connections δεν τρέχουν σε χαμηλές πόρτες (ports) (1-1024) αλλά συνήθως χρησιμοποιούν πόρτες με αριθμό 6000 και κάτι ψιλά είναι πολύ πιθανό να μην μπορεί ο υπολογιστής που έχει τον X-Server να δεχτεί συνδέσεις. Δεύτερον πρέπει να δώσετε μεγάλη σημασία στο θέμα της ασφάλειας. Τα Χ-Windows πάσχουν από διάφορα προβλήματα ασφαλείας (βλέπε και telnet/ftp/rlogin) αν δεν ρυθμιστούν σωστά. Αναφερόμαστε τόσο στο ποιος μπορεί να συνδεθεί στον X-server (authentication) όσο και στην ίδια την μεταφορά των δεδομένων μέσα από το δίκτυο. Μην ξεχνάτε ότι ένας X-server είναι οθόνη και ποντίκι και πληκτρολόγιο. Έτσι θα μπορούσε ένας κακόβουλος χρήστης να συνδεθεί στον X-server σας και να βάλει τα δικά του παράθυρα στην οθόνη σας. (κάτι που μπορεί να είναι αστείο). Θα μπορούσε όμως να φτιάξει και ένα πρόγραμμα που συνδέεται στον X-Server σας και διαβάζει τι γράφετε στο πληκτρολόγιο (κάτι που δεν είναι καθόλου αστείο). Έτσι θα πρέπει στην καλύτερη περίπτωση να κάνετε τα πειράματα σας σε ένα μικρό δίκτυο που δεν διαθέτει εξωτερική σύνδεση στο Internet, ενώ στην χειρότερη σε ένα καλά προστατευμένο δίκτυο πίσω από ένα "σοβαρό" (π.χ. εταιρικό) firewall. Μερικοί μπορεί να τα θεωρήσουν γελοία όλα αυτά, αλλά είναι καλό να είστε λίγο περισσότερο παρανοϊκοί από όσο πρέπει στο θέμα της ασφάλειας. Δείτε και τα άλλα τεύχη του Magaz με θέμα την ασφάλεια δικτύων. Και τρίτον θα πρέπει ο ίδιος ο X-server να είναι ρυθμισμένος ώστε να δέχεται εξωτερικές συνδέσεις. Πάλι για λόγους ασφάλειας μερικές διανομές μπορεί να έχουν απενεργοποιήσει αυτήν την λειτουργία. Εδώ πρέπει να ψάξετε την τεκμηρίωση της διανομής σας. Για XFREE86 αυτό μπορεί να είναι κάτι απλό όπως η παράμετρος "-nolisten tcp". Τις περισσότερες φορές όμως αυτό είναι "θαμμένο" πίσω από διάφορα startup scripts και ο χρήστης έχει επιλογές "υψηλότερου επιπέδου". Θα μπορούσε ας πούμε η διανομή σας να έχει σε κάποιο αρχείο ρυθμίσεων την γραμμή "ALLOW_REMOTE_X_CONNECTIONS=no" την οποία εσείς πρέπει να αλλάξετε βέβαια σε "yes". Δείτε πάλι την τεκμηρίωση της διανομή σας. Δεν έχει νόημα να μπούμε σε περίπλοκες λεπτομέρειες για το θέμα. Από την μεριά του X-client τα πράγματα είναι σχετικά απλά. Η μαγική λέξη είναι DISPLAY. Κάθεστε στον υπολογιστή, βάζετε στην μεταβλητή περιβάλλοντος (environment variable) DISPLAY το όνομα (hostname) του υπολογιστή με τον X-Server προσθέτοντας και το display στο τέλος (στο 99% των περιπτώσεων θα είναι :0.0) και τέλος τρέχετε το γραφικό πρόγραμμα που θέλετε. Αν όλα πάνε καλά θα πρέπει το πρόγραμμα να εμφανίσει το περιβάλλον του στον X-Server χρησιμοποιώντας όμως πάντα τους πόρους (resources) του Χ-Client. Για tcsh/csh ας πούμε αυτό γίνεται
    >setenv DISPLAY xserver.example.gr:0.0
    >gftp
Αντίστοιχα και για άλλα shells (π.χ bash). Για περισσότερες λεπτομέρειες δείτε το HOWTO. Ας δούμε και τις ρυθμίσεις από την πλευρά του X-Server. ### 3.1 Ο εύκολος τρόπος Στην πιο απλή περίπτωση ο X-Server κρατάει μία λίστα με υπολογιστές (hostnames) που μπορούν να ανοίξουν μια σύνδεση με αυτόν. Η λίστα αυτή παραμετροποιείται με την εντολή xhost. Η παράμετρος είναι ένα όνομα (hostname) που θέλετε να βάλετε ή να βγάλετε από την λίστα. Αυτό καθορίζεται με ένα + η - πριν από το όνομα (χωρίς κάποιο κενό). Έτσι στον X-Server μπορείτε να τρέξετε:
    xhost +xclient.example.gr
Και μόλις τελειώσετε:
    xhost -xclient.example.gr.
Υπάρχει επίσης ή xhost + που επιτρέπει σε οποιονδήποτε να συνδεθεί (απαγορεύεται δια ροπάλου) και η xhost - που δεν αφήνει κανέναν να συνδεθεί εκτός από X-Clients που τρέχουν στον ίδιο τον X-Server (localhost δηλαδή μονό). Όπως καταλάβατε αυτός ο τρόπος πιστοποίησης (authentication) ασχολείται μόνο με hostnames και δεν είναι καθόλου ασφαλής. Αν χρησιμοποιήσετε αυτόν τον τρόπο σημαίνει ότι ξέρετε πολύ καλά τι κάνετε και ότι εμπιστεύεστε την ασφάλεια του δικτύου σας. Εμείς τον προτείνουμε μόνο για δοκιμές σε ένα μικρό προστατευμένο τοπικό δίκτυο χωρίς σύνδεση στο δίκτυο. Προσέξτε επίσης ότι ακόμα και το xhost - δεν είναι 100% ασφαλές. Είναι δυνατόν κάποιος κακόβουλος χρήστης αντί να τρέξει τον keylogger του απομακρυσμένα, να πάρει πρόσβαση στον υπολογιστή που τρέχει ο X-Server με τους συνήθεις τρόπους και μετά να "ανεβάσει" τον keylogger του και να τον τρέξει τοπικά. Τότε o keylogger θα συνδέεται από τον υπολογιστή "localhost" που έχει πάντα πρόσβαση στον X-Server άσχετα με τα αποτελέσματα της εντολής xhost. ### 3.2 Ο δύσκολος τρόπος Ο δεύτερος τρόπος είναι με χρήση της εντολής xauth (σύστημα MIT-MAGIC-COOKIE-1) Σε αυτήν την περίπτωση ο XServer ξέρει μία "μαγική λέξη"(magic-cookie). Μόνο όσοι X-Clients ξέρουν επίσης την ίδια ακριβώς μαγική λέξη μπορούν να ανοίξουν σύνδεση. Το "μαγικό" στην όλη υπόθεση αναφέρεται στο γεγονός ότι δεν έχει σημασία τόσο το περιεχόμενο αυτής της λέξης όσο το ότι πρέπει να είναι η ίδια και από τις δύο μεριές (X-Server/X-Client) ώστε να ανοιχτεί επιτυχώς η σύνδεση. Στα "νεοελληνικά" δηλαδή συνδέονται στον X-server μόνο όσοι X-clients έχουν το κοκκαλάκι της νυχτερίδας. Εδώ θα μπορούσαμε να αναφέρουμε άπειρες λεπτομέρειες για το πως μπορείτε να φτιάξετε τα cookies αυτά, πώς θα τα μεταφέρετε από τον X-server στον Χ-client, και άλλα τεχνικά ζητήματα. Κάτι τέτοιο δεν έχει νόημα όμως γιατί όλα αυτά είναι ήδη γραμμένα στο Remote-X-Apps HOWTO και δεν πρόκειται να ασχοληθούμε ξανά εδώ με τα ίδια θέματα. Θα σταθούμε μόνο σε δύο σημαντικά σημεία. Το ένα είναι ότι με το xauth μπορείτε να καθορίσετε την πρόσβαση σε επίπεδο χρήστη πια (και όχι σε επίπεδο υπολογιστή όπως το xhost) κάτι το οποίο είναι απαραίτητο σε ένα μέσο/μεγάλο τοπικό δίκτυο έτσι και αλλιώς. Το δεύτερο σημείο είναι ότι για να χρησιμοποιήσετε αυτόν τον τρόπο πιστοποίησης πρέπει να τρέξετε τον XServer με την παράμετρο -auth και το όνομα του αρχείου που περιέχει το cookie ( /.Xauthority). ### 3.3 Ο ασφαλής τρόπος Σχεδόν πάντα βέβαια ο χρήστης κάθεται στον X-server (= οθόνη, πληκτρολόγιο και ποντίκι). Επομένως μέσα από telnet στον X-client ξεκινάει την γραφική εφαρμογή που τον ενδιαφέρει και εφόσον έχει θέσει την μεταβλητή περιβάλλοντος DISPLAY το πρόγραμμα θα εμφανιστεί στην οθόνη που έχει μπροστά του. Αυτό όμως σημαίνει βέβαια ότι τα δεδομένα περνάνε μέσα από το δίκτυο χωρίς καμία κάλυψη (αναφερόμαστε γενικότερα στην απομακρυσμένη σύνδεση). Υπάρχει ο όμως και η λύση του ssh (secure shell). Σε αυτήν την περίπτωση έχετε αυτομάτως κρυπτογραφημένα δεδομένα. Πιο ενδιαφέρον είναι το γεγονός ότι μέσω της παραμέτρου -Χ λέτε στο ssh ότι θέλετε X forwarding. Αυτό αυτοματοποιεί την όλη διαδικασία Δηλαδή
    >ssh -X xclient.example.gr
    >gftp.
Εννοείται βέβαια ότι πρέπει να έχετε στήσει τον αντίστοιχο δαίμονα (sshd) στο μηχάνημα. Για άλλη μία φορά δείτε το αντίστοιχο HOWTO για τις λεπτομέρειες. Επόμενο Προηγούμενο Περιεχόμενα