Το NIS, ακρώνυμο που σημαίνει Network Information Services, σχεδιάστηκε από τη Sun Microsystems για να συγκεντρώσει τη διαχείριση των συστημάτων UNIX® (αρχικά των SunOS™). Σήμερα το NIS θεωρείται βιομηχανικό πρότυπο και υποστηρίζεται από όλα τα συστήματα βασισμένα στο UNIX (Solaris™, HP-UX, AIX®, Linux, NetBSD, OpenBSD, FreeBSD, κτλ) .
Το NIS ήταν πρωτύτερα γνωστό ως Yellow Pages, αλλά λόγω ζητημάτων με τη χρήση της συγκεκριμένης εμπορικής ονομασίας, η Sun άλλαξε το όνομα. Η παλαιά ονομασία (και η yp) χρησιμοποιούνται συχνά έως και σήμερα.
Είναι ένα σύστημα πελάτη/εξυπηρετητή τύπου RPC που επιτρέπει σε μία ομάδα μηχανημάτων που βρίσκονται στον ίδιο χώρο NIS να μοιράζονται ένα κοινό σύνολο ρυθμιστικών αρχείων. Αυτό επιτρέπει στον διαχειριστή του συστήματος να εγκαθιστά πελάτες NIS με ελάχιστες ενέργειες ρυθμίσεων και να προσθέτει, να αφαιρεί ή να μεταβάλλει δεδομένα ρυθμίσεων από μια μοναδική τοποθεσία.
Είναι παρόμοιο με τα συστήματα χώρου Windows NT®. Αν και στην εσωτερική υλοποίηση δε μοιάζουν καθόλου μεταξύ τους, οι βασικές λειτουργίες τους μπορούν να συγκριθούν.
Υπάρχουν αρκετοί όροι και σημαντικές διεργασίες χρήστη που θα συναντήσετε όταν θα επιχειρήσετε να υλοποιήσετε το NIS στο FreeBSD, είτε αν πρόκειται να τρέξετε έναν εξυπηρετητή NIS, είτε για να ενεργοποιήσετε ένα πελάτη NIS.
| Όρος | Περιγραφή |
|---|---|
| Όνομα χώρου NIS | Ο κύριος εξυπηρετητής NIS και όλοι οι πελάτες του (συμπεριλαμβανομένων και των δευτερευόντων-slave εξυπηρετητών) έχουν ένα όνομα χώρου NIS. Παρόμοια με ένα όνομα χώρου σε περιβάλλον Windows NT , το όνομα χώρου NIS δεν συσχετίζεται με το DNS. |
| rpcbind | Πρέπει να εκτελείται για την ενεργοποίηση του RPC (Remote Procedure Call, ένα πρωτόκολλο δικτύου που χρησιμοποιεί το NIS). Εάν δεν εκτελείται το rpcbind, τότε θα είναι αδύνατο τρέξουμε έναν εξυπηρετητή NIS, ή να ενεργοποιήσουμε ένα πελάτη NIS. |
| ypbind | «Δένει» τον πελάτη NIS στον εξυπηρετητή NIS. Θα πάρει το όνομα χώρου NIS από το σύστημα, και χρησιμοποιώντας το πρωτόκολλο RPC, θα συνδεθεί στον εξυπηρετητή. Το ypbind είναι ο πυρήνας επικοινωνίας πελάτη-εξυπηρετητή στο περιβάλλον NIS. Αν το ypbind σταματήσει στο μηχάνημα του πελάτη, τότε δε θα μπορεί να συνδεθεί στον εξυπηρετητή NIS. |
| ypserv | Θα πρέπει να εκτελείται μόνο στους εξυπηρετητές NIS. Είναι αυτούσια η διεργασία του εξυπηρετητή NIS. Εάν διακοπεί η λειτουργία του ypserv(8), τότε ο εξυπηρετητής δεν θα είναι σε θέση να αποκριθεί σε αιτήματα NIS (ευτυχώς υπάρχει ένας δευτερεύων (slave) εξυπηρετητής να τον αντικαταστήσει). Υπάρχουν κάποιες υλοποιήσεις σε NIS (αλλά όχι στο FreeBSD), όπου δεν επιτρέπεται η επανασύνδεση σε άλλο εξυπηρετητή, αν πριν την διακοπή ο εξυπηρετητής ήταν σε λειτουργία. Σε αυτή την περίπτωση το μόνο που μπορεί να βοηθήσει την κατάσταση είναι να γίνει επανεκκίνηση στη διεργασία του εξυπηρετητή (ή και στο μηχάνημα) ή στη διεργασία ypbind του πελάτη. |
| rpc.yppasswdd | Ακόμα μία διεργασία που θα έπρεπε να εκτελείται μόνο στους κύριους (master) εξυπηρετητές NIS. Αυτός είναι ο δαίμονας που επιτρέπει στους πελάτες NIS να αλλάζουν το συνθηματικό πρόσβασης NIS. Αν ο δαίμονας δεν εκτελείται, τότε οι χρήστες θα πρέπει να συνδεθούν στον κύριο εξυπηρετητή NIS και να αλλάξουν από κει το συνθηματικό τους. |
Υπάρχουν τρεις τύποι κόμβων σε περιβάλλον NIS: οι κύριοι (master) εξυπηρετητές, οι δευτερεύοντες (slave) εξυπηρετητές, και οι πελάτες. Οι εξυπηρετητές ενεργούν ως κεντρικός χώρος απόθεσης των ρυθμιστικών πληροφοριών των κόμβων. Οι κύριοι εξυπηρετητές κρατούν το πρωτότυπο της πληροφορίας αυτής, ενώ οι δευτερεύοντες κρατούν πιστό αντίγραφο της πληροφορίας που περιέχεται στους κύριους προς πλεονασμό. Οι πελάτες απευθύνονται στους εξυπηρετητές για την παροχή αυτών των πληροφοριών.
Μπορούν να διανεμηθούν με αυτό τον τρόπο πληροφορίες διάσπαρτες σε πολλά αρχεία. Τα αρχεία master.passwd, group, και hosts μπορούν να διαμοιραστούν μέσω NIS. Κάθε φορά που μία διεργασία σε ένα πελάτη χρειάζεται μία πληροφορία που κανονικά θα βρισκόταν τοπικά σε αυτά τα αρχεία, τώρα αντιθέτως θα ψάξει στον εξυπηρετητή NIS με τον οποίο έχει συνδεθεί.
Πρωτεύον εξυπηρετητής NIS . Αυτός ο εξυπηρετητής, είναι παρόμοιος με τον πρωτεύοντα domain controller των συστημάτων Windows NT , διατηρεί τα κοινά αρχεία που χρησιμοποιούνται από όλους τους πελάτες NIS. Τα αρχεία passwd, group, και διάφορα άλλα αρχεία που χρησιμοποιούνται από τους πελάτες NIS ζούνε στον πρωτεύοντα εξυπηρετητή.
Σημείωση: Υπάρχει δυνατότητα για ένα μηχάνημα να παίζει το ρόλο του πρωτεύοντος εξυπηρετητή για περισσότερα από ένα NIS domain. Ωστόσο, δεν θα αντιμετωπίσουμε την περίπτωση αυτή, αφού βασιζόμαστε στην εισαγωγή αυτή σε ένα περιβάλλον NIS μικρής κλίμακας.
Δευτερεύον εξυπηρετητής NIS. Παρόμοια με τους εφεδρικούς (backup) domain controllers στα Windows NT, οι δευτερεύοντες (slave) εξυπηρετητές NIS διατηρούν αντίγραφα των δεδομένων του πρωτεύοντος. Οι δευτερεύοντες εξυπηρετητές παρέχουν πλεονασμό σε περιβάλλοντα σημαντικής λειτουργίας. Επίσης βοηθούν στην ισοστάθμιση του φορτίου που αναλογεί στον πρωτεύοντα εξυπηρετητή. Οι Πελάτες NIS προσαρτώνται πάντα στον εξυπηρετητή NIS από τον οποίο θα λάβουν την πρώτη απάντηση, επομένως αυτό σημαίνει πως εξυπηρετούνται και από τους δευτερεύοντες εξυπηρετητές.
Πελάτες NIS . Οι πελάτες NIS, όπως συμβαίνει και με τους περισσότερους σταθμούς εργασίας Windows NT, για να συνδεθούν στο δίκτυο πιστοποιούνται στους εξυπηρετητές NIS (ή στους domain controllers των Windows NT για την περίπτωση των σταθμών εργασίας Windows NT).
Αυτή η ενότητα ασχολείται με τις ρυθμίσεις ενός παραδείγματος σε περιβάλλον NIS.
Ας υποθέσουμε πως είστε διαχειριστής ενός μικρού πανεπιστημιακού εργαστηρίου. Το εργαστήριο αποτελείται από 15 μηχανήματα FreeBSD και δεν έχει κανένα σημείο κεντρικής διαχείρισης. Κάθε μηχάνημα έχει το δικό του /etc/passwd και /etc/master.passwd. Τα αρχεία αυτά συγχρονίζονται χειροκίνητα για κάθε σταθμό εργασίας. Επί της παρούσης, όταν πρέπει να προστεθεί ένα ένας νέος χρήστης στο εργαστήριο πρέπει να εκτελέσουμε την εντολή adduser και στα 15 μηχανήματα μας. Προφανώς αυτό θα πρέπει να αλλάξει, και επιλέξαμε να μετατρέψουμε το εργαστήριο, χρησιμοποιώντας την τεχνολογία NIS, και δύο από τα μηχανήματα μας για εξυπηρετητές NIS
Επομένως, η συγκρότηση του εργαστηρίου θα μοιάζει τώρα κάπως έτσι:
| Όνομα Μηχανήματος | Διεύθυνση IP | Ρόλος Μηχανήματος |
|---|---|---|
| ellington | 10.0.0.2 | πρωτεύον NIS (master) |
| coltrane | 10.0.0.3 | δευτερεύον NIS (slave) |
| basie | 10.0.0.4 | σταθμός εργασίας σχολής |
| bird | 10.0.0.5 | Μηχάνημα "πελάτης" |
| cli[1-11] | 10.0.0.[6-17] | ’Άλλα μηχανήματα "πελάτες" |
Αν ρυθμίζετε το σχήμα NIS για πρώτη φορά, είναι καλή ιδέα να να σκεφτείτε πως θα θέλατε να είναι. Δεν έχει σημασία το μέγεθος του δικτύου σας, υπάρχουν λίγες αποφάσεις που πρέπει να πάρετε.
Αυτό δεν είναι το συνηθισμένο «όνομα χώρου» που συνήθως χρησιμοποιείτε. Λέγεται πιο σωστά «όνομα χώρου NIS». Όταν κάποιος πελάτης αναζητά πληροφορίες στο δίκτυο, συμπεριλαμβάνει στην αναζήτηση και το όνομα χώρου NIS στο οποίο ανήκει και ο ίδιος. Με αυτό τον τρόπο σε ένα δίκτυο με πολλούς εξυπηρετητές μπορεί να αποφασιστεί ποιος εξυπηρετητής θα αποκρίνεται σε κάθε αίτημα. Μπορείτε να δείτε το όνομα χώρου NIS σαν το όνομα μιας ομάδας Η/Υ που συσχετίζονται με κάποιο τρόπο.
Κάποιοι οργανισμοί επιλέγουν να χρησιμοποιούν σαν όνομα χώρου NIS, το όνομα χώρου που χρησιμοποιούν στις διαδικτυακές ιστοσελίδες τους. Ωστόσο, κάτι τέτοιο δεν προτείνεται, αφού μπορεί να δημιουργήσει σύγχυση, ιδιαίτερα όταν προσπαθείτε να επιλύσετε δικτυακά προβλήματα. Το όνομα χώρου NIS θα πρέπει να είναι μοναδικό στο δίκτυο σας και θα ωφελούσε αν περιέγραφε την ομάδα μηχανημάτων που αντιπροσωπεύει. Για παράδειγμα, το καλλιτεχνικό τμήμα (art) της Acme Inc. θα μπορούσε να έχει ως χώρο NIS το όνομα «acme-art». Για αυτό το παράδειγμα, υποθέτουμε ότι έχετε επιλέξει το όνομα χώρου test-domain , για το δίκτυο σας.
Ωστόσο, μερικά λειτουργικά συστήματα (ιδιαιτέρως το SunOS) χρησιμοποιούν ως όνομα χώρου NIS το διαδικτυακό όνομα χώρου τους. Εάν έστω και ένα μηχάνημα σας έχει αυτό τον περιορισμό, τότε θα πρέπει αναγκαστικά να χρησιμοποιήσετε το διαδικτυακό όνομα χώρου σας και για χώρο NIS.
Υπάρχουν πολλά πράγματα που θα πρέπει να έχουμε κατά νου όταν επιλέγουμε να χρησιμοποιήσουμε ένα μηχάνημα ως εξυπηρετητή NIS. Ένα από τα πιο κακότυχα πράγματα σχετικά με το NIS είναι το επίπεδο εξάρτησης των πελατών από τον εξυπηρετητή. Αν κάποιος πελάτης δε μπορεί να έρθει σε επικοινωνία με τον εξυπηρετητή του χώρου NIS, πολύ συχνά το μηχάνημα αχρηστεύεται. Η έλλειψη πληροφόρησης χρηστών και ομάδων μπορεί να αναστείλει προσωρινά τη λειτουργία στα περισσότερα συστήματα. Έχοντας αυτά κατά νου θα πρέπει να είστε σίγουροι ότι επιλέγετε έναν εξυπηρετητή που δε θα έχει συχνές επανεκκινήσεις, ή που θα χρησιμοποιείται για development. Υπό ιδανικές συνθήκες ο εξυπηρετητής NIS θα πρέπει να είναι ένα ανεξάρτητο μηχάνημα με μοναδικό στόχο στη ζωή του να είναι εξυπηρετητής NIS. Αν το δίκτυο σας δεν έχει μεγάλη κίνηση, τότε είναι αποδεκτό να στήσετε τον εξυπηρετητή σε ένα μηχάνημα όπου εκτελούνται άλλες υπηρεσίες, αλλά λάβετε υπόψιν σας ότι αν ο εξυπηρετητής NIS δεν είναι διαθέσιμος, θα επηρεάσει όλους τους πελάτες NIS ανεξαιρέτως.
Αυθεντικά αντίγραφα όλων των πληροφοριών NIS αποθηκεύονται σε ένα μοναδικό μηχάνημα που ονομάζεται πρωτεύον εξυπηρετητής NIS. Οι βάσεις δεδομένων που χρησιμοποιούνται για την αποθήκευση των πληροφοριών αποκαλούνται απεικονίσεις NIS. Στο FreeBSD, αυτές οι απεικονίσεις αποθηκεύονται στον κατάλογο /var/yp/[domainname] όπου [domainname] είναι το όνομα του χώρου NIS που εξυπηρετούν. Ένας απλός εξυπηρετητής NIS μπορεί να υποστηρίζει μόνος του πολλούς χώρους , επομένως είναι πιθανό να βρείτε αρκετούς καταλόγους, ένα για κάθε υποστηριζόμενο χώρο. Κάθε χώρος θα έχει τις δικές του ανεξάρτητες ομάδες απεικονίσεων.
Ο πρωτεύον και οι δευτερεύοντες εξυπηρετητές NIS διαχειρίζονται όλα τα αιτήματα NIS χρησιμοποιώντας τον δαίμονα ypserv. Ο ypserv είναι υπεύθυνος για τη λήψη εισερχομένων αιτημάτων από τους πελάτες NIS. Μεταφράζει τον ζητούμενο χώρο και την απεικόνιση του σε μία διαδρομή προς το αντίστοιχο αρχείο της βάσης δεδομένων και δρομολογεί τα δεδομένα από τη βάση πίσω στον πελάτη.
Η εγκατάσταση του πρωτεύοντος εξυπηρετητή NIS μπορεί να είναι σχετικά τυποποιημένη εργασία, αναλόγως των αναγκών σας. Το FreeBSD υποστηρίζει το NIS με το δικό του τρόπο. Το μόνο που χρειάζεται να κάνετε είναι να προσθέστε τις ακόλουθες γραμμές στο /etc/rc.conf, και το FreeBSD αυτόματα θα ρυθμίσει τα πάντα για σας.
nisdomainname="test-domain"Αυτή η γραμμή ορίζει το όνομα χώρου NIS στο test-domain κατά τη εκκίνησης των δικτυακών λειτουργιών (π.χ. μετά από επανεκκίνηση).
nis_server_enable="YES"Αυτή η ρύθμιση ενημερώνει το FreeBSD να ξεκινάει τις διεργασίες του εξυπηρετητή NIS αμέσως μετά την εκκίνηση των δικτυακών λειτουργιών.
nis_yppasswdd_enable="YES"Αυτή η ρύθμιση θα ενεργοποιήσει το δαίμονα rpc.yppasswdd ο οποίος, όπως προαναφέραμε, επιτρέπει στους χρήστες να μπορούν να αλλάζουν τον κωδικό NIS από οποιοδήποτε μηχάνημα πελάτη.
Σημείωση: Ανάλογα με τον τρόπο εγκατάστασης του NIS, πιθανώς να χρειάζεται να κάνετε κι άλλες καταχωρήσεις. Για περισσότερες πληροφορίες, δείτε παρακάτω την ενότητα για τους εξυπηρετητές NIS που είναι και πελάτες NIS.
Τώρα, το μόνο που χρειάζεται να κάνετε είναι να εκτελέσετε την εντολή /etc/netstart σαν χρήστης root. Θα γίνουν αυτόματα όλες οι απαραίτητες ρυθμίσεις, με τις τιμές που έχετε ορίσει στο /etc/rc.conf.
Οι απεικονίσεις NIS είναι αρχεία βάσης δεδομένων που κρατούνται στον κατάλογο /var/yp. Δημιουργούνται από ρυθμιστικά αρχεία που βρίσκονται στον κατάλογο /etc του πρωτεύοντος NIS, με μοναδική εξαίρεση το αρχείο /etc/master.passwd, διότι δεν επιθυμούμε τη διάδοση των κωδικών πρόσβασης των λογαριασμών του root και άλλων λογαριασμών διαχειριστών σε όλους τους εξυπηρετητές του χώρου NIS. Επομένως, πριν αρχικοποιήσουμε τις απεικονίσεις NIS, θα πρέπει:
# cp /etc/master.passwd /var/yp/master.passwd # cd /var/yp # vi master.passwd
Θα πρέπει να διαγράψουμε όλες τις καταχωρίσεις που αφορούν λογαριασμούς του συστήματος (bin, tty, kmem, games, κτλ), όπως επίσης και κάθε άλλο λογαριασμό του οποίου τα στοιχεία δεν επιθυμούμε να διαδοθούν στους πελάτες NIS (για παράδειγμα του root και κάθε άλλου λογαριασμού με UID 0 (υπερχρήστης) ).
Σημείωση: Βεβαιωθείτε ότι το /var/yp/master.passwd δεν έχει άδεια εγγραφής ούτε από την ομάδα του, ούτε από όλους τους υπόλοιπους (mode 600)! Χρησιμοποιήστε την εντολή chmod , αν χρειάζεται.
Αν ολοκληρώσατε τα προηγούμενα βήματα, έφτασε η στιγμή να αρχικοποιήσουμε τις
απεικονίσεις NIS ! Το σενάριο ypinit που περιλαμβάνεται στο
FreeBSD θα φτιάξει τις απεικονίσεις για εσάς (δείτε τη σελίδα βοηθείας για περισσότερες
πληροφορίες). Να σημειωθεί ότι το συγκεκριμένο σενάριο είναι διαθέσιμο στα περισσότερα
Λ.Σ. UNIX , αλλά όχι σε όλα. Στο Digital UNIX/Compaq Tru64
UNIX ονομάζεται ypsetup. Επειδή δημιουργούμε τις απεικονίσεις
για τον πρωτεύον εξυπηρετητή NIS, θα περάσουμε την επιλογή -m
στο ypinit. Για να δημιουργήσετε τις απεικονίσεις NIS,
υποθέτοντας ότι ακολουθήσατε τα παραπάνω βήματα, εκτελέστε:
ellington# ypinit -m test-domain Server Type: MASTER Domain: test-domain Creating an YP server will require that you answer a few questions. Questions will all be asked at the beginning of the procedure. Do you want this procedure to quit on non-fatal errors? [y/n: n] n Ok, please remember to go back and redo manually whatever fails. If you don't, something might not work. At this point, we have to construct a list of this domains YP servers. rod.darktech.org is already known as master server. Please continue to add any slave servers, one per line. When you are done with the list, type a <control D>. master server : ellington next host to add: coltrane next host to add: ^D The current list of NIS servers looks like this: ellington coltrane Is this correct? [y/n: y] y [..output from map generation..] NIS Map update completed. ellington has been setup as an YP master server without any errors.
Το ypinit θα πρέπει να έχει δημιουργήσει το /var/yp/Makefile από το /var/yp/Makefile.dist. Το αρχείο δημιουργείται με προεπιλογές για περιβάλλον με μονό εξυπηρετητή NIS και υποθέτοντας πως όλοι οι πελάτες σας είναι μηχανήματα FreeBSD. Αφού όμως το test-domain έχει και δευτερεύον εξυπηρετητή, θα πρέπει να επεξεργαστείτε το /var/yp/Makefile:
ellington# vi /var/yp/Makefile
Αφαιρέστε το σχόλιο από την ακόλουθη γραμμή:
NOPUSH = "True"
(εάν δεν έχει ήδη αφαιρεθεί).
Η εγκατάσταση ενός δευτερεύοντος-slave εξυπηρετητή NIS είναι πιο απλή από την
εγκατάσταση του πρωτεύοντος. Συνδεθείτε στον δευτερεύοντα εξυπηρετητή και επεξεργαστείτε
το αρχείο /etc/rc.conf όπως κάνατε προηγουμένως. Η μόνη διαφορά
είναι ότι τώρα θα πρέπει να χρησιμοποιούμε την επιλογή -s
όταν εκτελούμε την ypinit. Η επιλογή -s απαιτεί την υποβολή και του ονόματος χώρου NIS του πρωτεύοντος,
επομένως η εντολή θα μοιάζει με την ακόλουθη:
coltrane# ypinit -s ellington test-domain Server Type: SLAVE Domain: test-domain Master: ellington Creating an YP server will require that you answer a few questions. Questions will all be asked at the beginning of the procedure. Do you want this procedure to quit on non-fatal errors? [y/n: n] n Ok, please remember to go back and redo manually whatever fails. If you don't, something might not work. There will be no further questions. The remainder of the procedure should take a few minutes, to copy the databases from ellington. Transferring netgroup... ypxfr: Exiting: Map successfully transferred Transferring netgroup.byuser... ypxfr: Exiting: Map successfully transferred Transferring netgroup.byhost... ypxfr: Exiting: Map successfully transferred Transferring master.passwd.byuid... ypxfr: Exiting: Map successfully transferred Transferring passwd.byuid... ypxfr: Exiting: Map successfully transferred Transferring passwd.byname... ypxfr: Exiting: Map successfully transferred Transferring group.bygid... ypxfr: Exiting: Map successfully transferred Transferring group.byname... ypxfr: Exiting: Map successfully transferred Transferring services.byname... ypxfr: Exiting: Map successfully transferred Transferring rpc.bynumber... ypxfr: Exiting: Map successfully transferred Transferring rpc.byname... ypxfr: Exiting: Map successfully transferred Transferring protocols.byname... ypxfr: Exiting: Map successfully transferred Transferring master.passwd.byname... ypxfr: Exiting: Map successfully transferred Transferring networks.byname... ypxfr: Exiting: Map successfully transferred Transferring networks.byaddr... ypxfr: Exiting: Map successfully transferred Transferring netid.byname... ypxfr: Exiting: Map successfully transferred Transferring hosts.byaddr... ypxfr: Exiting: Map successfully transferred Transferring protocols.bynumber... ypxfr: Exiting: Map successfully transferred Transferring ypservers... ypxfr: Exiting: Map successfully transferred Transferring hosts.byname... ypxfr: Exiting: Map successfully transferred coltrane has been setup as an YP slave server without any errors. Don't forget to update map ypservers on ellington.
Θα πρέπει τώρα να έχετε ένα κατάλογο που ονομάζεται /var/yp/test-domain. Σε αυτό τον κατάλογο θα πρέπει να περιέχονται οι απεικονίσεις του πρωτεύοντος εξυπηρετητή NIS. Θα χρειαστεί να κάνετε τις αναγκαίες ρυθμίσεις ώστε να επιβεβαιώσετε ότι οι απεικονίσεις θα είναι ενημερωμένες. Οι ακόλουθες καταχωρίσεις στο /etc/crontab του δευτερεύοντος φροντίζουν ώστε να γίνεται κανονικά η ενημέρωση:
20 * * * * root /usr/libexec/ypxfr passwd.byname 21 * * * * root /usr/libexec/ypxfr passwd.byuid
Αυτές οι δύο γραμμές εξαναγκάζουν τον δευτερεύοντα να συγχρονίζει τις απεικονίσεις του με τις απεικονίσεις του πρωτεύοντος εξυπηρετητή. Αν και δεν είναι υποχρεωτικές αυτές οι καταχωρήσεις, τη στιγμή που ο πρωτεύων επιχειρεί να επιβεβαιώσει οποιαδήποτε αλλαγή οι απεικονίσεις του μεταδίδονται στους δευτερεύοντες και επειδή η πληροφορία του κωδικού πρόσβασης είναι ζωικής σημασίας στα συστήματα που εξαρτώνται από τον εξυπηρετητή, είναι καλή ιδέα να εξαναγκάζουμε τις ενημερώσεις. Αυτό είναι περισσότερο σημαντικό σε δίκτυα με αυξημένη κίνηση δεδομένων όπου οι ενημερώσεις των απεικονίσεων πιθανώς να μην προλαβαίνουν να ολοκληρώνονται.
Εκτελέστε τώρα, την εντολή /etc/netstart στον δευτερεύοντα εξυπηρετητή, οποίος θα ξεκινήσει ξανά τον εξυπηρετητή NIS.
Κάθε πελάτης NIS δημιουργεί αυτό που λέγεται μία "διαδικασία δέσμευσης" (binding) με ένα συγκεκριμένο εξυπηρετητή NIS χρησιμοποιώντας τον δαίμονα ypbind. Ο ypbind ελέγχει τον προεπιλεγμένο χώρο του συστήματος (που έχει δηλωθεί με την εντολή domainname), και ξεκινά την αποστολή αιτημάτων broadcasting (προς όλες τις κατευθύνσεις) RPC στο τοπικό δίκτυο. Αυτά τα αιτήματα προσδιορίζουν το όνομα του χώρου με το οποίο ο δαίμονας ypbind επιχειρεί να δημιουργήσει τη διαδικασία δέσμευσης. Εάν ένας εξυπηρετητής έχει ρυθμιστεί να εξυπηρετεί το αιτούμενο όνομα χώρου του broadcast, θα απαντήσει στο ypbind, το οποίο θα καταγράψει τη διεύθυνση του εξυπηρετητή. Εάν υπάρχουν πολλοί εξυπηρετητές διαθέσιμοι (για παράδειγμα, ένας πρωτεύων και αρκετοί δευτερεύοντες), το ypbind θα χρησιμοποιεί τη διεύθυνση που θα ανταποκριθεί πρώτη. Από το σημείο αυτό και μετά, το σύστημα "πελάτης" θα δρομολογεί όλα τα αιτήματα NIS προς αυτόν τον εξυπηρετητή. Ο ypbind μόνο περιστασιακά θα κάνει «ping» στον εξυπηρετητή για να βεβαιώνεται ότι είναι ενεργός και λειτουργικός. Αν αποτύχει η λήψη των pings για κάποιο εύλογο χρονικό διάστημα, ο ypbind θα μαρκάρει τον χώρο ως αδέσμευτο (unbound) και θα ξεκινήσει και πάλι τη διαδικασία broadcasting με την ελπίδα να βρει άλλο διαθέσιμο εξυπηρετητή.
Η εγκατάσταση ενός μηχανήματος FreeBSD για πελάτη NIS είναι τυποποιημένη εργασία.
Επεξεργαστείτε το αρχείο /etc/rc.conf και προσθέστε τις ακόλουθες γραμμές ώστε να ορίσετε το όνομα χώρου NIS και να ξεκινήσετε τον ypbind με το ξεκίνημα των δικτυακών λειτουργιών:
nisdomainname="test-domain" nis_client_enable="YES"
Για να εισάγετε όλες τις πιθανές καταχωρήσεις κωδικών πρόσβασης από τον εξυπηρετητή NIS, αφαιρέστε από το αρχείο /etc/master.passwd όλους τους λογαριασμούς χρηστών και χρησιμοποιήστε την εντολή vipw για να προσθέσετε την ακόλουθη γραμμή στο τέλος του αρχείου:
+:::::::::
Σημείωση: Η γραμμή αυτή θα παρέχει ένα λογαριασμό, για κάθε πρόσωπο με ενεργό λογαριασμό στις απεικονίσεις κωδικών πρόσβασης του εξυπηρετητή NIS. Υπάρχουν πολλοί τρόποι να ρυθμίσετε τον πελάτη NIS αλλάζοντας αυτή τη γραμμή. Για περισσότερες πληροφορίες, δείτε παρακάτω την ενότητα netgroups. Για ακόμη περισσότερες λεπτομέρειες διαβάστε το βιβλίο της O'Reilly Managing NFS and NIS.
Σημείωση: Θα πρέπει να κρατήσετε τουλάχιστον ένα τοπικό λογαριασμό (δλδ. που να μην εισάγεται από το NIS) στο αρχείο /etc/master.passwd και αυτός ο λογαριασμός θα πρέπει επίσης να είναι μέλος της ομάδας wheel. Αν κάτι δεν πάει καλά με το NIS, ο λογαριασμός αυτός μπορεί να χρησιμοποιηθεί για να συνδεθείτε απομακρυσμένα, για να γίνετε root, και για να διορθώσετε τα πράγματα.
Για να εισάγετε όλες τις δυνατές καταχωρήσεις ομάδων από τον εξυπηρετητή NIS, προσθέστε αυτή τη γραμμή στο αρχείο /etc/group:
+:*::
Μετά την ολοκλήρωση αυτών των βημάτων, θα πρέπει να είστε σε θέση να εκτελέσετε την εντολή ypcat passwd και να δείτε τις απεικονίσεις κωδικών πρόσβασης του εξυπηρετητή NIS.
Γενικά, οποιοσδήποτε απομακρυσμένος χρήστης μπορεί να εκδώσει μια RPC στο ypserv(8) και να ανακτήσει το περιεχόμενο των απεικονίσεων NIS, δεδομένου ότι ο απομακρυσμένος χρήστης γνωρίζει το όνομα χώρου σας. Για να παρεμποδίσουμε μη εξουσιοδοτημένες συναλλαγές, το ypserv(8) υποστηρίζει μια λειτουργία που ονομάζεται «securenets» και η οποία μπορεί να χρησιμοποιηθεί για να περιορίσει την πρόσβαση σε ένα συγκεκριμένο κόμβο. Κατά την εκκίνηση, το ypserv(8) θα επιχειρήσει να φορτώσει τις πληροφορίες των securenets από ένα αρχείο που ονομάζεται /var/yp/securenets.
Σημείωση: Αυτή η διαδρομή διαφέρει αναλόγως με τη διαδρομή που έχετε ορίσει με την επιλογή
-p. Αυτό το αρχείο περιέχει καταχωρήσεις που αποτελούνται από έναν προσδιορισμό δικτύου και από μία μάσκα δικτύου, διαχωρισμένα από κενά διαστήματα. Θεωρήστε τις γραμμές που ξεκινούν με «#» ως σχόλια. Ένα δείγμα αρχείου securenets θα μοιάζει κάπως έτσι:
# allow connections from local host -- mandatory 127.0.0.1 255.255.255.255 # allow connections from any host # on the 192.168.128.0 network 192.168.128.0 255.255.255.0 # allow connections from any host # between 10.0.0.0 to 10.0.15.255 # this includes the machines in the testlab 10.0.0.0 255.255.240.0
Εάν το ypserv(8) λάβει ένα αίτημα από μια διεύθυνση που αντιστοιχεί με κάποιον από τους κανόνες, θα επεξεργαστεί το αίτημα κανονικά. Εάν η διεύθυνση αποτύχει να αντιστοιχηθεί με κάποιον κανόνα, το αίτημα θα αγνοηθεί και ένα προειδοποιητικό μήνυμα θα προστεθεί στο ιστορικό. Αν το αρχείο /var/yp/securenets δεν υπάρχει, τότε το ypserv θα επιτρέψει τις συνδέσεις από οποιονδήποτε κόμβο.
Το πρόγραμμα ypserv παρέχει υποστήριξη επίσης για το πακέτο του Wietse Venema TCP Wrapper. Συγκεκριμένα, επιτρέπει στο διαχειριστή να χρησιμοποιεί για τον έλεγχο πρόσβασης τα ρυθμιστικά αρχεία του TCP Wrapper αντί του αρχείου /var/yp/securenets.
Σημείωση: Αν και οι δύο αυτοί μηχανισμοί ελέγχου πρόσβασης παρέχουν κάποιο βαθμό ασφάλειας, από την άλλη είναι τρωτοί σε επιθέσεις «καμουφλαρισμένων IP», όπως συμβαίνει και με τις προνομιακές δοκιμαστικές port. Όλη η κίνηση που σχετίζεται με το NIS θα έπρεπε να έχει φραγεί από το firewall σας .
Διακομιστές που χρησιμοποιούν το /var/yp/securenets μπορεί να αποτύχουν στην εξυπηρέτηση νόμιμων πελατών NIS που φέρουν αρχαϊκές υλοποιήσεις TCP/IP. Κάποιες από αυτές τις υλοποιήσεις ορίζουν μηδενικά όλα τα bit του κόμβου όταν κάνουν broadcasting και/ή αποτυγχάνουν στον έλεγχο της μάσκας subnet κατά τον υπολογισμό της διεύθυνσης broadcast. Αν και κάποια από αυτά τα προβλήματα δε μπορούν να διορθωθούν αλλάζοντας τις ρυθμίσεις του πελάτη, άλλα πάλι προβλήματα μπορεί να εξαναγκάσουν σε απόσυρση των σχετικών συστημάτων (πελάτες) ή σε εγκατάλειψη του /var/yp/securenets.
Η χρήση του /var/yp/securenets σε εξυπηρετητές με τόσο αρχαϊκές TCP/IP υλοποιήσεις είναι πραγματικά κακή τακτική και θα οδηγήσει σε απώλεια των υπηρεσιών NIS για μεγάλο μέρος του δικτύου σας.
Η χρήση του πακέτου TCP Wrapper αυξάνει την latency του NIS εξυπηρετητή σας. Επιπρόσθετες καθυστερήσεις μπορούν να διαρκούν τόσο ώστε να προκαλέσουν timeouts στα προγράμματα πελατών, ειδικά σε δίκτυα μεγάλης κίνησης ή με αργούς εξυπηρετητές NIS. Εάν ένα ή περισσότερα δίκτυα πελατών υποφέρουν από αυτά τα συμπτώματα, θα πρέπει να μετατρέψετε, τα σχετικά συστήματα πελατών σε δευτερεύοντες (slave) εξυπηρετητές και να τους εξαναγκάσετε να συνδεθούν μεταξύ τους.
Στο εργαστήριο μας, υπάρχει το μηχάνημα basie που έχει σχεδιαστεί να δουλεύει ως σταθμός εργασίας μόνο για τη σχολή. Δεν επιθυμούμε για αυτό το μηχάνημα να βγει εκτός χώρου NIS, ακόμη κι αν το αρχείο passwd στον πρωτεύοντα εξυπηρετητή NIS περιέχει λογαριασμούς και της σχολής και φοιτητών. Τι μπορούμε να κάνουμε;
Υπάρχει τρόπος να γίνει φραγή σύνδεσης συγκεκριμένων χρηστών από κάποιο μηχάνημα, ακόμη και αν είναι παρόντες στη βάση NIS. Για να γίνει αυτό, το μόνο που χρειάζεται να κάνετε είναι να προσθέσετε το -username στο τέλος του αρχείου /etc/master.passwd στο μηχάνημα πελάτη, όπου username είναι το όνομα του χρήστη του οποίου επιθυμείτε τη φραγή σύνδεσης. Θα σας προτείναμε αυτό να γινόταν μέσω του vipw, διότι μετά την ολοκλήρωση των αλλαγών σας στο /etc/master.passwd, το vipw θα τις περάσει από προσεκτικό έλεγχο, και επίσης θα ανακατασκευάσει αυτόματα τη βάση των κωδικών πρόσβασης. Για παράδειγμα, αν επιθυμούμε να μπλοκάρουμε τη σύνδεση του χρήστη bill στο μηχάνημα basie θα πρέπει να:
basie# vipw [add -bill to the end, exit] vipw: rebuilding the database... vipw: done basie# cat /etc/master.passwd root:[password]:0:0::0:0:The super-user:/root:/bin/csh toor:[password]:0:0::0:0:The other super-user:/root:/bin/sh daemon:*:1:1::0:0:Owner of many system processes:/root:/sbin/nologin operator:*:2:5::0:0:System &:/:/sbin/nologin bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/sbin/nologin tty:*:4:65533::0:0:Tty Sandbox:/:/sbin/nologin kmem:*:5:65533::0:0:KMem Sandbox:/:/sbin/nologin games:*:7:13::0:0:Games pseudo-user:/usr/games:/sbin/nologin news:*:8:8::0:0:News Subsystem:/:/sbin/nologin man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/sbin/nologin bind:*:53:53::0:0:Bind Sandbox:/:/sbin/nologin uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/sbin/nologin pop:*:68:6::0:0:Post Office Owner:/nonexistent:/sbin/nologin nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin +::::::::: -bill basie#
Η μέθοδος που περιγράψαμε στην προηγούμενη ενότητα δουλεύει σχετικά καλά όταν χρειάζεστε ειδικούς κανόνες για ένα πολύ μικρό αριθμό χρηστών και/ή μηχανημάτων. Για ευρύτερα δίκτυα, θα πρέπει να ξεχάσετε την περίπτωση φραγής σύνδεσης συγκεκριμένων χρηστών σε κρίσιμα μηχανήματα, ή αλλιώς διαφορετικά θα πρέπει να κάνετε μετατροπές σε κάθε μηχάνημα ξεχωριστά, χάνοντας έτσι το κύριο προτέρημα χρήσης του NIS: την συγκεντρωτική διαχείριση.
Η λύση των προγραμματιστών ανάπτυξης του NIS σε αυτό το πρόβλημα ονομάζεται netgroups. Ο σκοπός και η σημασιολογία τους μπορεί να συγκριθεί με τις κανονικές ομάδες που χρησιμοποιούνται από τα αρχεία στα συστήματα UNIX. Η κύρια διαφορά τους είναι η απουσία αριθμητικού ID και η δυνατότητα ορισμού ενός netgroup συμπεριλαμβάνοντας λογαριασμούς χρηστών, αλλά και άλλων netgroup.
Τα Netgroups σχεδιάστηκαν για τη διαχείριση μεγάλων, και πολύπλοκων δικτύων με εκατοντάδες χρήστες και μηχανήματα. Από τη μία, αυτό είναι πολύ χρήσιμο όταν πρέπει να αντιμετωπίσετε τέτοιες καταστάσεις. Από την άλλη, αυτή η πολυπλοκότητα κάνει σχεδόν αδύνατο να εξηγηθούν τα netgroups με πολύ απλά παραδείγματα. Το παράδειγμα που θα χρησιμοποιηθεί στην υπόλοιπη ενότητα αποδεικνύει αυτό το πρόβλημα.
Ας υποθέσουμε ότι η επιτυχής εισαγωγή του NIS στο εργαστήριο σας κέντρισε το ενδιαφέρον του προϊσταμένου σας. Η επόμενη εργασία σας είναι να επεκτείνετε το χώρο NIS για να καλύψετε ακόμη μερικά μηχανήματα στη σχολή. Οι δύο πίνακες περιέχουν τα ονόματα των νέων χρηστών και των νέων μηχανημάτων, όπως επίσης και μια σύντομη περιγραφή αυτών.
| Ονόματα Χρηστών | Περιγραφή |
|---|---|
| alpha, beta | Κανονικοί υπάλληλοι τμήματος IT |
| charlie, delta | Νέοι μαθητευόμενοι του τμήματος IT |
| echo, foxtrott, golf, ... | Τακτικοί υπάλληλοι |
| able, baker, ... | Πρακτική εξάσκηση τρέχουσας περιόδου |
| Ονόματα Μηχανημάτων | Περιγραφή |
|---|---|
| war, death, famine, pollution | Οι πιο σημαντικοί εξυπηρετητές σας. Μόνο οι υπάλληλοι IT επιτρέπεται να συνδεθούν σε αυτά τα μηχανήματα. |
| pride, greed, envy, wrath, lust, sloth | Λιγότερο σημαντικοί εξυπηρετητές. Όλα τα μέλη του τμήματος IT επιτρέπεται να συνδεθούν σε αυτά τα μηχανήματα. |
| one, two, three, four, ... | Τακτικοί σταθμοί εργασίας. Μόνον οι πραγματικοί υπάλληλοι επιτρέπεται να χρησιμοποιούν αυτά τα μηχανήματα. |
| trashcan | Ένα πολύ παλιό μηχάνημα δίχως σημαντικά δεδομένα. Εδώ επιτρέπεται η χρήση ακόμα και για την πρακτική εξάσκηση. |
Αν προσπαθούσατε να υλοποιήσετε αυτούς τους περιορισμούς παρεμποδίζοντας ξεχωριστά κάθε χρήστη, θα έπρεπε να προσθέσετε μία γραμμή -user για κάθε passwd του συστήματος, για κάθε χρήστη για τον οποίο δεν επιτρέπεται να συνδεθεί σε αυτό το σύστημα. Αν ξεχάσετε έστω και μία καταχώριση μπορεί να συναντήσετε σοβαρά προβλήματα. Ίσως να είναι εφικτό να ολοκληρώσετε σωστά την αρχική εγκατάσταση, αλλά είναι περισσότερο πιθανό να ξεχάσετε να προσθέσετε αργότερα γραμμές για νέους χρήστες κατά τη διάρκεια καθημερινών εργασιών. ’Άλλωστε, κι ο Μέρφυ ήταν αισιόδοξος.
Η αντιμετώπιση αυτής της κατάστασης με τα netgroups έχει πολλά προτερήματα. Δεν χρειάζεται να διαχειρίζεστε κάθε χρήστη ξεχωριστά. Προσδιορίστε ένα χρήστη σε ένα ή περισσότερα netgroups και επιτρέψτε ή απαγορεύστε η σύνδεση για όλα τα μέλη του netgroup. Εάν προσθέσετε ένα νέο μηχάνημα, θα πρέπει μόνον να ορίσετε περιορισμούς σύνδεσης για τα netgroups. Αν προστεθεί ένας νέος χρήστης, θα πρέπει μόνο να προσθέσετε τον χρήστη σε ένα ή περισσότερα netgroups. Αυτές οι αλλαγές είναι ανεξάρτητες από οποιαδήποτε άλλη: όχι πια «για κάθε συνδυασμό χρήστη και μηχανήματος κάνε...» Εάν η εγκατάσταση του NIS έχει σχεδιαστεί προσεκτικά, θα πρέπει να μετατρέψετε μόνον ένα κεντρικό αρχείο ρυθμίσεων για να παραχωρηθεί ή να απαγορευθεί η άδεια πρόσβασης στα μηχανήματα.
Το πρώτο βήμα είναι η αρχικοποίηση της αντιστοίχησης NIS του netgroup. Το ypinit(8) του FreeBSD δεν δημιουργεί προκαθορισμένα αυτή την αντιστοίχηση, αλλά η υλοποίηση NIS την υποστηρίζει μόλις αυτή δημιουργηθεί. Για να δημιουργήσετε μια κενή αντιστοίχηση, απλά πληκτρολογήστε
ellington# vi /var/yp/netgroup
και αρχίστε να προσθέτετε περιεχόμενο. Για το παράδειγμα μας, θα χρειαστούμε τουλάχιστον τέσσερα netgroups: τακτικοί υπάλληλοι (IT employees), μαθητευόμενοι (IT apprentices), κανονικοί υπάλληλοι (normal employees) και πρακτικής εξάσκησης (interns).
IT_EMP (,alpha,test-domain) (,beta,test-domain)
IT_APP (,charlie,test-domain) (,delta,test-domain)
USERS (,echo,test-domain) (,foxtrott,test-domain) \
(,golf,test-domain)
INTERNS (,able,test-domain) (,baker,test-domain)
IT_EMP, IT_APP κ.τ.λ. είναι τα ονόματα των netgroups. Για κάθε ομάδα σε παρένθεση προστίθεται ένας ή περισσότεροι λογαριασμοί χρηστών σε αυτήν. Τα τρία πεδία μέσα στην ομάδα είναι :
Το όνομα του(ων) κόμβου(ων) όπου τα ακόλουθα αντικείμενα είναι έγκυρα. Εάν δεν προσδιορίσετε κάποιο hostname, η καταχώρηση είναι έγκυρη σε όλους τους κόμβους. Εάν προσδιορίσετε κάποιο hostname, θα εισέλθετε στο βασίλειο του σκότους, της φρίκης και της απόλυτης σύγχυσης.
Το όνομα του λογαριασμού που ανήκει σε αυτό το netgroup.
Το όνομα χώρου για τον λογαριασμό. Μπορείτε να εισάγετε λογαριασμούς από άλλους χώρους NIS στο δικό σας netgroup, εάν είστε ένας από τους άτυχους συντρόφους με περισσότερους από έναν χώρους NIS.
Καθένα από τα πεδία μπορούν να περιέχουν ειδικά σύμβολα συντόμευσης (wildcards). Δείτε την netgroup(5) για περισσότερες λεπτομέρειες.
Σημείωση: Δεν θα έπρεπε να χρησιμοποιούνται ονομασίες Netgroup με περισσότερους από 8 χαρακτήρες, ειδικά αν έχετε μηχανήματα, στον χώρο NIS, που τρέχουν με διαφορετικά λειτουργικά συστήματα. Οι ονομασίες είναι ευαίσθητες στα Κεφαλαία-Μικρά. Ένας εύκολος τρόπος για το διαχωρισμό μεταξύ χρηστών, μηχανημάτων και ονομασίες netgroup είναι η χρήση κεφαλαίων γραμμάτων για την ονομασία των netgroup.
Μερικοί πελάτες NIS (όχι FreeBSD) δε μπορούν να χειριστούν netgroups με μεγάλο αριθμό καταχωρίσεων. Για παράδειγμα, κάποιες παλαιότερες εκδόσεις του SunOS είχαν προβλήματα αν το netgroup περιείχε περισσότερες από 15 καταχωρήσεις. Μπορείτε να παρακάμψετε αυτό το όριο δημιουργώντας διάφορα sub-netgroups των 15 ή και λιγότερων χρηστών και ένα πραγματικό netgroup αποτελούμενο από αυτά τα sub-netgroups:
BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...] BIGGRP2 (,joe16,domain) (,joe17,domain) [...] BIGGRP3 (,joe31,domain) (,joe32,domain) BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3Μπορείτε να επαναλάβετε αυτή την εργασία αν χρειάζεστε περισσότερους από 225 χρήστες σε ένα μονοκόμματο netgroup.
Η ενεργοποίηση και η διανομή των νέων απεικονίσεων NIS είναι εύκολη υπόθεση:
ellington# cd /var/yp ellington# make
Αυτό θα δημιουργήσει τις τρεις απεικονίσεις NIS netgroup, netgroup.byhost and netgroup.byuser. Χρησιμοποιήστε την ypcat(1) για να ελέγξετε αν οι νέες απεικονίσεις NIS είναι διαθέσιμες:
ellington% ypcat -k netgroup ellington% ypcat -k netgroup.byhost ellington% ypcat -k netgroup.byuser
Η επιστροφή από την πρώτη εντολή θα πρέπει να μοιάζει με τα περιεχόμενα του /var/yp/netgroup. Η δεύτερη εντολή δεν θα παράγει κάτι στην έξοδο της αν δεν έχετε καθορίσει κάποιο netgroup συγκεκριμένου κόμβου. Η τρίτη εντολή μπορεί να χρησιμοποιηθεί για λάβετε τη λίστα των netgroups για ένα χρήστη.
Η ρύθμιση του πελάτη είναι αρκετά απλή. Για να ρυθμιστεί ο εξυπηρετητής war, θα πρέπει μόνο να ξεκινήσετε το vipw(8) και να αντικαταστήσετε τη γραμμή
+:::::::::
με
+@IT_EMP:::::::::
Τώρα, εισάγονται στη βάση δεδομένων κωδικών πρόσβασης του war μόνο τα δεδομένα για τους χρήστες που ορίζονται στο netgroup IT_EMP και μόνο σε αυτούς τους χρήστες επιτρέπεται να συνδεθούν.
Δυστυχώς, ο περιορισμός αυτός ισχύει επίσης και για την συνάρτηση ~ του κελύφους καθώς και για όλες τις ρουτίνες μετατροπής του ονόματος χρήστη σε αριθμητικό ID χρήστη. Με άλλα λόγια, η εντολή cd ~user δεν θα δουλέψει, η ls -l θα εμφανίζει το αριθμητικό ID αντί του ονόματος χρήστη και η find . -user joe -print θα επιστρέφει σφάλμα “No such user” (Δεν υπάρχει τέτοιος χρήστης). Για να διορθωθεί αυτό, θα πρέπει να εισάγετε όλες τις καταχωρήσεις χρηστών δίχως δυνατότητα σύνδεσης στους εξυπηρετητές σας.
Αυτό μπορεί να επιτευχθεί προσθέτοντας ακόμα μία γραμμή στο /etc/master.passwd. Αυτή η γραμμή θα πρέπει να περιέχει:
+:::::::::/sbin/nologin, το οποίο σημαίνει «Εισαγωγή όλων των καταχωρήσεων αλλά με αντικατάσταση του κελύφους με /sbin/nologin για κάθε καταχώρηση». Μπορείτε να αλλάξετε όλα τα πεδία της καταχώρησης passwd τοποθετώντας μία προεπιλεγμένη τιμή στο /etc/master.passwd.
Προειδοποίηση: Βεβαιωθείτε ότι η γραμμή +:::::::::/sbin/nologin έχει τοποθετηθεί μετά την +@IT_EMP:::::::::. Διαφορετικά, όλοι οι λογαριασμοί χρηστών που έχουν εισαχθεί από το NIS θα έχουν σαν κέλυφος σύνδεσης /sbin/nologin για κέλυφος χρήστη.
Μετά από αυτή την αλλαγή, θα πρέπει να αλλάζετε μόνο μία απεικόνιση NIS αν ένας νέος υπάλληλος IT προσλαμβάνεται στο τμήμα. Θα μπορούσατε να χρησιμοποιείτε παρόμοια προσέγγιση και για τους λιγότερο σημαντικούς εξυπηρετητές, αντικαθιστώντας το παλαιό +::::::::: στην τοπική έκδοση του /etc/master.passwd με κάτι σαν αυτό:
+@IT_EMP::::::::: +@IT_APP::::::::: +:::::::::/sbin/nologin
Οι αντίστοιχες γραμμές για απλούς σταθμούς εργασίας θα μπορούσαν να είναι:
+@IT_EMP::::::::: +@USERS::::::::: +:::::::::/sbin/nologin
Και όλα θα ήταν μια χαρά, έως ότου μερικές εβδομάδες αργότερα, υπάρξει αλλαγή πολιτικής : Το τμήμα IT ξεκινά να προσλαμβάνει εκπαιδευόμενους. Οι εκπαιδευόμενοι θα έχουν δικαίωμα να χρησιμοποιούν τους κανονικούς σταθμούς εργασίας και τους λιγότερο σημαντικούς εξυπηρετητές. Επίσης στους μαθητευόμενοι θα επιτρέπεται η σύνδεση στους κεντρικούς εξυπηρετητές. Προσθέστε ένα νέο netgroup IT_INTERN, προσθέστε τους νέους μαθητευόμενους IT σε αυτό netgroup και αρχίστε να αλλάζετε τις ρυθμίσεις για κάθε μηχάνημα ... Και όπως λέει ένα παλαιό ρητό: «Λάθη στον κεντρικό σχεδιασμό οδηγούν σε ολικό χάος.»
Η ικανότητα του NIS να δημιουργεί netgroups από άλλα netgroups μπορεί να χρησιμοποιηθεί για να αποφευχθούν καταστάσεις όπως αυτές. Μία δυνατότητα είναι η δημιουργία netgroups βασισμένων σε ρόλους. Για παράδειγμα, θα μπορούσατε να δημιουργήσετε ένα netgroup με όνομα BIGSRV για τον καθορισμό των περιορισμών σύνδεσης στους σημαντικούς εξυπηρετητές, ένα άλλο netgroup με όνομα SMALLSRV για τους λιγότερο σημαντικούς εξυπηρετητές και ένα τρίτο netgroup με όνομα USERBOX για τους κανονικούς σταθμούς εργασίας. Καθένα από αυτά τα netgroups θα περιέχει τα netgroups που θα έχουν τη δυνατότητα να συνδεθούν σε αυτά τα μηχανήματα. Οι νέες καταχωρήσεις για τις απεικονίσεις NIS του netgroup θα πρέπει να μοιάζει κάπως έτσι:
BIGSRV IT_EMP IT_APP SMALLSRV IT_EMP IT_APP ITINTERN USERBOX IT_EMP ITINTERN USERS
Αυτή η μέθοδος καθορισμού των περιορισμών σύνδεσης λειτουργεί αρκετά καλά αν μπορείτε να ορίσετε τις ομάδες των μηχανημάτων με πανομοιότυπους περιορισμούς. Δυστυχώς, αυτή είναι η εξαίρεση και όχι ο κανόνας. Τις περισσότερες φορές, θα χρειαστείτε την ικανότητα να καθορίζετε περιορισμούς στη σύνδεση κάθε μηχανήματος.
Η άλλη περίπτωση είναι να ορίσετε netgroups μηχανημάτων αντιμετωπίσετε την αλλαγή πολιτικής που περιγράψαμε παραπάνω. Σε αυτό το σενάριο, το /etc/master.passwd για κάθε box περιέχει δύο γραμμές που ξεκινάνε με «+». Η πρώτη από αυτές προσθέτει ένα netgroup με τους λογαριασμούς που επιτρέπεται να συνδέονται επάνω σε αυτό το μηχάνημα, η δεύτερη προσθέτει όλους τους υπόλοιπους λογαριασμούς με κέλυφος /sbin/nologin. Είναι μια καλή ιδέα να χρησιμοποιήσετε για όνομα του netgroup την έκδοση «ALL-CAPS» της ονομασίας του μηχανήματος. Με άλλα λόγια, οι γραμμές θα πρέπει να είναι κάπως έτσι:
+@BOXNAME::::::::: +:::::::::/sbin/nologin
Μόλις ολοκληρώσετε αυτή την εργασία για όλα τα μηχανήματα σας, δεν θα πρέπει να τροποποιήσετε τις τοπικές εκδόσεις του /etc/master.passwd ποτέ ξανά. Όλες οι περαιτέρω αλλαγές μπορούν να αντιμετωπιστούν με τροποποίηση των απεικονίσεων NIS. Εδώ είναι ένα παράδειγμα μίας πιθανής απεικόνισης netgroup για αυτό το σενάριο με μερικές επιπρόσθετες λιχουδιές:
# Define groups of users first IT_EMP (,alpha,test-domain) (,beta,test-domain) IT_APP (,charlie,test-domain) (,delta,test-domain) DEPT1 (,echo,test-domain) (,foxtrott,test-domain) DEPT2 (,golf,test-domain) (,hotel,test-domain) DEPT3 (,india,test-domain) (,juliet,test-domain) ITINTERN (,kilo,test-domain) (,lima,test-domain) D_INTERNS (,able,test-domain) (,baker,test-domain) # # Now, define some groups based on roles USERS DEPT1 DEPT2 DEPT3 BIGSRV IT_EMP IT_APP SMALLSRV IT_EMP IT_APP ITINTERN USERBOX IT_EMP ITINTERN USERS # # And a groups for a special tasks # Allow echo and golf to access our anti-virus-machine SECURITY IT_EMP (,echo,test-domain) (,golf,test-domain) # # machine-based netgroups # Our main servers WAR BIGSRV FAMINE BIGSRV # User india needs access to this server POLLUTION BIGSRV (,india,test-domain) # # This one is really important and needs more access restrictions DEATH IT_EMP # # The anti-virus-machine mentioned above ONE SECURITY # # Restrict a machine to a single user TWO (,hotel,test-domain) # [...more groups to follow]
Αν χρησιμοποιείτε κάποιο είδος βάσης δεδομένων για τη διαχείριση των λογαριασμών των χρηστών σας, θα πρέπει να είστε σε θέση να δημιουργήσετε το πρώτο μέρος των απεικονίσεων με τα εργαλεία αναφοράς της βάσης σας. Με αυτό τον τρόπο, οι νέοι χρήστες θα έχουν αυτόματα πρόσβαση στα boxes.
Μία τελευταία λέξη που συνιστά την προσοχή σας: Δεν συνιστάται πάντα να χρησιμοποιείτε netgroups μηχανημάτων. Όταν στήνετε δύο, δεκάδες εκατοντάδες πανομοιότυπων μηχανημάτων για εργαστήρια φοιτητών, θα πρέπει να χρησιμοποιείτε netgroups βασισμένα σε ρόλους, αντί για netgroups μηχανημάτων, για να κρατήσετε το μέγεθος των απεικονίσεων NIS εντός λογικών ορίων.
Υπάρχουν ακόμη μερικά πράγματα που θα χρειαστεί να κάνετε με διαφορετικό τρόπο, τώρα που είστε σε περιβάλλον NIS.
Κάθε φορά που θέλετε να προσθέσετε ένα χρήστη στο εργαστήριο, θα πρέπει να τον προσθέσετε μόνο στον πρωτεύον(master) εξυπηρετητή NIS, και πρέπει να θυμάστε να κάνετε rebuild τις απεικονίσεις NIS. Αν δεν ενεργήσετε με αυτό τον τρόπο ο χρήστης δεν θα μπορεί να εισέλθει σε κανένα σύστημα πλην του NIS master. Για παράδειγμα, αν χρειάζεται να προσθέσουμε στο εργαστήριο το νέο χρήστη jsmith , θα κάναμε το ακόλουθο:
# pw useradd jsmith # cd /var/yp # make test-domain
Θα μπορούσατε επίσης να τρέξετε adduser jsmith αντί για pw useradd jsmith.
Κρατήστε τους λογαριασμούς των διαχειριστών έξω από τις απεικονίσεις NIS. Δεν επιθυμείτε να διαδοθούν οι λογαριασμοί των διαχειριστών και οι κωδικοί πρόσβασης τους, σε μηχανήματα, όπου οι χρήστες θα έχουν πρόσβαση.
Κρατήστε ασφαλείς τους πρωτεύοντες και δευτερεύοντες εξυπηρετητές NIS, και ελαχιστοποιήστε τους χρόνους διακοπής τους. Εάν κάποιος εισέλθει παράνομα ή απλά σβήσει αυτά τα μηχανήματα, τότε πολλοί άνθρωποι θα χάσουν τη δυνατότητα πρόσβασης στο εργαστήριο.
Αυτό είναι το κεντρικό σημείο αδυναμίας όλων των συγκεντρωτικών συστημάτων διαχείρισης. Εάν δεν προστατεύετε του εξυπηρετητές NIS, τότε υπάρχει το ενδεχόμενο να έχετε θυμωμένους χρήστες!
Ο ypserv του FreeBSD παρέχει κάποια υποστήριξη για τους πελάτες NIS v1. Η υλοποίηση του NIS στο FreeBSD χρησιμοποιεί το πρωτόκολλο NIS v2, ωστόσο κάποιες υλοποιήσεις περιέχουν υποστήριξη για το πρωτόκολλο v1 για συμβατότητα με παλαιότερα συστήματα. Οι δαίμονες του ypbind που παρέχονται με τα συστήματα αυτά, θα προσπαθήσουν να συνδεθούν με τον εξυπηρετητή NIS v1 , ακόμη και σε περίπτωση που δεν θα χρειαστεί ποτέ ( και ίσως να επιμείνουν στη μετάδοση broadcasting για την αναζήτηση κάποιου, ακόμη κι αν λάβουν απάντηση από έναν εξυπηρετητή v2). Να σημειωθεί πως αν και υποστηρίζονται οι κανονικές κλήσεις πελάτη, αυτή η έκδοση του ypserv δεν χειρίζεται αιτήσεις μεταφοράς απεικονίσεων v1, κατά συνέπεια δε μπορεί να χρησιμοποιηθεί ως πρωτεύων ή δευτερεύων με παλαιότερους εξυπηρετητές NIS που υποστηρίζουν μόνο το πρωτόκολλο v1. Για καλή μας τύχη, πιθανώς σήμερα να μην έχουν απομείνει τέτοιοι εξυπηρετητές σε χρήση.
Θα πρέπει να προσέχετε όταν τρέχετε τον ypserv σε domain πολλών εξυπηρετητών, όπου τα μηχανήματα των εξυπηρετητών είναι ταυτόχρονα και πελάτες NIS. Είναι γενικά καλύτερο να εξαναγκάσετε τους εξυπηρετητές να συνδέονται στον εαυτό τους, αντί να μεταδίδουν συνδετικά αιτήματα broadcasting, όπου πιθανώς δημιουργηθούν σχέσεις αλληλεξάρτησης. Περίεργες καταστάσεις σφαλμάτων μπορούν να δημιουργηθούν αν ένας εξυπηρετητής σταματήσει να λειτουργεί και άλλοι εξαρτώνται από αυτόν. Πιθανώς να λήξει ο χρόνος σύνδεσης όλων των πελατών και να γίνει προσπάθεια σύνδεσης με άλλους κεντρικούς υπολογιστές, αλλά η καθυστέρηση με την οποία συμμετέχουν μπορεί να είναι σημαντική και η εσφαλμένη κατάσταση να διαιωνίζεται αφού και πάλι οι εξυπηρετητές συνδέονται μεταξύ τους.
Μπορείτε να εξαναγκάσετε ένα κόμβο να συνδεθεί με ένα συγκεκριμένο εξυπηρετητή
εκτελώντας ypbind με το flag -S. Αν
δεν θέλετε να το κάνετε χειροκίνητα κάθε φορά που φορτώνετε τον εξυπηρετητή NIS, μπορείτε
να προσθέσετε τις ακόλουθες γραμμές στο /etc/rc.conf:
nis_client_enable="YES" # run client stuff as well nis_client_flags="-S NIS domain,server"
Δείτε τη σελίδα ypbind(8) για περισσότερες πληροφορίες.
Ένα από τα πιο συνήθη προβλήματα που αντιμετωπίζουν οι άνθρωποι όταν προσπαθούν να υλοποιήσουν το NIS είναι η συμβατότητα του σχήματος των κωδικών πρόσβασης. Αν ο εξυπηρετητής NIS χρησιμοποιεί κρυπτογράφηση κωδικών πρόσβασης DES, θα υποστηρίζει μόνο πελάτες που επίσης χρησιμοποιούν DES. Για παράδειγμα, αν έχετε πελάτες NIS σε Solaris στο δίκτυό σας, τότε είναι σχεδόν βέβαιο ότι πρέπει να χρησιμοποιήσετε κρυπτογράφηση κωδικών πρόσβασης DES.
Για να ελέγξετε το σχήμα κωδικοποίησης που χρησιμοποιούν οι εξυπηρετητές και οι πελάτες σας δείτε στο /etc/login.conf. Εάν ο κόμβος είναι ρυθμισμένος να χρησιμοποιεί κρυπτογραφημένους κωδικούς DES, τότε η default κλάση θα περιέχει μία εγγραφή σαν την ακόλουθη:
default:\
:passwd_format=des:\
:copyright=/etc/COPYRIGHT:\
[Further entries elided]
’Άλλες πιθανές τιμές για την ικανότητα passwd_format μπορεί να είναι blf και md5 (για την κρυπτογράφηση κωδικών πρόσβασης Blowfish και MD5, αντίστοιχα).
Αν κάνετε αλλαγές στο /etc/login.conf, θα χρειαστεί να ανακατασκευάσετε τη βάση δεδομένων ικανότητας σύνδεσης, η οποία επιτυγχάνεται εκτελώντας ως root την ακόλουθη εντολή:
# cap_mkdb /etc/login.conf
Σημείωση: Το σχήμα των κωδικών πρόσβασης όπως είναι ήδη στο /etc/master.passwd δεν θα ανανεωθεί έως ότου ένας χρήστης αλλάξει τον κωδικό πρόσβασης του για πρώτη φορά μετά την ανακατασκευή της βάσης ικανότητας σύνδεσης.
Στη συνέχεια, προκειμένου να εξασφαλισθεί ότι οι κωδικοί πρόσβασης είναι κρυπτογραφημένοι με το σχήμα που έχετε επιλέξει, θα πρέπει επίσης να ελέγξετε ότι η crypt_default στο αρχείο /etc/auth.conf δίνει προτεραιότητα στο επιλεγμένο σχήμα κωδικών. Για να γίνει αυτό, τοποθετήστε το σχήμα που έχετε επιλέξει πρώτο στη λίστα. Για παράδειγμα, όταν χρησιμοποιείτε κρυπτογράφηση κωδικών πρόσβασης DES, η εγγραφή θα είναι::
crypt_default = des blf md5
Αν ακολουθήσετε τα παραπάνω βήματα για κάθε εξυπηρετητή και πελάτη NIS βασισμένο σε FreeBSD , μπορείτε να είστε βέβαιοι πως όλοι στο δίκτυο σας χρησιμοποιούν την ίδια μορφή κωδικών πρόσβασης . Αν αντιμετωπίζετε προβλήματα πιστοποίησης με κάποιον πελάτη NIS, εδώ είναι ένα πολύ καλό μέρος για να αρχίσετε να ψάχνετε για πιθανά προβλήματα. Να θυμάστε: αν θέλετε να αναπτύξετε έναν εξυπηρετητή NIS για ετερογενή δίκτυο, πιθανώς να πρέπει να χρησιμοποιήσετε DES για όλα τα συστήματα σας, επειδή είναι το ελάχιστο κοινό πρότυπο..
Αυτό το κείμενο, και άλλα κείμενα, μπορεί να βρεθεί στο ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Για ερωτήσεις σχετικά με το FreeBSD, διαβάστε την τεκμηρίωση πριν να επικοινωνήσετε με την
<questions@FreeBSD.org>.
Για ερωτήσεις σχετικά με αυτή την τεκμηρίωση, στείλτε e-mail στην <doc@FreeBSD.org>.