29.4 Δικτυακό Σύστημα Πληροφοριών (NIS/YP)

Συγγραφή από τον Bill Swingle. Βελτιώσεις από τους Eric Ogren και Udo Erdelhoff.

29.4.1 Τι είναι ;

Το 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®. Αν και στην εσωτερική υλοποίηση δε μοιάζουν καθόλου μεταξύ τους, οι βασικές λειτουργίες τους μπορούν να συγκριθούν.

29.4.2 Ορολογία/Διεργασίες που θα πρέπει να γνωρίζετε

Υπάρχουν αρκετοί όροι και σημαντικές διεργασίες χρήστη που θα συναντήσετε όταν θα επιχειρήσετε να υλοποιήσετε το 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 και να αλλάξουν από κει το συνθηματικό τους.

29.4.3 Πως δουλεύει;

Υπάρχουν τρεις τύποι κόμβων σε περιβάλλον NIS: οι κύριοι (master) εξυπηρετητές, οι δευτερεύοντες (slave) εξυπηρετητές, και οι πελάτες. Οι εξυπηρετητές ενεργούν ως κεντρικός χώρος απόθεσης των ρυθμιστικών πληροφοριών των κόμβων. Οι κύριοι εξυπηρετητές κρατούν το πρωτότυπο της πληροφορίας αυτής, ενώ οι δευτερεύοντες κρατούν πιστό αντίγραφο της πληροφορίας που περιέχεται στους κύριους προς πλεονασμό. Οι πελάτες απευθύνονται στους εξυπηρετητές για την παροχή αυτών των πληροφοριών.

Μπορούν να διανεμηθούν με αυτό τον τρόπο πληροφορίες διάσπαρτες σε πολλά αρχεία. Τα αρχεία master.passwd, group, και hosts μπορούν να διαμοιραστούν μέσω NIS. Κάθε φορά που μία διεργασία σε ένα πελάτη χρειάζεται μία πληροφορία που κανονικά θα βρισκόταν τοπικά σε αυτά τα αρχεία, τώρα αντιθέτως θα ψάξει στον εξυπηρετητή NIS με τον οποίο έχει συνδεθεί.

29.4.3.1 Τύποι Μηχανημάτων

  • Πρωτεύον εξυπηρετητής 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).

29.4.4 Χρήση του NIS/YP

Αυτή η ενότητα ασχολείται με τις ρυθμίσεις ενός παραδείγματος σε περιβάλλον NIS.

29.4.4.1 Σχεδιασμός

Ας υποθέσουμε πως είστε διαχειριστής ενός μικρού πανεπιστημιακού εργαστηρίου. Το εργαστήριο αποτελείται από 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 για πρώτη φορά, είναι καλή ιδέα να να σκεφτείτε πως θα θέλατε να είναι. Δεν έχει σημασία το μέγεθος του δικτύου σας, υπάρχουν λίγες αποφάσεις που πρέπει να πάρετε.

29.4.4.1.1 Επιλογή του Ονόματος Χώρου NIS

Αυτό δεν είναι το συνηθισμένο «όνομα χώρου» που συνήθως χρησιμοποιείτε. Λέγεται πιο σωστά «όνομα χώρου NIS». Όταν κάποιος πελάτης αναζητά πληροφορίες στο δίκτυο, συμπεριλαμβάνει στην αναζήτηση και το όνομα χώρου NIS στο οποίο ανήκει και ο ίδιος. Με αυτό τον τρόπο σε ένα δίκτυο με πολλούς εξυπηρετητές μπορεί να αποφασιστεί ποιος εξυπηρετητής θα αποκρίνεται σε κάθε αίτημα. Μπορείτε να δείτε το όνομα χώρου NIS σαν το όνομα μιας ομάδας Η/Υ που συσχετίζονται με κάποιο τρόπο.

Κάποιοι οργανισμοί επιλέγουν να χρησιμοποιούν σαν όνομα χώρου NIS, το όνομα χώρου που χρησιμοποιούν στις διαδικτυακές ιστοσελίδες τους. Ωστόσο, κάτι τέτοιο δεν προτείνεται, αφού μπορεί να δημιουργήσει σύγχυση, ιδιαίτερα όταν προσπαθείτε να επιλύσετε δικτυακά προβλήματα. Το όνομα χώρου NIS θα πρέπει να είναι μοναδικό στο δίκτυο σας και θα ωφελούσε αν περιέγραφε την ομάδα μηχανημάτων που αντιπροσωπεύει. Για παράδειγμα, το καλλιτεχνικό τμήμα (art) της Acme Inc. θα μπορούσε να έχει ως χώρο NIS το όνομα «acme-art». Για αυτό το παράδειγμα, υποθέτουμε ότι έχετε επιλέξει το όνομα χώρου test-domain , για το δίκτυο σας.

Ωστόσο, μερικά λειτουργικά συστήματα (ιδιαιτέρως το SunOS) χρησιμοποιούν ως όνομα χώρου NIS το διαδικτυακό όνομα χώρου τους. Εάν έστω και ένα μηχάνημα σας έχει αυτό τον περιορισμό, τότε θα πρέπει αναγκαστικά να χρησιμοποιήσετε το διαδικτυακό όνομα χώρου σας και για χώρο NIS.

29.4.4.1.2 Τεχνικές Απαιτήσεις Εξυπηρετητών

Υπάρχουν πολλά πράγματα που θα πρέπει να έχουμε κατά νου όταν επιλέγουμε να χρησιμοποιήσουμε ένα μηχάνημα ως εξυπηρετητή NIS. Ένα από τα πιο κακότυχα πράγματα σχετικά με το NIS είναι το επίπεδο εξάρτησης των πελατών από τον εξυπηρετητή. Αν κάποιος πελάτης δε μπορεί να έρθει σε επικοινωνία με τον εξυπηρετητή του χώρου NIS, πολύ συχνά το μηχάνημα αχρηστεύεται. Η έλλειψη πληροφόρησης χρηστών και ομάδων μπορεί να αναστείλει προσωρινά τη λειτουργία στα περισσότερα συστήματα. Έχοντας αυτά κατά νου θα πρέπει να είστε σίγουροι ότι επιλέγετε έναν εξυπηρετητή που δε θα έχει συχνές επανεκκινήσεις, ή που θα χρησιμοποιείται για development. Υπό ιδανικές συνθήκες ο εξυπηρετητής NIS θα πρέπει να είναι ένα ανεξάρτητο μηχάνημα με μοναδικό στόχο στη ζωή του να είναι εξυπηρετητής NIS. Αν το δίκτυο σας δεν έχει μεγάλη κίνηση, τότε είναι αποδεκτό να στήσετε τον εξυπηρετητή σε ένα μηχάνημα όπου εκτελούνται άλλες υπηρεσίες, αλλά λάβετε υπόψιν σας ότι αν ο εξυπηρετητής NIS δεν είναι διαθέσιμος, θα επηρεάσει όλους τους πελάτες NIS ανεξαιρέτως.

29.4.4.2 Εξυπηρετητές NIS

Αυθεντικά αντίγραφα όλων των πληροφοριών NIS αποθηκεύονται σε ένα μοναδικό μηχάνημα που ονομάζεται πρωτεύον εξυπηρετητής NIS. Οι βάσεις δεδομένων που χρησιμοποιούνται για την αποθήκευση των πληροφοριών αποκαλούνται απεικονίσεις NIS. Στο FreeBSD, αυτές οι απεικονίσεις αποθηκεύονται στον κατάλογο /var/yp/[domainname] όπου [domainname] είναι το όνομα του χώρου NIS που εξυπηρετούν. Ένας απλός εξυπηρετητής NIS μπορεί να υποστηρίζει μόνος του πολλούς χώρους , επομένως είναι πιθανό να βρείτε αρκετούς καταλόγους, ένα για κάθε υποστηριζόμενο χώρο. Κάθε χώρος θα έχει τις δικές του ανεξάρτητες ομάδες απεικονίσεων.

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

29.4.4.2.1 Εγκατάσταση Πρωτεύοντος (master) Εξυπηρετητή NIS

Η εγκατάσταση του πρωτεύοντος εξυπηρετητή NIS μπορεί να είναι σχετικά τυποποιημένη εργασία, αναλόγως των αναγκών σας. Το FreeBSD υποστηρίζει το NIS με το δικό του τρόπο. Το μόνο που χρειάζεται να κάνετε είναι να προσθέστε τις ακόλουθες γραμμές στο /etc/rc.conf, και το FreeBSD αυτόματα θα ρυθμίσει τα πάντα για σας.

  1. nisdomainname="test-domain"
    
    Αυτή η γραμμή ορίζει το όνομα χώρου NIS στο test-domain κατά τη εκκίνησης των δικτυακών λειτουργιών (π.χ. μετά από επανεκκίνηση).

  2. nis_server_enable="YES"
    
    Αυτή η ρύθμιση ενημερώνει το FreeBSD να ξεκινάει τις διεργασίες του εξυπηρετητή NIS αμέσως μετά την εκκίνηση των δικτυακών λειτουργιών.

  3. nis_yppasswdd_enable="YES"
    
    Αυτή η ρύθμιση θα ενεργοποιήσει το δαίμονα rpc.yppasswdd ο οποίος, όπως προαναφέραμε, επιτρέπει στους χρήστες να μπορούν να αλλάζουν τον κωδικό NIS από οποιοδήποτε μηχάνημα πελάτη.

Σημείωση: Ανάλογα με τον τρόπο εγκατάστασης του NIS, πιθανώς να χρειάζεται να κάνετε κι άλλες καταχωρήσεις. Για περισσότερες πληροφορίες, δείτε παρακάτω την ενότητα για τους εξυπηρετητές NIS που είναι και πελάτες NIS.

Τώρα, το μόνο που χρειάζεται να κάνετε είναι να εκτελέσετε την εντολή /etc/netstart σαν χρήστης root. Θα γίνουν αυτόματα όλες οι απαραίτητες ρυθμίσεις, με τις τιμές που έχετε ορίσει στο /etc/rc.conf.

29.4.4.2.2 Αρχικοποίηση των Απεικονίσεων NIS

Οι απεικονίσεις 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"

(εάν δεν έχει ήδη αφαιρεθεί).

29.4.4.2.3 Εγκατάσταση Δευτερεύοντος (slave) Εξυπηρετητή NIS

Η εγκατάσταση ενός δευτερεύοντος-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.

29.4.4.3 Πελάτες NIS

Κάθε πελάτης NIS δημιουργεί αυτό που λέγεται μία "διαδικασία δέσμευσης" (binding) με ένα συγκεκριμένο εξυπηρετητή NIS χρησιμοποιώντας τον δαίμονα ypbind. Ο ypbind ελέγχει τον προεπιλεγμένο χώρο του συστήματος (που έχει δηλωθεί με την εντολή domainname), και ξεκινά την αποστολή αιτημάτων broadcasting (προς όλες τις κατευθύνσεις) RPC στο τοπικό δίκτυο. Αυτά τα αιτήματα προσδιορίζουν το όνομα του χώρου με το οποίο ο δαίμονας ypbind επιχειρεί να δημιουργήσει τη διαδικασία δέσμευσης. Εάν ένας εξυπηρετητής έχει ρυθμιστεί να εξυπηρετεί το αιτούμενο όνομα χώρου του broadcast, θα απαντήσει στο ypbind, το οποίο θα καταγράψει τη διεύθυνση του εξυπηρετητή. Εάν υπάρχουν πολλοί εξυπηρετητές διαθέσιμοι (για παράδειγμα, ένας πρωτεύων και αρκετοί δευτερεύοντες), το ypbind θα χρησιμοποιεί τη διεύθυνση που θα ανταποκριθεί πρώτη. Από το σημείο αυτό και μετά, το σύστημα "πελάτης" θα δρομολογεί όλα τα αιτήματα NIS προς αυτόν τον εξυπηρετητή. Ο ypbind μόνο περιστασιακά θα κάνει «ping» στον εξυπηρετητή για να βεβαιώνεται ότι είναι ενεργός και λειτουργικός. Αν αποτύχει η λήψη των pings για κάποιο εύλογο χρονικό διάστημα, ο ypbind θα μαρκάρει τον χώρο ως αδέσμευτο (unbound) και θα ξεκινήσει και πάλι τη διαδικασία broadcasting με την ελπίδα να βρει άλλο διαθέσιμο εξυπηρετητή.

29.4.4.3.1 Εγκατάσταση Πελάτη NIS

Η εγκατάσταση ενός μηχανήματος FreeBSD για πελάτη NIS είναι τυποποιημένη εργασία.

  1. Επεξεργαστείτε το αρχείο /etc/rc.conf και προσθέστε τις ακόλουθες γραμμές ώστε να ορίσετε το όνομα χώρου NIS και να ξεκινήσετε τον ypbind με το ξεκίνημα των δικτυακών λειτουργιών:

    nisdomainname="test-domain"
    nis_client_enable="YES"
    
  2. Για να εισάγετε όλες τις πιθανές καταχωρήσεις κωδικών πρόσβασης από τον εξυπηρετητή NIS, αφαιρέστε από το αρχείο /etc/master.passwd όλους τους λογαριασμούς χρηστών και χρησιμοποιήστε την εντολή vipw για να προσθέσετε την ακόλουθη γραμμή στο τέλος του αρχείου:

    +:::::::::
    

    Σημείωση: Η γραμμή αυτή θα παρέχει ένα λογαριασμό, για κάθε πρόσωπο με ενεργό λογαριασμό στις απεικονίσεις κωδικών πρόσβασης του εξυπηρετητή NIS. Υπάρχουν πολλοί τρόποι να ρυθμίσετε τον πελάτη NIS αλλάζοντας αυτή τη γραμμή. Για περισσότερες πληροφορίες, δείτε παρακάτω την ενότητα netgroups. Για ακόμη περισσότερες λεπτομέρειες διαβάστε το βιβλίο της O'Reilly Managing NFS and NIS.

    Σημείωση: Θα πρέπει να κρατήσετε τουλάχιστον ένα τοπικό λογαριασμό (δλδ. που να μην εισάγεται από το NIS) στο αρχείο /etc/master.passwd και αυτός ο λογαριασμός θα πρέπει επίσης να είναι μέλος της ομάδας wheel. Αν κάτι δεν πάει καλά με το NIS, ο λογαριασμός αυτός μπορεί να χρησιμοποιηθεί για να συνδεθείτε απομακρυσμένα, για να γίνετε root, και για να διορθώσετε τα πράγματα.

  3. Για να εισάγετε όλες τις δυνατές καταχωρήσεις ομάδων από τον εξυπηρετητή NIS, προσθέστε αυτή τη γραμμή στο αρχείο /etc/group:

    +:*::
    

Μετά την ολοκλήρωση αυτών των βημάτων, θα πρέπει να είστε σε θέση να εκτελέσετε την εντολή ypcat passwd και να δείτε τις απεικονίσεις κωδικών πρόσβασης του εξυπηρετητή NIS.

29.4.5 Ασφάλεια 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) εξυπηρετητές και να τους εξαναγκάσετε να συνδεθούν μεταξύ τους.

29.4.6 Φραγή Σύνδεσης Συγκεκριμένων Χρηστών

Στο εργαστήριο μας, υπάρχει το μηχάνημα 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#

29.4.7 Χρήση των Netgroups

Συνεισφορά του Udo Erdelhoff.

Η μέθοδος που περιγράψαμε στην προηγούμενη ενότητα δουλεύει σχετικά καλά όταν χρειάζεστε ειδικούς κανόνες για ένα πολύ μικρό αριθμό χρηστών και/ή μηχανημάτων. Για ευρύτερα δίκτυα, θα πρέπει να ξεχάσετε την περίπτωση φραγής σύνδεσης συγκεκριμένων χρηστών σε κρίσιμα μηχανήματα, ή αλλιώς διαφορετικά θα πρέπει να κάνετε μετατροπές σε κάθε μηχάνημα ξεχωριστά, χάνοντας έτσι το κύριο προτέρημα χρήσης του 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. Για κάθε ομάδα σε παρένθεση προστίθεται ένας ή περισσότεροι λογαριασμοί χρηστών σε αυτήν. Τα τρία πεδία μέσα στην ομάδα είναι :

  1. Το όνομα του(ων) κόμβου(ων) όπου τα ακόλουθα αντικείμενα είναι έγκυρα. Εάν δεν προσδιορίσετε κάποιο hostname, η καταχώρηση είναι έγκυρη σε όλους τους κόμβους. Εάν προσδιορίσετε κάποιο hostname, θα εισέλθετε στο βασίλειο του σκότους, της φρίκης και της απόλυτης σύγχυσης.

  2. Το όνομα του λογαριασμού που ανήκει σε αυτό το netgroup.

  3. Το όνομα χώρου για τον λογαριασμό. Μπορείτε να εισάγετε λογαριασμούς από άλλους χώρους 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 εντός λογικών ορίων.

29.4.8 Σημαντικά Πράγματα που Πρέπει να Θυμάστε

Υπάρχουν ακόμη μερικά πράγματα που θα χρειαστεί να κάνετε με διαφορετικό τρόπο, τώρα που είστε σε περιβάλλον NIS.

29.4.9 Συμβατότητα με NIS v1

Ο ypserv του FreeBSD παρέχει κάποια υποστήριξη για τους πελάτες NIS v1. Η υλοποίηση του NIS στο FreeBSD χρησιμοποιεί το πρωτόκολλο NIS v2, ωστόσο κάποιες υλοποιήσεις περιέχουν υποστήριξη για το πρωτόκολλο v1 για συμβατότητα με παλαιότερα συστήματα. Οι δαίμονες του ypbind που παρέχονται με τα συστήματα αυτά, θα προσπαθήσουν να συνδεθούν με τον εξυπηρετητή NIS v1 , ακόμη και σε περίπτωση που δεν θα χρειαστεί ποτέ ( και ίσως να επιμείνουν στη μετάδοση broadcasting για την αναζήτηση κάποιου, ακόμη κι αν λάβουν απάντηση από έναν εξυπηρετητή v2). Να σημειωθεί πως αν και υποστηρίζονται οι κανονικές κλήσεις πελάτη, αυτή η έκδοση του ypserv δεν χειρίζεται αιτήσεις μεταφοράς απεικονίσεων v1, κατά συνέπεια δε μπορεί να χρησιμοποιηθεί ως πρωτεύων ή δευτερεύων με παλαιότερους εξυπηρετητές NIS που υποστηρίζουν μόνο το πρωτόκολλο v1. Για καλή μας τύχη, πιθανώς σήμερα να μην έχουν απομείνει τέτοιοι εξυπηρετητές σε χρήση.

29.4.10 Εξυπηρετητές NIS που είναι και Πελάτες NIS

Θα πρέπει να προσέχετε όταν τρέχετε τον 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) για περισσότερες πληροφορίες.

29.4.11 Σχήματα Κωδικών Πρόσβασης

Ένα από τα πιο συνήθη προβλήματα που αντιμετωπίζουν οι άνθρωποι όταν προσπαθούν να υλοποιήσουν το 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>.