1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<HTML LANG="it">
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html">
<META NAME="Generator" CONTENT="Alml">
<META NAME="Description" CONTENT="GNU/Linux e altro software libero">
<META NAME="Keywords" CONTENT="Linux, GNU/Linux, Unix, software, software libero, free software">
<META NAME="Author" CONTENT="Daniele Giacomini daniele @ swlibero.org">
<META NAME="Date" CONTENT="2001.08.18 ">
<META NAME="Resource-type" LANG="en" CONTENT="Document" >
<META NAME="Revisit-after" LANG="en" CONTENT="15 days" >
<META NAME="Robots" CONTENT="ALL" >
<TITLE> Appunti di informatica libera</TITLE>
<LINK REL="stylesheet" TYPE="text/css" HREF="a2.css">
<LINK REL="Start" TITLE="Start" HREF="a2.html">
<LINK REL="Prev" TITLE="Previous" HREF="a2151.html">
<LINK REL="Next" TITLE="Next" HREF="a2153.html">
</HEAD>
<BODY>
<P>
<A HREF="a2153.html">[successivo]</A>
<A HREF="a2151.html">[precedente]</A>
<A HREF="a2.html">[inizio]</A>
<A HREF="a2506.html">[fine]</A>
<A HREF="a21.html">[indice generale]</A>
<A HREF="a26.html">[violazione GPL]</A>
<A HREF="a2504.html">[licenze]</A>
<A HREF="a2505.html">[indice analitico]</A>
<A HREF="a2127.html">[tomo]</A>
<A HREF="a2138.html">[parte]</A>
</P>
<HR>
<DIV>
<H1>Capitolo 116. <A NAME="title1904"></A><A NAME="anchor2294"></A> NIS <A NAME="index10325"></A> <A NAME="index10326"></A> <A NAME="index10327"></A> </H1>
<P>Il NIS, <SUP><A HREF="#footnote1" NAME="footnote-ref1">(1)</A></SUP> o <EM>Network Information Service</EM>, è un sistema di gestione di dati amministrativi concentrati in una sola fonte, rendendoli disponibili a tutta una rete in modo uniforme.</P>
<P>Questo tipo di servizio è stato ideato e sviluppato originariamente dalla <A NAME="index10328"></A>Sun Microsystems denominandolo <EM>Yellow Pages</EM> (YP), ma successivamente il nome è stato cambiato perché questo era già un marchio registrato in Gran Bretagna della società telefonica <A NAME="index10329"></A>British Telecom. Questa storia di NIS serve a spiegare il motivo per il quale molti <A NAME="index10330"></A>programmi di servizio che riguardano questa gestione hanno il prefisso <SAMP>yp</SAMP>, oltre al fatto che spesso si parli di «servizi YP» invece che di «servizi NIS».</P>
<P>Il NIS è un meccanismo che si sovrappone alla gestione amministrativa di un sistema Unix tipico, ma questo avviene in un modo non perfettamente integrato. Quando si introduce il NIS, si inserisce un livello di intermediazione tra l'utente e il sistema di amministratore preesistente.</P>
<H2>116.1 <A NAME="title1905"></A><A NAME="anchor2295"></A>
Concentrazione amministrativa </H2>
<P>Lo scopo del NIS è quello di concentrare in un solo elaboratore la gestione di una serie di file amministrativi. La tabella <A HREF="a2152.html#anchor2296">116.1</A> elenca alcuni file di configurazione, tipici di un sistema Unix, che possono essere gestiti in questo modo.</P>
<TABLE ID="anchor2296" BORDER="3">
<THEAD>
<TR><TD>File </TD><TD>Descrizione </TD></TR>
</THEAD>
<TBODY>
<TR><TD>/etc/passwd </TD><TD>Informazioni sugli utenti. </TD></TR>
<TR><TD>/etc/group </TD><TD>Gruppi di utenti. </TD></TR>
<TR><TD>/etc/shadow </TD><TD><A NAME="index10331"></A>password shadow (quando gestibili). </TD></TR>
<TR><TD>/etc/aliases </TD><TD>Alias di posta elettronica. </TD></TR>
<TR><TD>/etc/hosts </TD><TD>Traduzione degli indirizzi IP dei <A NAME="index10332"></A>nodi della rete locale. </TD></TR>
<TR><TD>/etc/networks </TD><TD>Traduzione degli indirizzi IP delle sottoreti (locali). </TD></TR>
<TR><TD>/etc/protocols </TD><TD>Nomi e numeri dei protocolli di rete. </TD></TR>
<TR><TD>/etc/rpc </TD><TD>Numeri delle chiamate RPC. </TD></TR>
<TR><TD>/etc/services </TD><TD>Abbinamento dei servizi di rete ai numeri di porta corrispondenti. </TD></TR>
</TBODY>
</TABLE>
<P><EM> Tabella <A HREF="a2152.html#anchor2296">116.1</A>. Elenco di alcuni dei file amministrativi comunemente gestibili attraverso il NIS. </EM></P>
<TABLE BORDER="3" WIDTH="100%">
<TR><TD>
<P>È bene chiarire subito che il supporto alle <A NAME="index10333"></A>password shadow non è disponibile in tutti i NIS esistenti; inoltre, la natura del NIS rende poco probabile l'utilità del loro utilizzo.</P>
</TD></TR>
</TABLE>
<P>La concentrazione amministrativa si attua facendo in modo che le informazioni dei file che interessano siano gestite a partire da un solo <A NAME="index10334"></A>nodo. Generalmente, l'utilità del NIS sta nella possibilità di amministrare gli utenti da un'unica origine, facendo in modo che questi vengano riconosciuti in tutti gli elaboratori di un certo «dominio», senza dover essere inseriti effettivamente in ognuno di questi.</P>
<P>Gli esempi che si faranno in questo capitolo sono volti principalmente al raggiungimento di questo risultato, concentrando così l'amministrazione dei file <CODE>/etc/passwd</CODE> e <CODE>/etc/group</CODE>.</P>
<H3>116.1.1 <A NAME="title1906"></A><A NAME="anchor2297"></A>
Mappe NIS </H3>
<P>Il NIS non utilizza i file amministrativi così come sono, ne crea una copia; queste copie sono denominate «mappe». I file di mappa sono in formato DBM, dove si memorizzano solo coppie di dati: chiave-valore. Per questo motivo, a seconda della struttura dei file amministrativi originali, si possono generare più mappe differenti.</P>
<P>Quando si attiva il NIS, non si possono più utilizzare i vecchi comandi amministrativi (come <SAMP>passwd</SAMP>, <SAMP>chsh</SAMP>, ecc.), o quantomeno non conviene, perché il NIS non si accorge (autonomamente) dei cambiamenti apportati ai file amministrativi tradizionali. Bisogna utilizzare i comandi specifici del NIS, in modo che i cambiamenti siano annotati immediatamente nelle mappe e poi siano propagati nei file amministrativi normali del <A NAME="index10335"></A>servente NIS.</P>
<P>La tabella <A HREF="a2152.html#anchor2298">116.2</A> riporta l'elenco di alcune delle mappe tipiche della gestione NIS. La collocazione di questi file dipende dal dominio NIS, descritto nella sezione seguente, e corrisponde in pratica a <CODE>/var/yp/<VAR>dominio_nis</VAR>/</CODE>.</P>
<TABLE ID="anchor2298" BORDER="3">
<THEAD>
<TR><TD>Mappa </TD><TD>Descrizione </TD></TR>
</THEAD>
<TBODY>
<TR><TD>passwd.byname </TD><TD>Utenti per nome. </TD></TR>
<TR><TD>passwd.byuid </TD><TD>Utenti per numero UID. </TD></TR>
<TR><TD>group.byname </TD><TD>Gruppi per nome. </TD></TR>
<TR><TD>group.bygid </TD><TD>Gruppi per numero GID. </TD></TR>
<TR><TD>shadow.byname </TD><TD>Utenti per nome (dal file <CODE>/etc/shadow</CODE>). </TD></TR>
<TR><TD>mail.aliases </TD><TD>Alias di posta elettronica. </TD></TR>
<TR><TD>hosts.byname </TD><TD><A NAME="index10336"></A>Nodi per nome. </TD></TR>
<TR><TD>hosts.byaddr </TD><TD><A NAME="index10337"></A>Nodi per indirizzo. </TD></TR>
<TR><TD>networks.byname </TD><TD>Reti locali per nome. </TD></TR>
<TR><TD>networks.byaddr </TD><TD>Reti locali per indirizzo. </TD></TR>
<TR><TD>protocols.byname </TD><TD>Protocolli di rete per nome. </TD></TR>
<TR><TD>protocols.bynumber </TD><TD>Protocolli di rete per numero. </TD></TR>
<TR><TD>rpc.byname </TD><TD>Chiamate RPC per nome. </TD></TR>
<TR><TD>rpc.bynumber </TD><TD>Chiamate RPC per numero. </TD></TR>
<TR><TD>services.byname </TD><TD>Servizi di rete per nome. </TD></TR>
</TBODY>
</TABLE>
<P><EM> Tabella <A HREF="a2152.html#anchor2298">116.2</A>. Elenco di alcune mappe NIS. </EM></P>
<H3>116.1.2 <A NAME="title1907"></A><A NAME="anchor2299"></A>
Dominio NIS </H3>
<P>Quando si attiva un servizio NIS in un <A NAME="index10338"></A>nodo, in modo che questo renda disponibili le informazioni relative a un gruppo di elaboratori, si deve definire un dominio NIS corrispondente. Questo non ha niente a che fare con i domini utilizzati dal servizio DNS, ma generalmente, anche se potrebbe sovrapporsi perfettamente a un dominio di questo tipo, conviene utilizzare nomi distinti, che non abbiano un nesso logico o intuitivo.</P>
<P>Più precisamente, è meglio dire che si stabilisce prima l'estensione del dominio NIS che si vuole creare, quindi si deve «eleggere» il <A NAME="index10339"></A>nodo più adatto a fungere da <A NAME="index10340"></A>servente NIS. Infatti, questo elaboratore deve trovarsi in una posizione adatta nella rete, in modo che sia accessibile facilmente da tutti gli elaboratori del dominio NIS. Oltre a questo è bene che si tratti di una macchina adeguata all'estensione del dominio: maggiore è il numero di <A NAME="index10341"></A>clienti, maggiore sarà la frequenza con cui dovrà rispondere a richieste del protocollo NIS.</P>
<P>I file di mappa di un <A NAME="index10342"></A>servente NIS sono raggruppati distintamente per dominio, nella directory <CODE>/var/yp/<VAR>dominio_nis</VAR>/</CODE>.</P>
<H3>116.1.3 <A NAME="title1908"></A><A NAME="anchor2300"></A>
<A NAME="index10343"></A>Servente principale e <A NAME="index10344"></A>serventi secondari </H3>
<P>Finora si è fatto riferimento a un <A NAME="index10345"></A>servente NIS unico per tutto il suo dominio di competenza. Quando si attiva un servizio di questo tipo, tutti gli elaboratori <A NAME="index10346"></A>clienti di questo dominio dipendono completamente dal <A NAME="index10347"></A>servente per tutte quelle informazioni che sono state concentrate sotto la sua amministrazione. Se l'elaboratore che offre questo servizio dovesse venire a mancare per qualsiasi motivo, come un guasto, tutti i suoi <A NAME="index10348"></A>clienti sarebbero in grave difficoltà.</P>
<P>Per risolvere il problema, si possono predisporre dei <A NAME="index10349"></A>serventi NIS secondari, o <EM>slave</EM>, che riproducono le informazioni del <A NAME="index10350"></A>servente principale, o <EM>master</EM>.</P>
<TABLE BORDER="3" WIDTH="100%">
<TR><TD>
<P>Il motivo per il quale si utilizza il servizio NIS è quello di uniformare e concentrare la gestione di informazioni di un gran numero di elaboratori, altrimenti non sarebbe giustificato l'impegno necessario alla sua attivazione. Di conseguenza, è praticamente obbligatorio attivare dei <A NAME="index10351"></A>serventi secondari, sia per attenuare i rischi di blocco del sistema globale, sia per ridurre il carico di richieste NIS su un'unica macchina.</P>
</TD></TR>
</TABLE>
<P>La presenza di <A NAME="index10352"></A>serventi secondari impone la creazione di meccanismi automatici per il loro allineamento, generalmente attraverso il sistema <A NAME="index10353"></A>Cron.</P>
<H2>116.2 <A NAME="title1909"></A><A NAME="anchor2301"></A>
Distinzione dei ruoli tra <A NAME="index10354"></A>servente e <A NAME="index10355"></A>cliente </H2>
<P>Finora è stato preso in considerazione il compito del <A NAME="index10356"></A>servente NIS, senza valutare i <A NAME="index10357"></A>clienti, ma all'inizio la distinzione dei compiti può sembrare confusa.</P>
<P>Il <A NAME="index10358"></A>cliente è un programma demone che si occupa di fornire al sistema in cui è in funzione le informazioni che altrimenti verrebbero ottenute dai soliti file di configurazione. La situazione tipica è quella della <A NAME="index10359"></A>procedura di accesso: se il nome dell'utente non viene trovato nel file <CODE>/etc/passwd</CODE> locale, il <A NAME="index10360"></A>cliente NIS cerca di ottenerlo dal <A NAME="index10361"></A>servente NIS.</P>
<P>In pratica, le funzionalità di <A NAME="index10362"></A>servente e <A NAME="index10363"></A>cliente sono indipendenti: ci possono essere elaboratori che fungono da <A NAME="index10364"></A>serventi, altri che utilizzano il programma <A NAME="index10365"></A>cliente per accedere alle informazioni e altri ancora che fanno entrambe le cose.</P>
<P>Se si pensa che il <A NAME="index10366"></A>servente NIS principale deve contenere tutte le informazioni che vengono condivise dai programmi <A NAME="index10367"></A>clienti presso gli altri elaboratori, potrebbe sembrare inutile l'attivazione del programma <A NAME="index10368"></A>cliente nello stesso <A NAME="index10369"></A>servente. Tuttavia, le cose cambiano quando si considerano i <A NAME="index10370"></A>serventi secondari. Questi non dispongono delle informazioni che ha l'elaboratore corrispondente al <A NAME="index10371"></A>servente principale; per ottenerle occorre attivare il <A NAME="index10372"></A>cliente NIS in modo che si possa mettere in comunicazione con il <A NAME="index10373"></A>servente principale.</P>
<P>Nel sistema NIS così strutturato, i <A NAME="index10374"></A>clienti cercano le informazioni, riferite al loro dominio, dal <A NAME="index10375"></A>servente che risponde più rapidamente. Ciò viene determinato generalmente attraverso una richiesta circolare (<A NAME="index10376"></A>broadcast). Questo, tra le altre cose, è uno dei punti deboli del NIS: dal momento che qualunque elaboratore può rispondere a una chiamata circolare, chiunque è in grado di intromettersi per cercare di catturare delle informazioni.</P>
<H3>116.2.1 <A NAME="title1910"></A><A NAME="anchor2302"></A>
Propagazione delle informazioni </H3>
<P>Quando si deve intervenire per modificare qualche informazione di quelle che sono condivise attraverso il NIS, si presentano situazioni differenti a seconda delle circostanze. Queste si traducono in modalità diverse di propagazione di queste modifiche nell'intero sistema NIS. Si distinguono due situazioni fondamentali:</P>
<UL>
<LI>
<P>la modifica di un'informazione nell'elaboratore di origine (il <A NAME="index10377"></A>servente principale) sui dati di partenza;</P>
</LI>
<LI>
<P>la modifica di un'informazione attraverso gli strumenti offerti dal sistema NIS.</P>
</LI>
</UL>
<P>Nel primo caso le azioni da compiere sono:</P>
<OL>
<LI>
<P>aggiornare le mappe del <A NAME="index10378"></A>servente principale;</P>
</LI>
<LI>
<P>aggiornare le mappe dei <A NAME="index10379"></A>serventi secondari.</P>
</LI>
</OL>
<P>Nel secondo caso le azioni da compiere sono:</P>
<OL>
<LI>
<P>aggiornare i file di configurazione corrispondenti nel <A NAME="index10380"></A>servente principale</P>
</LI>
<LI>
<P>aggiornare le mappe del <A NAME="index10381"></A>servente principale</P>
</LI>
<LI>
<P>aggiornare le mappe dei <A NAME="index10382"></A>serventi secondari</P>
</LI>
</OL>
<P>Quando si interviene manualmente sui file di configurazione di partenza del <A NAME="index10383"></A>servente principale, per esempio quando si vuole aggiungere o eliminare un utente, si deve poi comandare manualmente l'aggiornamento delle mappe NIS; eventualmente si può pilotare anche l'aggiornamento dei <A NAME="index10384"></A>serventi secondari, attraverso un cosiddetto <EM>push</EM>.</P>
<P>Quando si utilizzano gli strumenti offerti da NIS per modificare la configurazione dei dati condivisi, ciò può avvenire solo attraverso un <A NAME="index10385"></A>cliente, il quale si occupa di contattare il <A NAME="index10386"></A>servente principale che poi deve provvedere ad aggiornare i file normali e le mappe.</P>
<P>La propagazione delle mappe modificate ai <A NAME="index10387"></A>serventi secondari potrebbe essere un problema. Per questo si utilizza generalmente il sistema <A NAME="index10388"></A>Cron in ogni <A NAME="index10389"></A>servente secondario, in modo da avviare periodicamente il comando necessario a metterli in comunicazione con il <A NAME="index10390"></A>servente principale e verificare così la presenza di aggiornamenti eventuali.</P>
<P>Dalla precisione del funzionamento di questo sistema di propagazione derivano delle conseguenze pratiche che, a prima vista, possono sembrare assurde. Si può immaginare cosa può accadere quando un utente cambia la propria <A NAME="index10391"></A>parola d'ordine da un <A NAME="index10392"></A>cliente NIS. Questo contatta il <A NAME="index10393"></A>servente principale che provvede ad aggiornare le mappe e il file <CODE>/etc/passwd</CODE>. Ma fino a che i <A NAME="index10394"></A>serventi secondari non ricevono l'aggiornamento, i <A NAME="index10395"></A>clienti che li utilizzano continuano a permettere l'accesso con la <A NAME="index10396"></A>parola d'ordine vecchia. Questo può capitare allo stesso elaboratore dal quale è stata compiuta l'operazione di modifica, se questo utilizza il servizio di un <A NAME="index10397"></A>servente secondario non aggiornato. In queste condizioni, l'utente che ha appena cambiato <A NAME="index10398"></A>parola d'ordine e tenta un altro accesso sulla stessa macchina, potrebbe trovarsi spaesato di fronte al rifiuto che gli si presenta.</P>
<H2>116.3 <A NAME="title1911"></A><A NAME="anchor2303"></A>
NIS e DNS </H2>
<P>Il NIS permette di distribuire le informazioni contenute nei file <CODE>/etc/hosts</CODE> e <CODE>/etc/networks</CODE>. Questi sono i file di configurazione che permettono di risolvere i nomi dei <A NAME="index10399"></A>nodi della rete locale, quando non si vuole fare uso di un DNS.</P>
<P>Attraverso questa possibilità è poi possibile configurare il file <CODE>/etc/host.conf</CODE> dei vari <A NAME="index10400"></A>clienti NIS, in modo che venga utilizzata questa informazione. Di solito si tratta di indicare una riga come quella seguente:</P>
<PRE>order hosts,nis</PRE>
<P>Tuttavia, nel momento stesso in cui si pensa di volere utilizzare il NIS, si decide che l'organizzazione della rete locale è un problema serio, pertanto, anche la risoluzione dei nomi della rete deve essere considerato un problema ugualmente serio. In questo senso, diventa un controsenso la pretesa di gestire la risoluzione dei nomi attraverso NIS, quando con poco impegno si può attivare un <A NAME="index10401"></A>servente DNS; al limite si possono unire le due cose:</P>
<PRE>order hosts,bind,nis</PRE>
<H2>116.4 <A NAME="title1912"></A><A NAME="anchor2304"></A>
NIS, NIS+, NYS e come complicarsi la vita </H2>
<P>Purtroppo non esiste un sistema NIS standard; ne esistono tre: NIS, NIS+ e NYS. Il primo, è il sistema NIS tradizionale, piuttosto debole dal punto di vista della sicurezza; il secondo è un sistema più complesso, con lo scopo di superare i limiti di sicurezza del NIS tradizionale; il terzo è il sistema che vuole incorporare le funzionalità di NIS+ e aggiungere altri vantaggi.</P>
<P>Il sistema NIS tradizionale è quello più comune; il NIS+ è disponibile solo su sistemi <A NAME="index10402"></A>Sun Microsystems; il NYS è in corso di sviluppo e in linea di massima può essere usato almeno come un NIS normale.</P>
<P>Per ogni tipo di <A NAME="index10403"></A>servente NIS ci deve essere un programma <A NAME="index10404"></A>cliente adatto, configurato conformemente alle particolarità del servizio da cui attinge. Oltre a questo, a seconda del tipo di servizio utilizzato ci sono esigenze diverse rispetto alle librerie.</P>
<P>In pratica, a meno di volere approfondire l'argomento studiando dettagliatamente le dipendenze che ci sono tra i vari programmi di ogni tipo di NIS, conviene affidarsi alle scelte fatte dalla propria distribuzione GNU/Linux. Per quanto riguarda il <A NAME="index10405"></A>servente può trattarsi solo di NIS o NYS, in quanto il NIS+ appartiene esclusivamente a <A NAME="index10406"></A>Sun Microsystems; per il <A NAME="index10407"></A>cliente dovrebbe trattarsi di quello adatto a connettersi con il <A NAME="index10408"></A>servente NIS della distribuzione.<SUP><A HREF="#footnote2" NAME="footnote-ref2">(2)</A></SUP><SUP><A HREF="#footnote3" NAME="footnote-ref3">(3)</A></SUP></P>
<H2>116.5 <A NAME="title1913"></A><A NAME="anchor2305"></A>
RPC </H2>
<P>Il NIS utilizza le chiamate RPC per comunicare. Questo significa che è necessaria la presenza del <A NAME="index10410"></A>Portmapper in funzione sia nei <A NAME="index10411"></A>nodi <A NAME="index10412"></A>servente che nei <A NAME="index10413"></A>nodi <A NAME="index10414"></A>cliente (si veda eventualmente il capitolo <A HREF="a2140.html#anchor2137">104</A>).</P>
<P>È anche importante verificare che i servizi di sincronizzazione, <EM>time service</EM>, siano previsti all'interno del file <CODE>/etc/inetd.conf</CODE>, come mostrato nel pezzo seguente:</P>
<PRE>#
# Time service is used for clock syncronization.
#
time stream tcp nowait nobody /usr/sbin/tcpd in.timed
time dgram udp wait nobody /usr/sbin/tcpd in.timed</PRE>
<P>Se si devono apportare delle modifiche a questo file di configurazione, bisogna ricordare di riavviare il supervisore <A NAME="index10415"></A>Inet (vedere eventualmente il capitolo <A HREF="a2139.html#anchor2130">103</A>).</P>
<H2>116.6 <A NAME="title1914"></A><A NAME="anchor2306"></A>
Allestimento di un <A NAME="index10416"></A>servente NIS/NYS </H2>
<P>Gli elementi indispensabili di un <A NAME="index10417"></A>servente NIS sono i programmi <SAMP>ypserv</SAMP> e <SAMP>makedbm</SAMP>. Il primo svolge il ruolo di demone in ascolto delle richieste NIS per il dominio di competenza, il secondo è necessario per convertire i file di configurazione normali in file DBM, cioè nelle mappe NIS.</P>
<P>Nel caso di un <A NAME="index10418"></A>servente principale è anche opportuna la presenza di altri due demoni: <SAMP>rpc.passwdd</SAMP> e <SAMP>rpc.ypxfrd</SAMP>. Il primo serve a permettere la modifica delle <A NAME="index10419"></A>parole d'ordine degli utenti attraverso il sistema NIS, il secondo serve a facilitare l'aggiornamento ai <A NAME="index10420"></A>serventi secondari.</P>
<P>La configurazione di <SAMP>ypserv</SAMP> e <SAMP>rpc.ypxfrd</SAMP> può dipendere dal modo in cui sono stati compilati i sorgenti rispettivi. In generale si utilizza il file <CODE>/etc/ypserv.conf</CODE> per definire il comportamento di entrambi i programmi; inoltre <SAMP>ypserv</SAMP> può far uso di <CODE>/var/yp/securenets</CODE> per conoscere gli indirizzi di rete da cui può accettare interrogazioni NIS, oppure può riutilizzare i tradizionali <CODE>/etc/hosts.allow</CODE> e <CODE>/etc/hosts.deny</CODE>. Per saperlo basta usare l'opzione <SAMP>-version</SAMP>, come nell'esempio seguente:</P>
<P class="command"><CODE># </CODE><STRONG><CODE>ypserv -version</CODE></STRONG>[<KBD>Invio</KBD>]</P>
<PRE>ypserv - NYS YP Server version 1.1.7 (with tcp wrapper)</PRE>
<P>L'esempio mostra il risultato di un <SAMP>ypserv</SAMP> NYS compilato con il supporto per l'utilizzo dei file <CODE>/etc/hosts.allow</CODE> e <CODE>/etc/hosts.deny</CODE>, gli stessi che utilizza il <A NAME="index10421"></A>TCP wrapper (<SAMP>tcpd</SAMP>) allo scopo di filtrare gli accessi ai programmi controllati dal supervisore <A NAME="index10422"></A>Inet.</P>
<TABLE BORDER="3" WIDTH="100%">
<TR><TD>
<P>Prima di poter avviare il <A NAME="index10423"></A>servente <SAMP>ypserv</SAMP>, oltre a provvedere per la sua configurazione, occorre necessariamente che il <A NAME="index10424"></A>Portmapper RPC sia in funzione e che il dominio NIS sia stato definito. In assenza di una sola di queste due condizioni, il programma <SAMP>ypserv</SAMP> non funziona, nel senso che non si riesce ad avviarlo.</P>
</TD></TR>
</TABLE>
<H3>116.6.1 <A NAME="title1915"></A><A NAME="anchor2307"></A>
Dominio NIS </H3>
<P>Il dominio NIS viene definito attraverso <SAMP>domainname</SAMP>, nel modo seguente:</P>
<P class="syntax"><TT>domainname<VAR>dominio_nis</VAR>
</TT></P>
<P>Quando viene usato senza argomenti, si ottiene il nome del dominio NIS; in questo modo si può controllare se l'impostazione è corretta. Per esempio, l'impostazione del dominio NIS <SAMP>rost.nis-yp</SAMP> può essere fatta e controllata nel modo seguente:</P>
<P class="command"><CODE># </CODE><STRONG><CODE>domainname rost.nis-yp</CODE></STRONG>[<KBD>Invio</KBD>]</P>
<P class="command"><CODE># </CODE><STRONG><CODE>domainname</CODE></STRONG>[<KBD>Invio</KBD>]</P>
<PRE>rost.nis-yp</PRE>
<P>Mentre l'impostazione del dominio è di competenza dell'utente <SAMP>root</SAMP>, la verifica può essere fatta anche da un utente comune.</P>
<H3>116.6.2 <A NAME="title1916"></A><A NAME="anchor2308"></A>
# domainname <A NAME="index10425"></A> <A NAME="index10426"></A> <A NAME="index10427"></A> </H3>
<P class="syntax"><TT>domainname<STRONG><BIG>[</BIG></STRONG><VAR>opzioni</VAR><STRONG><BIG>]</BIG></STRONG><STRONG><BIG>[</BIG></STRONG><VAR>dominio_nis</VAR><STRONG><BIG>]</BIG></STRONG>
</TT></P>
<P class="syntax"><TT>nisdomainname<STRONG><BIG>[</BIG></STRONG><VAR>opzioni</VAR><STRONG><BIG>]</BIG></STRONG><STRONG><BIG>[</BIG></STRONG><VAR>dominio_nis</VAR><STRONG><BIG>]</BIG></STRONG>
</TT></P>
<P class="syntax"><TT>ypdomainname<STRONG><BIG>[</BIG></STRONG><VAR>opzioni</VAR><STRONG><BIG>]</BIG></STRONG><STRONG><BIG>[</BIG></STRONG><VAR>dominio_nis</VAR><STRONG><BIG>]</BIG></STRONG>
</TT></P>
<P><SAMP>domainname</SAMP> (con i suoi alias) permette di modificare o visualizzare il nome del dominio NIS.</P>
<DL>
<DT><STRONG>Alcune opzioni</STRONG></DT>
<DD>
<P class="syntax"><TT>-F<VAR>file</VAR><STRONG><BIG>|</BIG></STRONG>--file<VAR>file</VAR>
</TT></P>
<P>Permette di definire il nome di un file contenente il nome del dominio.</P>
<DT><STRONG>Esempi</STRONG></DT>
<DD>
<P>L'utilizzo tipico di <SAMP>domainname</SAMP> è riservato agli <A NAME="index10428"></A>script della <A NAME="index10429"></A>procedura di inizializzazione del sistema. Le istruzioni necessarie potrebbero essere organizzate nel modo seguente:</P>
<PRE># Set the NIS domain name
if [ -n "$NISDOMAIN" ]
then
domainname $NISDOMAIN
else
domainname ""
fi</PRE>
<P>Oppure in modo alternativo anche come segue, dove il nome del dominio è contenuto in un file. In tal caso, bisogna fare attenzione al fatto che il file in questione deve essere composto esclusivamente da una riga, altrimenti viene presa in considerazione solo l'ultima, ma se questa è vuota, il dominio non viene definito.</P>
<PRE># Set the NIS domain name
if [ -f "/etc/nisdomain" ]
then
domainname -F /etc/nisdomain
else
domainname ""
fi</PRE>
</DD>
</DL>
<H3>116.6.3 <A NAME="title1917"></A><A NAME="anchor2309"></A>
Avvio di ypserv <A NAME="index10430"></A> </H3>
<P>In condizioni normali, <SAMP>ypserv</SAMP> non richiede l'uso di argomenti particolari, al massimo si tratta di controllare il file di configurazione <CODE>/etc/ypserv.conf</CODE> e l'eventuale <CODE>/var/yp/securenets</CODE> (prima si deve verificare con l'opzione <SAMP>-version</SAMP> se questo file è necessario, o se al suo posto si usano i file di configurazione del <A NAME="index10431"></A>TCP wrapper). In ogni caso, è importante che la directory <CODE>/var/yp/</CODE> sia stata creata (al suo interno si dovrebbe trovare un <A NAME="index10432"></A>file-make, ma questo verrà mostrato in seguito).</P>
<P class="command"><CODE># </CODE><STRONG><CODE>ypserv</CODE></STRONG>[<KBD>Invio</KBD>]</P>
<P>Se tutto va bene, il programma si avvia <A NAME="index10433"></A>sullo sfondo e si disassocia dalla <A NAME="index10434"></A>shell, diventando un processo figlio di quello iniziale (<A NAME="index10435"></A>Init).</P>
<P class="command"><CODE># </CODE><STRONG><CODE>pstree</CODE></STRONG>[<KBD>Invio</KBD>]</P>
<PRE>init-+-...
|-portmap
|-...
`-ypserv</PRE>
<P>Se il <A NAME="index10436"></A>Portmapper RPC non fosse attivo, oppure se non fosse stato definito il dominio NIS, l'avvio di <SAMP>ypserv</SAMP> non dovrebbe riuscire. Eventualmente, si può verificare il funzionamento del <A NAME="index10437"></A>Portmapper stesso, attraverso il comando seguente:</P>
<P class="command"><CODE># </CODE><STRONG><CODE>rpcinfo -p localhost</CODE></STRONG>[<KBD>Invio</KBD>]</P>
<PRE> program vers proto port
100000 2 tcp 111 rpcbind
100000 2 udp 111 rpcbind
...</PRE>
<P>Le righe che si vedono dall'esempio mostrato sono la dichiarazione esplicita del funzionamento del <A NAME="index10438"></A>Portmapper. Per verificare espressamente la connessione con <SAMP>ypserv</SAMP>, si può usare il comando seguente:</P>
<P class="command"><CODE># </CODE><STRONG><CODE>rpcinfo -u localhost ypserv</CODE></STRONG>[<KBD>Invio</KBD>]</P>
<PRE>program 100004 version 2 ready and waiting</PRE>
<H3>116.6.4 <A NAME="title1918"></A><A NAME="anchor2310"></A>
# ypserv (NYS) <A NAME="index10439"></A> </H3>
<P class="syntax"><TT>ypserv<STRONG><BIG>[</BIG></STRONG><VAR>opzioni</VAR><STRONG><BIG>]</BIG></STRONG>
</TT></P>
<P><SAMP>ypserv</SAMP> è il demone che si occupa di servire un dominio NIS con le informazioni definite dalle mappe relative. <SAMP>ypserv</SAMP> accetta alcune opzioni nella riga di comando, ma viene configurato fondamentalmente attraverso il file <CODE>/etc/ypserv.conf</CODE>. Per il suo funzionamento corretto è necessario che il sistema RPC sia funzionante, che sia stato definito il dominio NIS e che la directory <CODE>/var/yp/</CODE> sia stata predisposta.</P>
<DL>
<DT><STRONG>Alcune opzioni</STRONG></DT>
<DD>
<P class="syntax"><TT>-d<STRONG><BIG>[</BIG></STRONG><VAR>percorso_yp</VAR><STRONG><BIG>]</BIG></STRONG><STRONG><BIG>|</BIG></STRONG>-debug<STRONG><BIG>[</BIG></STRONG><VAR>percorso_yp</VAR><STRONG><BIG>]</BIG></STRONG>
</TT></P>
<P>Utilizzando questa opzione si fa in modo che <SAMP>ypserv</SAMP> funzioni in modalità diagnostica. Per questo, invece di passare <A NAME="index10440"></A>sullo sfondo, continua a funzionare occupando il terminale dal quale è stato avviato, emettendo informazioni particolareggiate su ciò che avviene attraverso lo <A NAME="index10441"></A>standard error. Eventualmente si può indicare un percorso come argomento dell'opzione, intendendo fare in modo che <SAMP>ypserv</SAMP> utilizzi le mappe contenute a partire da quella directory, invece di quelle che si trovano a partire da <CODE>/var/yp/</CODE>.</P>
<P class="syntax"><TT>-b<STRONG><BIG>|</BIG></STRONG>-dns
</TT></P>
<P>Specifica che se un <A NAME="index10442"></A>nodo non viene identificato diversamente, si deve utilizzare il servizio DNS.</P>
<P class="syntax"><TT>-v<STRONG><BIG>|</BIG></STRONG>-version
</TT></P>
<P>Visualizza i dati riferiti alla particolare versione di <SAMP>ypserv</SAMP>. Questa indicazione è molto importante, soprattutto per sapere quali file vengono utilizzati per controllare gli indirizzi che possono accedere al servizio.</P>
<DT><STRONG>Esempi</STRONG></DT>
<DD>
<P><SAMP>ypserv</SAMP>, quando tutto è configurato correttamente, viene avviato dalla <A NAME="index10443"></A>procedura di inizializzazione del sistema, attraverso uno dei suoi <A NAME="index10444"></A>script. L'esempio che segue rappresenta un modo semplice per ottenere questo, dove la variabile di ambiente <SAMP>NISDOMAIN</SAMP> viene usata per contenere il dominio NIS; se manca questa variabile non ha senso avviare il <A NAME="index10445"></A>servente NIS.</P>
<PRE>if [ -n "$NISDOMAIN" ]
then
if [ -f /usr/sbin/ypserv ]
then
/usr/sbin/ypserv
echo ypserv
fi
fi</PRE>
<P>Quello mostrato è solo uno dei tanti modi; in generale bisogna ricordare che si può avviare il servizio NIS solo dopo aver avviato il <A NAME="index10446"></A>Portmapper.</P>
<P>Nelle distribuzioni più accurate, è normale trovare uno <A NAME="index10447"></A>script apposito che permette di avviare e di interrompere l'attività del <A NAME="index10448"></A>servente NIS, assieme a tutto quello di cui potrebbe avere bisogno. Questo genere di <A NAME="index10449"></A>script può trovarsi nelle directory <CODE>/etc/rc.d/init.d/</CODE>, <CODE>/etc/init.d/</CODE> e altre possibili.</P>
</DD>
</DL>
<H3>116.6.5 <A NAME="title1919"></A><A NAME="anchor2311"></A>
/etc/ypserv.conf <A NAME="index10450"></A> <A NAME="index10451"></A> </H3>
<P>La configurazione di <CODE>/etc/ypserv.conf</CODE> riguarda il funzionamento di <SAMP>ypserv</SAMP> e <SAMP>rpc.ypxfrd</SAMP>. Ogni volta che si fanno dei cambiamenti a questa configurazione occorre riavviare questi demoni o inviare loro un segnale <SAMP>SIGHUP</SAMP>.</P>
<P>L'impostazione di questo file può essere anche molto complicata. In linea di massima ci si può fidare della configurazione predefinita, o dei suggerimenti posti nei suoi commenti.</P>
<P>Il file può contenere commenti, rappresentati inizialmente dal simbolo <SAMP>#</SAMP>, righe vuote (o bianche), direttive riferite a opzioni e direttive riferite a regole di accesso. Le direttive di opzione hanno la forma seguente, dove la parola chiave <SAMP>yes</SAMP> attiva l'opzione, mentre <SAMP>no</SAMP> la disattiva.</P>
<P class="syntax"><TT><VAR>opzione</VAR>:<STRONG><BIG>[</BIG></STRONG>yes<STRONG><BIG>|</BIG></STRONG>no<STRONG><BIG>]</BIG></STRONG>
</TT></P>
<P>Le direttive di accesso hanno il formato seguente:</P>
<P class="syntax"><TT><VAR>host</VAR>:<VAR>mappa</VAR>:<VAR>livello_sicurezza</VAR>:<VAR>soppressione</VAR><STRONG><BIG>[</BIG></STRONG>:<VAR>campo</VAR><STRONG><BIG>]</BIG></STRONG>
</TT></P>
<DL>
<DT><STRONG>Direttive di opzione</STRONG></DT>
<DD>
<P><SAMP>dns</SAMP></P>
<P>Attivando questa opzione, si fa in modo che il <A NAME="index10452"></A>servente NIS utilizzi il DNS quando gli vengono richieste informazioni sui <A NAME="index10453"></A>nodi che non può risolvere con le mappe <SAMP>hosts.*</SAMP>. Il valore predefinito è <SAMP>no</SAMP>, e questa opzione può essere attivata anche attraverso la riga di comando di <SAMP>ypserv</SAMP>, <SAMP>-dns</SAMP>, cosa che prende la precedenza su quanto stabilito in questo file di configurazione.</P>
<P><SAMP>sunos_kludge</SAMP></P>
<P>L'attivazione di questa opzione permette di rispondere alle chiamate utilizzate da <SAMP>ypbind</SAMP> di <A NAME="index10454"></A>SunOS 4. Il valore predefinito per questa opzione è <SAMP>yes</SAMP>, ma la compatibilità con <A NAME="index10455"></A>SunOS non è completa.</P>
<P><SAMP>tryresolve</SAMP></P>
<P>Questa opzione riguarda la risoluzione dei nomi dei <A NAME="index10456"></A>nodi. Il suo valore predefinito è <SAMP>no</SAMP> e non serve in un sistema GNU/Linux.</P>
<P><SAMP>xfr_check_port</SAMP></P>
<P>Attivando questa opzione, il <A NAME="index10457"></A>servente principale deve utilizzare una porta inferiore al numero 1 024. Il valore predefinito è <SAMP>yes</SAMP>.</P>
<DT><STRONG>Campi delle direttive di accesso</STRONG></DT>
<DD>
<P><VAR>host</VAR></P>
<P>Si tratta di un indirizzo IP che può rappresentare un solo <A NAME="index10458"></A>nodo o un gruppo. La rappresentazione può essere fatta attraverso un indirizzo IP incompleto, o la coppia indirizzo/maschera. Un indirizzo IP incompleto rappresenta tutti gli indirizzi che iniziano in quel modo, per cui, per esempio, «192.168.» equivale alla notazione 192.168.0.0/255.255.0.0, dove il secondo indirizzo è la maschera.</P>
<P><VAR>mappa</VAR></P>
<P>Il nome della mappa, oppure un asterisco per identificare tutte le mappe.</P>
<P><VAR>livello_sicurezza</VAR></P>
<P>Il livello, o il tipo di sicurezza, viene definito attraverso una parola chiave: <SAMP>none</SAMP>, <SAMP>port</SAMP>, <SAMP>deny</SAMP>, <SAMP>des</SAMP>. Il loro significato viene descritto di seguito.</P>
<UL>
<LI>
<P><SAMP>none</SAMP></P>
<P>Concede qualunque accesso.</P>
</LI>
<LI>
<P><SAMP>port</SAMP></P>
<P>Permette di accedere se la porta è inferiore al numero 1 024, ma solo se è stata specificata la soppressione.</P>
</LI>
<LI>
<P><SAMP>deny</SAMP></P>
<P>Vieta l'accesso alla mappa in questione.</P>
</LI>
<LI>
<P><SAMP>des</SAMP></P>
<P>Richiede l'autenticazione DES. Può funzionare solo se le librerie utilizzate hanno il supporto per questa funzionalità.</P>
</LI>
</UL>
<P><VAR>soppressione</VAR></P>
<P>Può contenere solo una tra le parole chiave <SAMP>yes</SAMP> e <SAMP>no</SAMP>. <SAMP>yes</SAMP> attiva la soppressione del campo specificato. La soppressione implica che al suo posto viene collocata una «x», se il controllo della porta rivela che la richiesta proviene da un accesso non privilegiato.</P>
<P><VAR>campo</VAR></P>
<P>Serve a specificare quale campo deve essere soppresso. Quello predefinito è il secondo.</P>
<DT><STRONG>Esempi</STRONG></DT>
<DD>
<P>L'esempio seguente rappresenta una configurazione predefinita di una distribuzione GNU/Linux.</P>
<PRE># Some options for ypserv. This things are all not needed, if
# you have a Linux net.
sunos_kludge: no
tryresolve: no
dns: no
# The following, when uncommented, will give you shadow like passwords.
# Note that it will not work if you have slave NIS servers in your
# network that do not run the same server as you.
# Host : Map : Security : Passwd_mangle
#
# * : passwd.byname : port : yes
# * : passwd.byuid : port : yes
# Not everybody should see the shadow passwords, not secure, since
# under MSDOG everybody is root and can access ports < 1024 !
* : shadow.byname : port : yes
# If you comment out the next rule, ypserv and rpc.ypxfrd will
# look for YP_SECURE and YP_AUTHDES in the maps. This will make
# the security check a little bit slower, but you only have to
# change the keys on the master server, not the configuration files
# on each NIS server.
# If you have maps with YP_SECURE or YP_AUTHDES, you should create
# a rule for them above, that's much faster.
* : * : none</PRE>
<TABLE BORDER="3" WIDTH="100%">
<TR><TD>
<P>Si è già accennato al fatto che i file di configurazione potrebbero essere cercati nella directory <CODE>/usr/etc/</CODE> invece che nella solita <CODE>/etc/</CODE>. Se si avvertono difficoltà, è consigliabile di utilizzare un <A NAME="index10459"></A>collegamento simbolico all'interno di <CODE>/usr/etc/</CODE> che punti al file corrispondente nella directory <CODE>/etc/</CODE>.</P>
</TD></TR>
</TABLE>
</DD>
</DL>
<H3>116.6.6 <A NAME="title1920"></A><A NAME="anchor2312"></A>
/var/yp/securenets <A NAME="index10460"></A> </H3>
<P>Il file <CODE>/var/yp/securenets</CODE> viene usato da <SAMP>ypserv</SAMP> per sapere quali sono gli indirizzi ammessi a eseguire interrogazioni nel sistema NIS. Bisogna ricordare che <SAMP>ypserv</SAMP> potrebbe essere stato compilato per non usare questo file, utilizzando al suo posto <CODE>/etc/hosts.allow</CODE> e <CODE>/etc/hosts.deny</CODE>. Questo lo si determina utilizzando l'opzione <SAMP>-version</SAMP>.</P>
<P>Nel caso in cui <SAMP>ypserv</SAMP> utilizzi questo file, se manca o è vuoto, vengono consentiti tutti gli accessi in modo indiscriminato. Ogni volta che si modifica il file è necessario riavviare <SAMP>ypserv</SAMP>, oppure gli si deve inviare un segnale <SAMP>SIGHUP</SAMP>.</P>
<P>A parte i commenti, rappresentati dalle righe che iniziano con il simbolo <SAMP>#</SAMP>, e le righe vuote, questo file è fatto principalmente per annotare coppie di indirizzi IP, dove il primo è la maschera e il secondo l'indirizzo della rete a cui si vuole concedere l'accesso. L'esempio seguente è simile a quello che si trova nella <A NAME="index10461"></A>pagina di manuale <EM>ypserv</EM>(8) e dovrebbe essere sufficiente a comprendere il meccanismo.</P>
<PRE># Consente le connessioni dallo stesso elaboratore locale (è necessario)
# Equivale a 255.255.255.255 127.0.0.1
#
host 127.0.0.1
#
#
# Permette le connessioni da tutti gli elaboratori della rete locale
# 192.168.1.0
#
255.255.255.0 192.168.1.0</PRE>
<H3>116.6.7 <A NAME="title1921"></A><A NAME="anchor2313"></A>
Configurazione e preparazione delle mappe </H3>
<P>Le mappe NIS, come già accennato, sono collocate nella directory <CODE>/var/yp/<VAR>dominio_nis</VAR>/</CODE>. I file delle mappe esistenti, per il solo fatto di esserci, definiscono implicitamente quali siano i dati amministrativi che vengono gestiti in quel dominio NIS particolare. La loro creazione e il loro aggiornamento, avvengono attraverso un <A NAME="index10462"></A>file-make che si trova nella directory <CODE>/var/yp/</CODE> e che generalmente viene utilizzato attraverso uno <A NAME="index10463"></A>script. Il problema, semmai, sta nella necessità di modificare tale <A NAME="index10464"></A>file-make per definire quali mappe debbano essere costruite.</P>
<P>In linea di principio <STRONG>non</STRONG> è conveniente lasciare le cose come sono. Il NIS è un sistema troppo complesso perché un principiante possa permettersi di attivare subito la gestione completa di tutte le informazioni amministrative. Nell'esempio che segue viene mostrata una parte del <A NAME="index10465"></A>file-make fornito con una particolare distribuzione GNU/Linux (non importa quale), modificato in modo da gestire esclusivamente le informazioni sugli utenti e i gruppi, senza <A NAME="index10466"></A>password shadow. È bene ribadire che questo <A NAME="index10467"></A>file-make è solo un esempio, come guida per la modifica di quello che si trova con la propria distribuzione.</P>
<PRE># This Makefile should only be run on the NIS master server of a domain.
#...
# If this machine is an NIS master, comment out this next line so
# that changes to the NIS maps can be propagated to the slave servers.
# (By default we assume that we are only serving a small domain with
# only one server.)
#
#NOPUSH = "True"
#...
# If you don't want some of these maps built, feel free to comment
# them out from this list.
# Note that we don't build the ethers or bootparams maps by default
# since /etc/ethers and /etc/bootparams are not likely to be present
# on all systems.
#
all: passwd group ypservers
##all: passwd hosts group netid networks protocols rpc services netgrp \
## mail shadow ypservers publickey ethers # amd.home auto.master
### auto.home bootparams
ethers: ethers.byname ethers.byaddr
hosts: hosts.byname hosts.byaddr
networks: networks.byaddr networks.byname
protocols: protocols.bynumber protocols.byname
rpc: rpc.byname rpc.bynumber
services: services.byname
passwd: passwd.byname passwd.byuid
group: group.byname group.bygid
shadow: shadow.byname
netid: netid.byname
netgrp: netgroup netgroup.byhost netgroup.byuser
publickey: publickey.byname
mail: mail.aliases
#...</PRE>
<P>Nella prima parte viene definito, attraverso una variabile, se il <A NAME="index10468"></A>servente deve occuparsi di spedire gli aggiornamenti (<EM>push</EM>) ai <A NAME="index10469"></A>serventi secondari. In questo caso, commentando l'assegnamento della variabile <SAMP>NOPUSH</SAMP> si ottiene di mantenere attivo questo aggiornamento.<SUP><A HREF="#footnote4" NAME="footnote-ref4">(4)</A></SUP></P>
<P>Più avanti, l'obiettivo <SAMP>all</SAMP> permette di definire quali mappe costruire. Dall'esempio si può vedere ciò che veniva proposto, commentato, e quello che serve per generare esclusivamente le mappe abbinate ai file <CODE>/etc/passwd</CODE> e <CODE>/etc/group</CODE>. Il nome <SAMP>ypservers</SAMP> si riferisce al file <CODE>/var/yp/ypservers</CODE>, che viene utilizzato per contenere l'elenco dei <A NAME="index10471"></A>serventi (principale e secondari) competenti per il dominio (verrà chiarito in seguito).</P>
<P>Una volta predisposto il <A NAME="index10472"></A>file-make, si può usare il programma <SAMP>make</SAMP>, senza argomenti, oppure si può utilizzare un comando specifico (è la scelta più elegante, mentre <SAMP>make</SAMP> è la scelta più semplice quando si raggiunge una certa dimestichezza con il sistema).</P>
<P class="command"><CODE># </CODE><STRONG><CODE>/usr/lib/yp/ypinit -m</CODE></STRONG></P>
<P>Il vero vantaggio nell'utilizzo di questo programma (che poi è in realtà uno <A NAME="index10473"></A>script), sta nel fatto che provvede a costruire al volo il file <CODE>/var/yp/servers</CODE>, con l'elenco dei <A NAME="index10474"></A>serventi competenti per il dominio che si sta predisponendo.</P>
<PRE>At this point, we have to construct a list of the hosts which will run NIS
servers. dinkel.brot.dg is in the list of NIS server hosts.
Please continue to add the names for the other hosts, one per line.
When you are done with the list, type a <control D>.
next host to add: dinkel.brot.dg
next host to add: </PRE>
<P>Questa operazione va condotta dall'elaboratore che deve svolgere il ruolo di <A NAME="index10475"></A>servente principale, di conseguenza, il suo indirizzo deve apparire per primo. Supponendo di avere un secondo elaboratore da utilizzare come <A NAME="index10476"></A>servente secondario, si può aggiungere il suo nome e quindi terminare con la combinazione [<KBD>Ctrl+d</KBD>].</P>
<P class="command"><CODE>next host to add: </CODE><STRONG><CODE>roggen.brot.dg</CODE></STRONG>[<KBD>Invio</KBD>]</P>
<P class="command"><CODE>next host to add: </CODE>[<KBD>Ctrl+d</KBD>]</P>
<PRE>The current list of NIS servers looks like this:
dinkel.brot.dg
roggen.brot.dg
Is this correct? [y/n: y] </PRE>
<P class="command">[<KBD>Invio</KBD>]</P>
<PRE>We need some minutes to build the databases...
Building /var/yp/rost.nis-yp/ypservers...
Running /var/yp/Makefile...
NIS Map update started on Sun May 31 23:00:14 CEST 1998
make[1]: Entering directory `/var/yp/rost.nis-yp'
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
make[1]: Leaving directory `/var/yp/rost.nis-yp'
NIS Map update completed. </PRE>
<P>Questo è il tipo di risultato che si può osservare quando tutto procede regolarmente. Se non si utilizza lo <A NAME="index10477"></A>script <SAMP>ypinit</SAMP>, si salta la predisposizione del file <CODE>/var/yp/rost.nis-yp/ypservers</CODE>, che però potrebbe essere già stato ottenuto da un'esecuzione precedente di <SAMP>ypinit</SAMP>. In pratica, lo <A NAME="index10478"></A>script <SAMP>ypinit</SAMP> va utilizzato convenientemente la prima volta che si allestisce il <A NAME="index10479"></A>servente, mentre le altre volte è sufficiente utilizzare solo <SAMP>make</SAMP> dalla directory <CODE>/var/yp/</CODE>.</P>
<H3>116.6.8 <A NAME="title1922"></A><A NAME="anchor2314"></A>
# rpc.yppasswdd <A NAME="index10480"></A> </H3>
<P class="syntax"><TT>rpc.yppasswdd<STRONG><BIG>[</BIG></STRONG><VAR>opzioni</VAR><STRONG><BIG>]</BIG></STRONG>
</TT></P>
<P>Il demone <SAMP>rpc.yppasswdd</SAMP> deve essere utilizzato solo nel <A NAME="index10481"></A>servente principale e la sua presenza permette agli utenti di cambiare la <A NAME="index10482"></A>parola d'ordine di accesso attraverso il programma <SAMP>yppasswd</SAMP>.</P>
<P>Le opzioni disponibili dipendono molto dalla versione di questo programma e dal modo con cui è stato compilato. È da questo programma che dipende anche la possibilità o meno di utilizzare <SAMP>ypchsh</SAMP> e <SAMP>ypchfn</SAMP>. In generale, utilizzandolo senza opzioni particolari, è possibile solo la modifica della <A NAME="index10483"></A>parola d'ordine.</P>
<H2>116.7 <A NAME="title1923"></A><A NAME="anchor2315"></A>
Predisposizione del <A NAME="index10484"></A>servente secondario </H2>
<P>I <A NAME="index10485"></A>serventi secondari, ammesso che se ne vogliano avere, devono poter comunicare con il <A NAME="index10486"></A>servente principale, ma naturalmente ciò richiede implicitamente che questi, oltre che <A NAME="index10487"></A>serventi secondari, siano anche dei <A NAME="index10488"></A>clienti. Più avanti verrà spiegato come predisporre un <A NAME="index10489"></A>cliente NIS; per il momento è bene affrontare ugualmente il problema, per mantenere mentalmente il collegamento con quanto già trattato sul <A NAME="index10490"></A>servente principale.</P>
<P>Un <A NAME="index10491"></A>servente secondario richiede le stesse cose del <A NAME="index10492"></A>servente principale, a eccezione del demone <SAMP>rpc.yppasswdd</SAMP> che nel <A NAME="index10493"></A>servente secondario non ha ragione di esistere. Questo significa che:</P>
<UL>
<LI>
<P>si deve impostare il dominio NIS;</P>
</LI>
<LI>
<P>si deve configurare <SAMP>ypserv</SAMP> attraverso <CODE>/etc/ypserv.conf</CODE> e <CODE>/var/yp/securenets</CODE>, oppure gli altri file del <A NAME="index10494"></A>TCP wrapper.</P>
</LI>
</UL>
<P>Si è già accennato al fatto che il <A NAME="index10495"></A>servente secondario deve avere il <A NAME="index10496"></A>cliente NIS in funzione, ma la differenza più interessante sta nell'assenza del <A NAME="index10497"></A>file-make nella directory <CODE>/var/yp/</CODE>. Naturalmente, il <A NAME="index10498"></A>file-make può anche esserci, ma non deve essere preso in considerazione.</P>
<H3>116.7.1 <A NAME="title1924"></A><A NAME="anchor2316"></A>
Riproduzione delle mappe nel <A NAME="index10499"></A>servente secondario </H3>
<P>Anche il <A NAME="index10500"></A>servente secondario, per poter compiere il suo lavoro, deve disporre delle mappe NIS. Queste vengono create, copiandole dal <A NAME="index10501"></A>servente principale, attraverso il comando seguente:</P>
<P class="syntax"><TT>/usr/lib/yp/ypinit-s<VAR>servente_NIS_principale</VAR>
</TT></P>
<P>In pratica, si avvia <SAMP>ypinit</SAMP> con l'opzione <SAMP>-s</SAMP>, indicando il nome dell'elaboratore che ospita il <A NAME="index10502"></A>servente principale. Per esempio, se il <A NAME="index10503"></A>servente principale è <CODE>dinkel.brot.dg</CODE>, il comando corretto è il seguente:</P>
<P class="command"><CODE># </CODE><STRONG><CODE>/usr/lib/yp/ypinit -s dinkel.brot.dg</CODE></STRONG></P>
<P>Perché l'operazione funzioni correttamente, occorre che il <A NAME="index10504"></A>cliente NIS sottostante sia configurato e funzionante. In pratica, prima di utilizzare <SAMP>ypinit</SAMP>, si può verificare che sia tutto in ordine con il comando seguente:</P>
<P class="command"><CODE># </CODE><STRONG><CODE>ypwhich -m</CODE></STRONG></P>
<P>Questo deve restituire il nome del <A NAME="index10505"></A>servente principale.</P>
<H3>116.7.2 <A NAME="title1925"></A><A NAME="anchor2317"></A>
Sincronizzazione </H3>
<P>La presenza di <A NAME="index10506"></A>serventi secondari introduce nel sistema NIS dei problemi di sincronizzazione di questi con il <A NAME="index10507"></A>servente principale. Oltre a tutto, lo stesso procedimento di sincronizzazione accresce i problemi di sicurezza, dal momento che periodicamente viaggiano informazioni delicate nella rete.</P>
<P>Ci sono tre modi per sincronizzare i <A NAME="index10508"></A>serventi secondari, ma non tutti funzionano sempre, a causa degli accorgimenti utilizzati per ridurre i problemi di sicurezza.</P>
<OL>
<LI>
<P>Quando il <A NAME="index10509"></A>servente principale viene aggiornato, dovrebbe essere in grado di inviare ai <A NAME="index10510"></A>serventi secondari le modifiche alle mappe (<EM>push</EM>). Questa operazione non funziona se i <A NAME="index10511"></A>serventi secondari non sono in ascolto in quel momento, inoltre non funziona anche in altre circostanze, sempre per motivi di sicurezza.</P>
</LI>
<LI>
<P>I <A NAME="index10512"></A>serventi secondari possono comunicare periodicamente con il <A NAME="index10513"></A>servente principale per verificare la presenza di aggiornamenti delle mappe. Questa operazione richiede nel <A NAME="index10514"></A>servente principale la presenza in funzione del demone <SAMP>rpc.ypxfrd</SAMP>.</P>
</LI>
<LI>
<P>In ultima analisi, i <A NAME="index10515"></A>serventi secondari si aggiornano con il comando <SAMP>ypinit -s <VAR>servente_principale</VAR></SAMP>.</P>
</LI>
</OL>
<P>Per quanto riguarda il secondo punto, il NIS offre generalmente tre <A NAME="index10516"></A>script predisposti opportunamente per eseguire i compiti di aggiornamento. Si tratta di: <SAMP>ypxfr_1perhour</SAMP>, <SAMP>ypxfr_1perday</SAMP> e <SAMP>ypxfr_2perday</SAMP>. Questi si trovano nella directory <CODE>/usr/lib/yp/</CODE> e sono pensati per essere inclusi in un file <A NAME="index10517"></A>crontab, come nell'esempio seguente che rappresenta precisamente il file <CODE>/etc/crontab</CODE>.</P>
<PRE>20 * * * * root /usr/lib/yp/ypxfr_1perhour
40 6 * * * root /usr/lib/yp/ypxfr_1perday
55 6,18 * * * root /usr/lib/yp/ypxfr_2perday</PRE>
<P>I diversi <A NAME="index10518"></A>script si occupano di trasferire mappe differenti. In particolare, quello eseguito ogni ora è predisposto per trasferire le informazioni sugli utenti (la cosa più urgente).</P>
<P>Dal momento che non si può fare affidamento sul sistema di aggiornamento pilotato dal <A NAME="index10519"></A>servente principale (quello del primo punto), se per qualche motivo l'aggiornamento a mezzo di <SAMP>ypxfr</SAMP> non funziona, occorre ripiegare necessariamente sull'uso periodico di <SAMP>ypinit -s</SAMP>, eventualmente collocando anch'esso in un file <A NAME="index10520"></A>crontab.</P>
<H3>116.7.3 <A NAME="title1926"></A><A NAME="anchor2318"></A>
# rpc.ypxfrd <A NAME="index10521"></A> <A NAME="index10522"></A> </H3>
<P class="syntax"><TT>rpc.ypxfrd<STRONG><BIG>[</BIG></STRONG><VAR>opzioni</VAR><STRONG><BIG>]</BIG></STRONG>
</TT></P>
<P>Il demone <SAMP>rpc.ypxfrd</SAMP> viene utilizzato solo nel <A NAME="index10523"></A>servente principale per facilitare l'aggiornamento delle mappe nei <A NAME="index10524"></A>serventi secondari. La sua presenza non è indispensabile, ma è utile per accelerare il processo di aggiornamento.</P>
<P>Generalmente può essere utilizzato senza argomenti e dovrebbe essere avviato dalla <A NAME="index10525"></A>procedura di inizializzazione del sistema.</P>
<H2>116.8 <A NAME="title1927"></A><A NAME="anchor2319"></A>
<A NAME="index10526"></A>Cliente NIS e NYS </H2>
<P>Gli elaboratori che devono condividere le informazioni amministrate con il NIS, devono utilizzare il <A NAME="index10527"></A>cliente <SAMP>ypbind</SAMP>, configurato opportunamente. In tal modo, su tali elaboratori, invece di utilizzare le informazioni amministrative locali, verranno usate quelle concentrate dal NIS.</P>
<P>Quando si utilizza precisamente NYS, i servizi svolti da <SAMP>ypbind</SAMP> potrebbero essere forniti direttamente dalle librerie del sistema. Tuttavia, anche in questa circostanza, alcuni programmi come <SAMP>ypwhich</SAMP> e <SAMP>ypcat</SAMP> continuano a richiedere la presenza di <SAMP>ypbind</SAMP>.</P>
<P>La configurazione di <SAMP>ypbind</SAMP> e anche quella di NYS (con le sue librerie), avviene attraverso i file <CODE>/etc/yp.conf</CODE> e <CODE>/etc/nsswitch.conf</CODE>. Il primo serve a definire come raggiungere i <A NAME="index10528"></A>serventi; il secondo definisce l'ordine di utilizzo dei servizi (<EM>Name Service Switch</EM>).</P>
<P>Come nel caso dei <A NAME="index10529"></A>serventi, anche i <A NAME="index10530"></A>clienti richiedono la definizione del dominio NIS, attraverso <SAMP>domainname</SAMP>. Se il dominio non viene predisposto <SAMP>ypbind</SAMP> non può funzionare.</P>
<P>Anche il <A NAME="index10531"></A>cliente richiede la presenza della directory <CODE>/var/yp/</CODE>. Al suo interno viene creata la directory <CODE>binding/</CODE>.</P>
<P>Anche il <A NAME="index10532"></A>cliente richiede l'attivazione del <A NAME="index10533"></A>Portmapper RPC.</P>
<H3>116.8.1 <A NAME="title1928"></A><A NAME="anchor2320"></A>
Gli utenti </H3>
<P>A seconda delle caratteristiche particolari del <A NAME="index10534"></A>cliente, sono possibili delle configurazioni speciali per ciò che riguarda l'accesso da parte degli utenti. Quando la loro gestione è compito del NIS, si può configurare il <A NAME="index10535"></A>cliente in modo da definire una graduatoria nella ricerca dei dati che identificano l'utente al momento dell'accesso. Di solito si cerca prima l'utente nel file <CODE>/etc/passwd</CODE> locale, quindi si prova con il NIS.</P>
<P>A parte questo particolare abbastanza semplice, si può porre il problema di voler concedere l'accesso su un certo elaboratore solo ad alcuni utenti definiti attraverso il NIS, oppure, più semplicemente, si può volere escludere l'accesso da parte di qualcuno. Per ottenere questo occorre intervenire sul file <CODE>/etc/passwd</CODE> utilizzando <A NAME="index10536"></A>record con notazioni particolari; cosa che qui non viene descritta.</P>
<P>In generale, per fare in modo che gli utenti NIS del dominio a cui si fa riferimento possano accedere da un certo <A NAME="index10537"></A>cliente, occorre aggiungere nel file <CODE>/etc/passwd</CODE> il <A NAME="index10538"></A>record seguente:</P>
<PRE>+::::::</PRE>
<P>Questo viene interpretato come il punto in cui si vogliono inserire virtualmente gli utenti NIS. È probabile che, per fare in modo che vengano utilizzati prima i dati degli utenti già registrati in quel <A NAME="index10539"></A>cliente, questo <A NAME="index10540"></A>record debba essere collocato alla fine del file.</P>
<P>Quando si usa NYS, non dovrebbe essere necessario aggiungere questa indicazione; tuttavia, se c'è non può creare danno.</P>
<H3>116.8.2 <A NAME="title1929"></A><A NAME="anchor2321"></A>
# ypbind <A NAME="index10541"></A> </H3>
<P class="syntax"><TT>ypbind<STRONG><BIG>[</BIG></STRONG><VAR>opzioni</VAR><STRONG><BIG>]</BIG></STRONG>
</TT></P>
<P><SAMP>ypbind</SAMP> è un demone per l'attivazione dell'accesso alle informazioni fornite da un <A NAME="index10542"></A>servente NIS; è in pratica il <A NAME="index10543"></A>cliente NIS. Utilizza la directory <CODE>/var/yp/binding/</CODE> per collocarci all'interno un file contenente le informazioni sul dominio NIS per il quale è stato avviato.</P>
<P><SAMP>ypbind</SAMP> utilizza la configurazione del file <CODE>/etc/yp.conf</CODE> per trovare i <A NAME="index10544"></A>serventi e quella del file <CODE>/etc/nsswitch.conf</CODE> per stabilire l'ordine di utilizzo delle informazioni amministrative.</P>
<DL>
<DT><STRONG>Alcune opzioni</STRONG></DT>
<DD>
<P class="syntax"><TT>-debug
</TT></P>
<P>Fa in modo che <SAMP>ypbind</SAMP> continui a funzionare <A NAME="index10545"></A>in primo piano, in modo da emettere una serie di informazioni diagnostiche attraverso lo <A NAME="index10546"></A>standard error.</P>
</DD>
</DL>
<H3>116.8.3 <A NAME="title1930"></A><A NAME="anchor2322"></A>
/etc/yp.conf <A NAME="index10547"></A> <A NAME="index10548"></A> </H3>
<P>Il file <CODE>/etc/yp.conf</CODE> serve a definire come accedere ai <A NAME="index10549"></A>serventi. Viene utilizzato sia da <SAMP>ypbind</SAMP> che dalle librerie NYS.</P>
<TABLE BORDER="3" WIDTH="100%">
<TR><TD>
<P><SAMP>ypbind</SAMP> potrebbe essere in grado di utilizzare solo l'ultima riga di questo file. Di conseguenza, è bene limitarsi a una sola direttiva.</P>
</TD></TR>
</TABLE>
<P>Il file può contenere tre tipi di direttive, descritte dalle sintassi seguenti.</P>
<P class="syntax"><TT>domain<VAR>dominio_nis</VAR>server<VAR>host</VAR>
</TT></P>
<P class="syntax"><TT>domain<VAR>dominio_nis</VAR>broadcast
</TT></P>
<P class="syntax"><TT>ypserv<VAR>host</VAR>
</TT></P>
<P>La prima definisce che per il dominio NIS indicato si deve interpellare il <A NAME="index10550"></A>servente specificato; la seconda definisce che per il dominio si devono usare delle chiamate circolari a tutta la rete (locale); l'ultima definisce semplicemente un <A NAME="index10551"></A>servente, indipendentemente dal dominio.</P>
<P>Quando si utilizza il sistema della chiamata circolare (<A NAME="index10552"></A>broadcast), si rischia di ricevere la risposta da un possibile <A NAME="index10553"></A>servente fasullo, collocato appositamente per sostituirsi a quelli veri allo scopo di carpire informazioni dai <A NAME="index10554"></A>clienti. Se non si temono attacchi di questo tipo, la chiamata circolare è il modo migliore per fare in modo che il <A NAME="index10555"></A>cliente sia in grado di scegliersi il <A NAME="index10556"></A>servente (quello che risponde prima).</P>
<P>Il <A NAME="index10557"></A>servente, quando deve essere identificato, può essere indicato per nome o per numero IP. Nel primo caso, è necessario che il sistema sia in grado di risolvere il nome in modo indipendente dal NIS (evidentemente). In generale, è conveniente utilizzare l'indirizzo IP per questo scopo.</P>
<P>L'esempio seguente mostra l'unica riga di un file <CODE>/etc/yp.conf</CODE> in cui si stabilisce che per il dominio <SAMP>rost.nis-yp</SAMP> si deve usare la chiamata circolare.</P>
<PRE>domain rost.nis-yp broadcast</PRE>
<H3>116.8.4 <A NAME="title1931"></A><A NAME="anchor2323"></A>
/etc/nsswitch.conf <A NAME="index10558"></A> <A NAME="index10559"></A> </H3>
<P>Il file <CODE>/etc/nsswitch.conf</CODE> viene usato dal <A NAME="index10560"></A>cliente NIS per determinare l'ordine in cui devono essere richiesti i servizi. La sua configurazione dovrebbe riguardare tutti i tipi di dati amministrativi gestibili con il NIS, anche se di fatto ne sono stati abilitati solo alcuni. In questo modo, la determinazione di cosa gestire con il NIS viene fatta solo nel <A NAME="index10561"></A>servente principale.</P>
<P>Quello che segue è la configurazione proposta in una particolare distribuzione GNU/Linux. Si può osservare che le informazioni sugli utenti (<SAMP>passwd</SAMP>, <SAMP>shadow</SAMP>, <SAMP>group</SAMP>) sono cercate prima nei file locali, quindi nel servizio NIS.</P>
<PRE>#
# /etc/nsswitch.conf
#
# An example Name Service Switch config file. This file should be
# sorted with the most-used services at the beginning.
#
# The entry '[NOTFOUND=return]' means that the search for an
# entry should stop if the search in the previous entry turned
# up nothing. Note that if the search failed due to some other reason
# (like no NIS server responding) then the search continues with the
# next entry.
#
# Legal entries are:
#
# nisplus or nis+ Use NIS+ (NIS version 3)
# nis or yp Use NIS (NIS version 2), also called YP
# dns Use DNS (Domain Name Service)
# files Use the local files
# [NOTFOUND=return] Stop searching if not found so far
#
passwd: files nisplus nis
shadow: files nisplus nis
group: files nisplus nis
hosts: files nisplus nis dns
services: nisplus [NOTFOUND=return] files
networks: nisplus [NOTFOUND=return] files
protocols: nisplus [NOTFOUND=return] files
rpc: nisplus [NOTFOUND=return] files
ethers: nisplus [NOTFOUND=return] files
netmasks: nisplus [NOTFOUND=return] files
bootparams: nisplus [NOTFOUND=return] files
netgroup: nisplus
publickey: nisplus
automount: files nisplus
aliases: files nisplus</PRE>
<H3>116.8.5 <A NAME="title1932"></A><A NAME="anchor2324"></A>
$ ypwhich <A NAME="index10562"></A> </H3>
<P class="syntax"><TT>ypwhich<STRONG><BIG>[</BIG></STRONG><VAR>opzioni</VAR><STRONG><BIG>]</BIG></STRONG>
</TT></P>
<P><SAMP>ypwhich</SAMP> permette di conoscere quale sia il <A NAME="index10563"></A>servente NIS utilizzato dal <A NAME="index10564"></A>cliente, quando viene avviato senza opzioni, oppure quale sia precisamente il <A NAME="index10565"></A>servente principale per una certa mappa. Questo programma dipende da <SAMP>ypbind</SAMP>, che così deve essere presente anche se si utilizza il NYS.</P>
<DL>
<DT><STRONG>Alcune opzioni</STRONG></DT>
<DD>
<P class="syntax"><TT>-d<VAR>dominio</VAR>
</TT></P>
<P>Utilizza un dominio differente da quello predefinito. Per usare questa opzione occorre comunque che tale dominio diverso sia stato collegato.</P>
<P class="syntax"><TT>-m<STRONG><BIG>[</BIG></STRONG><VAR>mappa</VAR><STRONG><BIG>]</BIG></STRONG>
</TT></P>
<P>Permette di conoscere quale sia il <A NAME="index10566"></A>servente principale per la particolare mappa specificata, o per tutte quelle che vengono raggiunte.</P>
<DT><STRONG>Esempi</STRONG></DT>
<DD>
<P class="command"><CODE>$ </CODE><STRONG><CODE>ypwhich</CODE></STRONG></P>
<P>Emette il nome dell'elaboratore che funge da <A NAME="index10567"></A>servente NIS per quel particolare <A NAME="index10568"></A>cliente.</P>
<P class="command"><CODE>$ </CODE><STRONG><CODE>ypwhich -m</CODE></STRONG></P>
<P>Emette l'elenco delle mappe gestire dal NIS con i rispettivi <A NAME="index10569"></A>serventi principali competenti.</P>
</DD>
</DL>
<H3>116.8.6 <A NAME="title1933"></A><A NAME="anchor2325"></A>
$ ypcat <A NAME="index10570"></A> </H3>
<P class="syntax"><TT>ypcat<STRONG><BIG>[</BIG></STRONG><VAR>opzioni</VAR><STRONG><BIG>]</BIG></STRONG><VAR>mappa</VAR>
</TT></P>
<P><SAMP>ypcat</SAMP> emette il contenuto di una mappa indicata come argomento della riga di comando. Questo programma dipende da <SAMP>ypbind</SAMP>, che così deve essere presente anche se si utilizza il NYS.</P>
<DL>
<DT><STRONG>Alcune opzioni</STRONG></DT>
<DD>
<P class="syntax"><TT>-d<VAR>dominio</VAR>
</TT></P>
<P>Utilizza un dominio differente da quello predefinito. Per usare questa opzione occorre comunque che tale dominio diverso sia stato collegato.</P>
<DT><STRONG>Esempi</STRONG></DT>
<DD>
<P class="command"><CODE>$ </CODE><STRONG><CODE>ypcat group.byname</CODE></STRONG></P>
<P>Emette il contenuto della mappa corrispondente all'elenco dei gruppi per nome.</P>
</DD>
</DL>
<H3>116.8.7 <A NAME="title1934"></A><A NAME="anchor2326"></A>
$ ypmatch <A NAME="index10571"></A> </H3>
<P class="syntax"><TT>ypmatch<STRONG><BIG>[</BIG></STRONG><VAR>opzioni</VAR><STRONG><BIG>]</BIG></STRONG><VAR>chiave</VAR>...<VAR>mappa</VAR>
</TT></P>
<P><SAMP>ypmatch</SAMP> emette il valori corrispondenti a una o più chiavi di una mappa. Questo programma dipende da <SAMP>ypbind</SAMP>, che così deve essere presente anche se si utilizza il NYS.</P>
<DL>
<DT><STRONG>Alcune opzioni</STRONG></DT>
<DD>
<P class="syntax"><TT>-d<VAR>dominio</VAR>
</TT></P>
<P>Utilizza un dominio differente da quello predefinito. Per usare questa opzione occorre comunque che tale dominio diverso sia stato collegato.</P>
<DT><STRONG>Esempi</STRONG></DT>
<DD>
<P class="command"><CODE>$ </CODE><STRONG><CODE>ypmatch tizio caio passwd.byname</CODE></STRONG></P>
<P>Emette i <A NAME="index10572"></A>record corrispondenti agli utenti <SAMP>tizio</SAMP> e <SAMP>caio</SAMP>.</P>
<P class="command"><CODE>$ </CODE><STRONG><CODE>ypmatch 500 passwd.byuid</CODE></STRONG></P>
<P>Emette il <A NAME="index10573"></A>record corrispondente all'utente identificato dal numero UID 500.</P>
</DD>
</DL>
<H3>116.8.8 <A NAME="title1935"></A><A NAME="anchor2327"></A>
$ yppasswd, ypchsh, ypchfn <A NAME="index10574"></A> <A NAME="index10575"></A> <A NAME="index10576"></A> </H3>
<P class="syntax"><TT>yppasswd<STRONG><BIG>[</BIG></STRONG><VAR>utente</VAR><STRONG><BIG>]</BIG></STRONG>
</TT></P>
<P class="syntax"><TT>ypchsh<STRONG><BIG>[</BIG></STRONG><VAR>utente</VAR><STRONG><BIG>]</BIG></STRONG>
</TT></P>
<P class="syntax"><TT>ypchfn<STRONG><BIG>[</BIG></STRONG><VAR>utente</VAR><STRONG><BIG>]</BIG></STRONG>
</TT></P>
<P><SAMP>yppasswd</SAMP>, <SAMP>ypchsh</SAMP> e <SAMP>ypchfn</SAMP> sono tre alias dello stesso programma. A seconda del nome usato per avviarlo, si intende cambiare la <A NAME="index10577"></A>parola d'ordine, la <A NAME="index10578"></A>shell o le informazioni personali.</P>
<P>Questi comandi si sostituiscono ai soliti <SAMP>passwd</SAMP>, <SAMP>chsh</SAMP> e <SAMP>chfn</SAMP>, che hanno effetto solo localmente, quando si vuole intervenire sulle utenze gestite dal NIS. A questo proposito, è bene considerare la possibiltà di fare «sparire» i comandi normali, in modo da non creare confusione agli utenti, predisponendo dei <A NAME="index10579"></A>collegamenti simbolici opportuni per fare in modo che <SAMP>passwd</SAMP>, <SAMP>chsh</SAMP> e <SAMP>chfn</SAMP> avviino rispettivamente i corrispondenti <SAMP>yppasswd</SAMP>, <SAMP>ypchsh</SAMP> e <SAMP>ypchfn</SAMP>.</P>
<P>Questi comandi, quando vengono invocati, si mettono in contatto con il <A NAME="index10580"></A>servente principale, nel quale deve essere in funzione il demone <SAMP>rpc.passwdd</SAMP>. È da questo demone che dipende la possibilità di cambiare questi valori, ma potrebbe capitare che sia abilitata solo la sostituzione delle <A NAME="index10581"></A>parole d'ordine.</P>
<P>Solo l'utente <SAMP>root</SAMP> può indicare il nome di un altro utente attraverso la riga di comando.</P>
<H2>116.9 <A NAME="title1936"></A><A NAME="anchor2328"></A>
Directory personali </H2>
<P>Quando si gestiscono gli utenti (e i gruppi) attraverso il NIS, si intende permettere a tutti questi utenti di utilizzare indifferentemente tutte le macchine su cui si fa funzionare il <A NAME="index10582"></A>cliente NIS. Per raggiungere questo obiettivo, occorre fare in modo che le rispettive <A NAME="index10583"></A>directory personali (<EM>home</EM>) siano accessibili da qualunque postazione. Evidentemente è necessario usare uno spazio condiviso in rete, attraverso il protocollo NFS.</P>
<P>Il modo più semplice potrebbe essere quello di predisporre una partizione apposita in un <A NAME="index10584"></A>servente NFS, montando tale <A NAME="index10585"></A>file system nella directory <CODE>/home/</CODE> di ogni <A NAME="index10586"></A>cliente NIS. Come si può intuire non si tratta di una soluzione ottimale, ma comunque è qualcosa di pratico, almeno inizialmente.</P>
<P>Il <A NAME="index10587"></A>file system condiviso dovrà essere accessibile in lettura-scrittura.</P>
<P>La gestione del protocollo NFS è descritta nel capitolo <A HREF="a2141.html#anchor2142">105</A>.</P>
<H2>116.10 <A NAME="title1937"></A><A NAME="anchor2329"></A>
Riferimenti </H2>
<UL>
<LI>
<P>Thorsten Kukuk, <EM>The Linux NIS(YP)/NYS/NIS+ HOWTO</EM></P>
<P><<EM><A HREF="http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html">http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html</A></EM>></P>
</LI>
</UL>
Appunti di informatica libera 2001.08.18 --- <EM>Copyright © 2000-2001 Daniele Giacomini -- daniele @ swlibero.org</EM><HR>
<P><A HREF="#footnote-ref1" NAME="footnote1">1)</A> <STRONG>NIS</STRONG> GNU GPL</P>
<P><A HREF="#footnote-ref2" NAME="footnote2">2)</A> Anche se la propria distribuzione GNU/Linux non dovesse includerlo, esiste comunque un <A NAME="index10409"></A>cliente adatto a utilizzare il servizio NIS+.</P>
<P><A HREF="#footnote-ref3" NAME="footnote3">3)</A> Il vero problema di tutto questo sta nel fatto che sono poche le distribuzioni GNU/Linux che pongono attenzione al NIS, così capita spesso che la configurazione definita in fase di compilazione dei sorgenti non sia perfetta. Tra le tante cose, potrebbe capitare che i file di configurazione debbano essere collocati in <CODE>/usr/etc/</CODE>, invece che in <CODE>/etc/</CODE> (questo solo a titolo di esempio). Di certo, mano a mano che l'interesse sul NIS degli utenti aumenterà, maggiore sarà la cura che vi verrà messa.</P>
<P><A HREF="#footnote-ref4" NAME="footnote4">4)</A> Se non serve, o non funziona, si ottiene al massimo una segnalazione di errore nel momento in cui si utilizza il <A NAME="index10470"></A>file-make, senza altri effetti collaterali.</P>
</DIV>
<HR>
<P>Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome <A HREF="nis.html">nis.html</A></P>
<P>
<A HREF="a2153.html">[successivo]</A>
<A HREF="a2151.html">[precedente]</A>
<A HREF="a2.html">[inizio]</A>
<A HREF="a2506.html">[fine]</A>
<A HREF="a21.html">[indice generale]</A>
<A HREF="a26.html">[violazione GPL]</A>
<A HREF="a2504.html">[licenze]</A>
<A HREF="a2505.html">[indice analitico]</A>
</P>
</BODY>
</HTML>
|