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

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

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

Είναι παρόμοιο με τα συστήματα Windows NT® domain. Αν και στην εσωτερική υλοποίηση δε μοιάζουν καθόλου μεταξύ τους, οι βασικές λειτουργίες τους μπορούν να συγκριθούν.

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

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

Όρος Περιγραφή
NIS domainname Ο κύριος εξυπηρετητής NIS και όλοι οι πελάτες του (συμπεριλαμβανομένων και των δευτερευόντων-slave εξυπηρετητών) έχουν ένα όνομα χώρου (domainname) NIS. Όπως και το όνομα του domain σε ένα περιβάλλον Windows NT, το όνομα χώρου NIS δεν σχετίζεται με το DNS.
rpcbind Πρέπει να εκτελείται για την ενεργοποίηση του RPC (Remote Procedure Call, ένα πρωτόκολλο δικτύου που χρησιμοποιείται από το NIS). Εάν δεν εκτελείται το rpcbind, τότε θα είναι αδύνατο τρέξουμε έναν εξυπηρετητή NIS, ή να ενεργοποιήσουμε ένα πελάτη NIS.
ypbind Το πρόγραμμα «δένει (bind)» τον πελάτη 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 και να αλλάξουν από κει το συνθηματικό τους.

30.4.3 Πως Λειτουργεί;

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

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

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

  • Πρωτεύον εξυπηρετητής NIS. Αυτός ο εξυπηρετητής, είναι παρόμοιος με τον πρωτεύοντα domain controller των συστημάτων Windows NT και διατηρεί τα κοινά αρχεία που χρησιμοποιούνται από όλους τους πελάτες NIS. Τα αρχεία passwd, group και διάφορα άλλα αρχεία που χρησιμοποιούνται από τους πελάτες NIS βρίσκονται στον πρωτεύοντα εξυπηρετητή.

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

  • Δευτερεύοντες εξυπηρετητές NIS. Η λειτουργία τους είναι αντίστοιχη με τους εφεδρικούς (backup) domain controllers στα Windows NT. Οι δευτερεύοντες (slave) εξυπηρετητές NIS διατηρούν αντίγραφα των δεδομένων του πρωτεύοντος. Οι δευτερεύοντες εξυπηρετητές παρέχουν πλεονασμό (redundancy) σε περιβάλλοντα σημαντικής λειτουργίας. Επίσης βοηθούν στην ισοστάθμιση του φορτίου που αναλογεί στον πρωτεύοντα εξυπηρετητή. Οι Πελάτες NIS προσαρτώνται πάντα στον εξυπηρετητή NIS από τον οποίο θα λάβουν την πρώτη απάντηση, και σε αυτό περιλαμβάνονται και οι δευτερεύοντες εξυπηρετητές.

  • Πελάτες NIS. Οι πελάτες NIS, όπως συμβαίνει και με τους περισσότερους σταθμούς εργασίας Windows NT, για να συνδεθούν στο δίκτυο πιστοποιούνται από τους εξυπηρετητές NIS (ή από τους domain controllers των Windows NT στην περίπτωση των σταθμών εργασίας Windows NT).

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

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

30.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 Μηχάνημα πελάτης NIS
cli[1-11] 10.0.0.[6-17] Ά¶λλα μηχανήματα-πελάτες NIS

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

30.4.4.1.1 Επιλογή του Ονόματος Χώρου NIS (domainname)

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

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

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

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

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

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

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

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

30.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.

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

# /etc/rc.c/ypserv start

30.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! Το script ypinit που περιλαμβάνεται στο FreeBSD θα δημιουργήσει τις απεικονίσεις για εσάς (δείτε τη αντίστοιχη σελίδα manual για περισσότερες πληροφορίες). Να σημειωθεί ότι το συγκεκριμένο script είναι διαθέσιμο στα περισσότερα λειτουργικά τύπου 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"

(εάν δεν είναι ήδη).

30.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.

30.4.4.3 Πελάτες NIS

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

30.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:

    +:*::
    

Για να ξεκινήσετε άμεσα τον πελάτη NIS, εκτελέστε τις παρακάτω εντολές ως υπερχρήστης:

# /etc/netstart
# /etc/rc.d/ypbind start

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

30.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) λάβει ένα αίτημα από μια διεύθυνση που αντιστοιχεί με κάποιον από τους κανόνες, θα επεξεργαστεί το αίτημα κανονικά. Εάν αποτύχει η αντιστοίχιση της διεύθυνσης με κάποιον κανόνα, το αίτημα θα αγνοηθεί και θα καταγραφεί ένα προειδοποιητικό μήνυμα στο αρχείο καταγραφής (log). Αν το αρχείο /var/yp/securenets δεν υπάρχει, τότε το ypserv θα επιτρέπει τις συνδέσεις από οποιονδήποτε κόμβο.

Το πρόγραμμα ypserv παρέχει υποστήριξη επίσης για το πακέτο TCP Wrapper του Wietse Venema. Συγκεκριμένα, επιτρέπει στο διαχειριστή να χρησιμοποιεί για τον έλεγχο πρόσβασης τα ρυθμιστικά αρχεία του TCP Wrapper αντί του αρχείου /var/yp/securenets.

Σημείωση: Αν και οι δύο αυτοί μηχανισμοί ελέγχου πρόσβασης παρέχουν κάποιο βαθμό ασφάλειας, από την άλλη είναι τρωτοί σε επιθέσεις «IP spoofing», όπως συμβαίνει και με τα privileged ports. Θα πρέπει να μπλοκάρετε στο firewall σας όλη την κίνηση που σχετίζεται με το NIS.

Διακομιστές που χρησιμοποιούν το /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) εξυπηρετητές NIS και να τους εξαναγκάσετε να συνδέονται με τους εαυτούς τους.

30.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#

30.4.7 Χρήση των Netgroups

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

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

Η λύση των προγραμματιστών του NIS σε αυτό το πρόβλημα ονομάζεται netgroups. Ο σκοπός και η σημασιολογία τους μπορεί να συγκριθεί με τις κανονικές ομάδες (groups) όπως χρησιμοποιούνται στα συστήματα αρχείων του 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) του(ων) κόμβου(ων) όπου ισχύει η καταχώριση. Εάν δεν προσδιορίσετε κάποιο όνομα, η καταχώριση είναι έγκυρη σε όλους τους κόμβους. Εάν προσδιορίσετε, θα εισέλθετε στο βασίλειο του σκότους, της φρίκης και της απόλυτης σύγχυσης.

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

  3. Το όνομα χώρου NIS για τον λογαριασμό. Μπορείτε να εισάγετε λογαριασμούς από άλλους χώρους NIS στο δικό σας netgroup, εάν είστε ένας από τους άτυχους με περισσότερους από έναν χώρους NIS.

Καθένα από τα πεδία μπορούν να περιέχουν ειδικά σύμβολα συντόμευσης (wildcards). Δείτε την netgroup(5) για περισσότερες λεπτομέρειες.

Σημείωση: Δεν θα πρέπει να δώσετε όνομα μεγαλύτερο των οκτώ χαρακτήρων στο netgroup σας, ειδικά αν έχετε στο χώρο 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 και 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 του κάθε μηχανήματος, περιέχει δύο γραμμές που ξεκινάνε με «+». Η πρώτη από αυτές προσθέτει ένα netgroup με τους λογαριασμούς που επιτρέπεται να συνδέονται σε αυτό το μηχάνημα, η δεύτερη προσθέτει όλους τους υπόλοιπους λογαριασμούς με κέλυφος /sbin/nologin. Είναι καλή ιδέα να χρησιμοποιήσετε για όνομα του netgroup την ονομασία του μηχανήματος με όλα τα «ΓΡΑΜΜΑΤΑ ΚΕΦΑΛΑΙΑ». Με άλλα λόγια, οι γραμμές θα είναι κάπως έτσι:

+@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]

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

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

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

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

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

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

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

Θα πρέπει να προσέχετε όταν εκτελείτε τον ypserv σε domain πολλών εξυπηρετητών, όπου τα μηχανήματα των εξυπηρετητών είναι ταυτόχρονα και πελάτες NIS. Είναι γενικά καλύτερο να εξαναγκάσετε τους εξυπηρετητές να συνδέονται στον εαυτό τους, αντί να εκπέμπουν αιτήματα σύνδεσης, δημιουργώντας πιθανές σχέσεις αλληλοεξάρτησης. Μπορεί να δημιουργηθούν περίεργα σφάλματα αν ένας εξυπηρετητής σταματήσει να λειτουργεί και άλλοι εξαρτώνται από αυτόν. Τελικά θα λήξει ο χρόνος σύνδεσης όλων των πελατών και θα γίνει προσπάθεια σύνδεσης με άλλους εξυπηρετητές, αλλά η καθυστέρηση μπορεί να είναι σημαντική και το σφάλμα μπορεί να επαναληφθεί καθώς και πάλι οι εξυπηρετητές θα συνδέονται μεταξύ τους.

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

30.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

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

Αυτό το κείμενο, και άλλα κείμενα, μπορεί να βρεθεί στο ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Για ερωτήσεις σχετικά με το FreeBSD, διαβάστε την τεκμηρίωση πριν να επικοινωνήσετε με την <questions@FreeBSD.org>.
Για ερωτήσεις σχετικά με αυτή την τεκμηρίωση, στείλτε e-mail στην <doc@FreeBSD.org>.