Ασφάλεια

3.1. Χρήστης και ομάδα GDM

Για λόγους ασφαλείας συνίσταται η χρήση ενός ειδικά δημιουργημένου id χρήστη και ομάδας για σωστή λειτουργία. Αυτός ο χρήστης και η ομάδα είναι συνήθως ο "gdm" στα περισσότερα συστήματα, αλλά μπορεί να διαμορφωθεί σε κάθε χρήστη ή ομάδα. Όλα τα προγράμματα γραφικού περιβάλλοντος του GDM εκτελούνται από αυτόν τον χρήστη, έτσι ώστε τα προγράμματα που αλληλεπιδρούν με τον χρήστη να εκτελούνται σε ένα δοκιμαστήριο. Ο χρήστης και η ομάδα αυτή πρέπει να έχουν περιορισμένα δικαιώματα.

Τα μόνα ειδικά δικαιώματα που χρειάζεται ο χρήστης "gdm"είναι η ανάγνωση και η εγγραφή αρχείων Xauth στον κατάλογο <var>/run/gdm. Ο κατάλογος <var>/run/gdm πρέπει να έχει ιδιοκτησία root:gdm και δικαιώματα 1777.

Σε καμιά περίπτωση δεν πρέπει να διαμορφώσετε τον χρήστη/ομάδα GDM με τέτοιον τρόπο ώστε ένας χρήστης να μπορεί να έχει εύκολη πρόσβαση σε αυτόν, όπως στην περίπτωση του χρήστη nobody. Κάθε χρήστης που αποκτά πρόσβαση σε ένα κλειδί Xauth μπορεί να παρακολουθεί απαρατήρητος και να ελέγχει εκτελούμενα προγράμματα γραφικού περιβάλλοντος στην σχετική συνεδρία ή να εκτελέσει μια επίθεση τύπου denial-of-service στην συνεδρία. Είναι σημαντικό να βεβαιωθείτε ότι το σύστημα είναι διαμορφωμένο κατάλληλα ώστε μόνο ο χρήστης "gdm" να έχει πρόσβαση σε αυτά τα αρχεία και ότι δεν είναι εύκολο να συνδεθεί κάποιος άλλος σε αυτό τον λογαριασμό. Για παράδειγμα, ο λογαριασμός πρέπει να ρυθμιστεί χωρίς κωδικό ή να μην επιτρέπει σε χρήστες χωρίς δικαιώματα root να συνδέονται.

Η διαμόρφωση του GDM greeter είναι αποθηκευμένη στο GConf. Για να επιτρέπεται στον χρήστη GDM η εγγραφή στην διαμόρφωση, είναι απαραίτητο για τον χρήστη "gdm" να έχει έναν εγγράψιμο κατάλογο $HOME. Οι χρήστες μπορούν να τροποποιήσουν την προεπιλεγμένη διαμόρφωση του GConf όπως επιθυμούν για να αποφύγουν την ανάγκη παροχής στον χρήστη "gdm" εγγράψιμου καταλόγου $HOME. Πάντως, κάποια χαρακτηριστικά του GDM μπορεί να απενεργοποιηθούν αν δεν έχει την δυνατότητα να εγγράψει πληροφορίες κατάστασης στην διαμόρφωση του GConf.

3.2. PAM

Το GDM χρησιμοποιεί το PAM για πιστοποίηση κατά την είσοδο. Το PAM είναι συντόμευση για το Pluggable Authentication Module, και χρησιμοποιείται από τα περισσότερα προγράμματα που ζητούν επικύρωση στον υπολογιστή σας. Επιτρέπει στον διαχειριστή να διαμορφώσει συγκεκριμένη συμπεριφορά πιστοποίησης για διαφορετικά προγράμματα σύνδεσης (όπως ssh, είσοδος GUI, προστασία οθόνης, κλπ)

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

Η διαμόρφωση του PAM έχει διαφορετικές, αλλά παρόμοιες, διεπαφές σε διάφορα λειτουργικά συστήματα, για αυτό ελέγξτε τις σελίδες pam.d ή pam.conf man page για λεπτομέρειες. Βεβαιωθείτε ότι διαβάσατε την τεκμηρίωση του PAM και ότι αισθάνεστε άνετα με τις επιπτώσεις στην ασφάλεια των όποιων αλλαγών προτίθεστε να κάνετε στην διαμόρφωση σας.

Σημειώστε ότι, από προεπιλογή, το GDM χρησιμοποιεί το όνομα της υπηρεσίας PAM του "gdm" για κανονική είσοδο και το "gdm-autologin" PAM service name για αυτόματη είσοδο. Αυτές οι υπηρεσίες μπορεί να μην είναι ορισμένες στο δικό σας διαμορφωμένο αρχείο pam.d ή pam.conf. Αν δεν υπάρχει σχετική καταχώρηση, τότε το GDM θα χρησιμοποιήσει την προεπιλεγμένη συμπεριφορά του PAM. Στα περισσότερα συστήματα αυτό θα λειτουργήσει καλά. Εντούτοις, το χαρακτηριστικό της αυτόματης εισόδου μπορεί να μην λειτουργήσει αν η υπηρεσία gdm-autologin δεν είναι ορισμένη.

Το σενάριο PostLogin εκτελείται πριν κληθεί το pam_open_session, και το σενάριο PreSession καλείται μετά. Αυτό επιτρέπει στον διαχειριστή συστήματος να προσθέσει οποιοδήποτε σενάριο εντολών στην διεργασία σύνδεσης είτε πριν είτε μετά την έγκριση έναρξης της συνεδρίας από το PAM.

Αν επιθυμείτε να επιτύχετε την λειτουργία του GDM με άλλους τύπους μηχανισμών επικύρωσης (όπως με δακτυλικό αποτύπωμα ή αναγνώστη καρτών SmartCard), αυτό πρέπει να το υλοποιήσετε χρησιμοποιώντας ένα PAM service module για τον επιθυμητό μηχανισμό επικύρωσης παρά να προσπαθήσετε να μετατρέψετε τον κώδικα του GDM απευθείας. Ανατρέξτε στην τεκμηρίωση του PAM στο σύστημα σας. Πως επιτυγχάνεται κάτι τέτοιο συζητείται συχνά στην λίστα

, επομένως μπορείτε να χρησιμοποιήσετε τα αρχεία της λίστας για περισσότερες πληροφορίες.

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

Αν η αυτόματη είσοδος δεν λειτουργεί σε ένα σύστημα, ελέγξτε αν το "gdm-autologin" PAM stack είναι ορισμένο στην διαμόρφωση του PAM. Για να επιτύχει αυτό, είναι απαραίτητο να χρησιμοποιήσετε ένα άρθρωμα PAM που απλά δεν κάνει επικύρωση, ή δίνει σαν αποτέλεσμα PAM_SUCCESS από όλες τις δημόσιες διεπαφές του. Θεωρώντας ότι το σύστημα σας έχει ένα άρθρωμα PAM pam_allow.so που λειτουργεί με αυτόν τον τρόπο, μια διαμόρφωση του PAM που ενεργοποιεί το "gdm-autologin" θα ήταν ως εξής:

       gdm-autologin auth  required    pam_unix_cred.so.1
       gdm-autologin auth  sufficient  pam_allow.so.1
       gdm-autologin account  sufficient  pam_allow.so.1
       gdm-autologin session  sufficient  pam_allow.so.1
       gdm-autologin password  sufficient  pam_allow.so.1

Η παραπάνω ρύθμιση προκαλεί την αποτροπή δημιουργίας εγγραφής στο lastlog. Αν επιθυμείτε εγγραφή στο lastlog, χρησιμοποιήστε το παρακάτω για την συνεδρία:

       gdm-autologin session required pam_unix_session.so.1

Αν ο υπολογιστής χρησιμοποιείται από περισσότερα άτομα, γεγονός που κάνει την χρήση αυτόματης εισόδου ακατάλληλη επιλογή, μπορεί να θελήσετε να επιτρέπεται σε μερικούς από τους χρήστες η είσοδος χωρίς την εισαγωγή του κωδικού τους. Αυτή η λειτουργία μπορεί να ενεργοποιηθεί με επιλογή ανά χρήστη με το εργαλείο διαχείρισης χρηστών από τα εργαλεία διαχείρισης συστήματος, και επιτυγχάνεται με το να ελέγχεται αν ο χρήστης ανήκει στην ομάδα Unix "nopasswdlogin" πριν ερωτηθεί για τον κωδικό. Για να λειτουργήσει η διαδικασία, το αρχείο διαμόρφωσης του PAM για την υπηρεσία "gdm" πρέπει να περιέχει μία γραμμή όπως η παρακάτω:

      gdm auth  sufficient  pam_succeed_if.so  user ingroup nopasswdlogin

3.3. utmp και wtmp

Το GDM δημιουργεί εγγραφές utmp και wtmp στην βάση δεδομένων παρακολούθησης χρήστη κατά την είσοδο και την έξοδο από την συνεδρία. Η βάση δεδομένων utmp περιέχει πληροφορίες πρόσβασης και παρακολούθησης του χρήστη που είναι διαθέσιμες με εντολές όπως finger, last, login και who. Η βάση δεδομένων wtmp περιέχει το ιστορικό πρόσβασης του χρήστη και πληροφορίες δραστηριότητας για την βάση δεδομένων utmp. Ανατρέξτε στις utmp και wtmp σελίδες τεκμηρίωσης του συστήματος σας για περισσότερες λεπτομέρειες.

3.4. Σχήμα πιστοποίησης εξυπηρετητή X

Τα αρχεία πιστοποίησης του X server αποθηκεύονται σε ένα νέο κάθε φορά υποκατάλογο του <var>/run/gdm κατά την εκκίνηση. Αυτά τα αρχεία περιέχουν το "password" που χρησιμοποιείται μεταξύ των X clients και του X server. Αυτό το "password" είναι μοναδικό για κάθε συνδεδεμένη συνεδρία, έτσι ώστε οι χρήστες μιας συνεδρίας δεν μπορούν να παρακολουθούν απαρατήρητοι τους χρήστες μιας άλλης.

Το GDM υποστηρίζει μόνο το σχήμα πιστοποίησης εξυπηρετητή Χ MIT-MAGIC-COOKIE-1. Υπό κανονικές συνθήκες λίγα μπορούμε να κερδίσουμε από τα άλλα σχήματα, και δεν έχουν γίνει προσπάθειες για την υλοποίηση τους μέχρι τώρα. Να είστε ιδιαίτερα προσεκτικοί όταν χρησιμοποιείτε το XDMCP γιατί το cookie πιστοποίησης του Xserver ταξιδεύει στο δίκτυο σαν απλό κείμενο. Αν είναι δυνατή η υποκλοπή, τότε ένας επιτιθέμενος θα μπορούσε απλά να υποκλέψει τον κωδικό πιστοποίησης σας κατά την είσοδο σας, ανεξάρτητα από το σχήμα πιστοποίησης που χρησιμοποιείτε. Αν η υποκλοπή είναι δυνατή και ανεπιθύμητη, θα πρέπει να χρησιμοποιήσετε ssh για την πραγματοποίηση μιας σύνδεσης X παρά το XDMCP. Μπορείτε να θεωρήσετε το XDMCP σαν ένα είδος telnet για γραφικό περιβάλλον, που έχει τα ίδια ζητήματα ασφάλειας με αυτό. Στις περισσότερες περιπτώσεις, το ssh -Y θα έπρεπε να προτιμάται έναντι των λειτουργιών XDMCP του GDM.

3.5. Ασφάλεια XDMCP

Αν και η οθόνη σας προστατεύεται από cookies, τα Xevents και επομένως τα πατήματα των πλήκτρων κατά την εισαγωγή κωδικών θα ταξιδέψουν στο δίκτυο σαν απλό κείμενο. Είναι τετριμμένο να υποκλαπούν.

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

3.6. Έλεγχος πρόσβασης του XDMCP

Ο έλεγχος πρόσβασης του XDMCP πραγματοποιείται χρησιμοποιώντας TCP wrappers. Είναι δυνατόν να μεταγλωττιστεί το GDM χωρίς υποστήριξη TCP wrapper, έτσι αυτό το χαρακτηριστικό μπορεί να μην υποστηρίζεται σε κάποια λειτουργικά συστήματα.

Πρέπει να χρησιμοποιείτε το όνομα δαίμονα gdm στα αρχεία <etc>/hosts.allow και <etc>/hosts.deny. Για παράδειγμα για να αρνηθείτε σε υπολογιστές από το .evil.domain την σύνδεση, στην συνέχεια προσθέστε

gdm: .evil.domain

στο <etc>/hosts.deny. Επίσης μπορεί να χρειαστεί να προσθέσετε

gdm: .your.domain

στο αρχείο σας <etc>/hosts.allow αν συνήθως αποκλείετε όλες τις υπηρεσίες από όλους τους υπολογιστές. Δείτε την hosts.allow(5) man page για λεπτομέρειες.

3.7. Ασφάλεια firewall

Ακόμη και αν το GDM προσπαθεί να είναι πιο αποτελεσματικό από επίδοξους επιτιθέμενους που προσπαθούν να εκμεταλλευτούν το XDMCP, είναι συνετό να κρατάτε κλειστή την θύρα του XDMCP (κανονικά είναι η θύρα UDP 177) στο firewall εκτός και αν την χρειάζεστε πραγματικά. Το GDM προσέχει για επιθέσεις τύπου denial of service, αλλά το πρωτόκολλο X είναι ακόμη εγγενώς ανασφαλές και θα έπρεπε να χρησιμοποιείται μόνο σε ελεγχόμενα περιβάλλοντα. Επίσης κάθε απομακρυσμένη σύνδεση καταναλώνει πολλούς πόρους, έτσι είναι πολύ ευκολότερο να πραγματοποιηθεί μια επίθεση denial of service μέσω XDMCP παρά μέσω ενός διακομιστή διαδικτύου.

Είναι επίσης συνετό να κλείσετε όλες τις θύρες του εξυπηρετητή X. Αυτές είναι οι θύρες 6000+ (μία για κάθε αριθμό τερματικού) στο firewall. Σημειώστε ότι το GDM θα χρησιμοποιήσει αριθμούς τερματικού από 20 και πάνω για ευέλικτους εξυπηρετητές όταν ζητηθεί.

Το X δεν είναι πολύ ασφαλές πρωτόκολλο για χρήση στο διαδίκτυο και το XDMCP είναι ακόμη πιο ανασφαλές.

3.8. PolicyKit

Το GDM μπορεί να διαμορφωθεί για να χρησιμοποιεί το PolicyKit ώστε να επιτρέπει στον διαχειριστή συστήματος να ελέγχει αν η οθόνη εισόδου θα παρέχει τα πλήκτρα τερματισμού και επανεκκίνησης στην οθόνη του greeter.

Αυτά τα πλήκτρα ελέγχονται από τις ενέργειες org.freedesktop.consolekit.system.stop-multiple-users και org.freedesktop.consolekit.system.restart-multiple-users αντίστοιχα. Οι κανόνες για αυτές τις ενέργειες μπορούν να ρυθμιστούν χρησιμοποιώντας το εργαλείο polkit-gnome-authorization, ή το πρόγραμμα γραμμής εντολών polkit-auth.

3.9. RBAC (Έλεγχος προσπέλασης βάσει ρόλου)

Το GDM μπορεί να διαμορφωθεί έτσι ώστε να χρησιμοποιεί το RBAC αντί για το PolicyKit. Σε αυτή την περίπτωση, η διαμόρφωση με το RBAC χρησιμοποιείται για να ελέγχει αν η οθόνη εισόδου θα παρέχει τα πλήκτρα τερματισμού και επανεκκίνησης στην οθόνη του greeter.

Για παράδειγμα, στο Oracle Solaris, η έγκριση του "solaris.system.shutdown" χρησιμοποιείται για να το ελέγχει. Απλά μετατρέψτε το αρχείο /etc/user_attr έτσι ώστε ο χρήστης "gdm" να έχει αυτή την εξουσιοδότηση.