Yellow Pages 2 : De client zijde
ArticleCategory:
System Administration
AuthorImage:
TranslationInfo:
Original in fr Frédéric
Raynal
fr to en Jo
Simons
en to en:Lorne Bailey
en to nl: HJ Heins
AboutTheAuthor:
Frédéric
Raynal schrijft een these over informatisering aan de INRIA. Hij houdt van lezen (zowel Tolkien
als Balzac) en van luisteren naar muziek (van Mozart tot Philip Glass en
van Led Zeppelin tot Massive Attack via Björk en Boris Vian,
maar daarbij vermijdt hij rap, techno en andere soorten lawaai
;-)
Abstract:
Het vorige artikel was een inleiding in het basisconcept achter
yellow pages (YP). In dit artikel zullen we zien hoe je de
client moet configureren, een praktisch voorbeeld laat zien hoe de
client werkt en er zal een presentatie van de verschillende gereedschappen
gegeven worden. Tenslotte zullen we wat meer vertellen over NIS+.
ArticleIllustration:
ArticleBody:
Inleiding
De client kant van de service die gekoppeld is met yellow pages is
in feite gebaseerd op de ypbind daemon:
deze stuurt de aanvraag naar de YP server. We zullen eerst uitleggen hoe het
werkt en hoe je hem kunt configureren. Daarna zullen we zien hoe het NIS
protocol werkt. Het laatste deel van het artikel wordt gebruikt om de
verschillende gereedschappen voor YP (yp-tools) die de client tot
z'n beschikking heeft.
De NIS client configureren
Het enige dat je hoeft te doen om een NIS client te draaien op een machine
is het starten van de ypbind daemon.
ypbind
ypbind legt een verbinding tussen
de client en de NIS server. Deze link is zichtbaar in de directory
/var/yp/binding1 in een bestand
dat meestal domainname.version heet. Op het moment is versie 2 de enige versie
die ondersteund wordt. Dus, als mijn NIS domain naam "messiah" is, dan is de
naam van het bestand messiah.2
Het programma ypbind
is van de super gebruiker (root dus), dus het moet zitten in
/sbin, of in /usr/sbin.
Wanneer je ypbind draait, zal
deze op zoek gaan naar z'n instructies in het bestand /etc/yp.conf. Dit bestand heeft de volgende
inhoud:
- domein nisdomein server gastheernaam: de client
zal op zoek gaan naar de gastheernaam voor het domein nisdomein
;
- domein nisdomein zender: de client
zendt op het lokale network op zoek naar het nisdomein
;
- ypserver gastheernaam: de client spreekt de
gastheernaam direct aan voor het lokale domein. In deze
opstelling moet het IP adres van de server terug te vinden zijn
in /etc/hosts.
Als er een fout zit in het configuratiebestand of als het niet bestaat,
zal ypbind een oproep zenden
2 over het lokale netwerk
op zoek naar de NIS server voor het lokale domein.
Enkele eenvoudige tests helpen ons te verifieren dat ypbind goed is geconfigureerd.
- Maak je eigen /etc/yp.conf bestand;
- controleer of portmap
draait (ps aux | grep portmap). Als hij niet draait, dan dienen we
hem alsnog starten. Dit programma koppelt de TCP/IP poorten (of
UDP/IP poorten) aan programma's. Gedurende de initialisatie van
een RPC server, stuurt deze portmap
de poorten waarop hij luistert en het programma nummer dat hij wil
aanspreken. Als een client een RPC aanvraag doet op een gegeven
programma nummer, zal deze eerst verbinding maken met de
portmap om uit te vinden
welke poort hij gebruiken moet om RPC pakketten naar toe te sturen.
Deze uitleg laat zien dat het absoluut noodzakelijk is om
portmap aan te hebben staan
voor ypbind ;
- Maak de directory /var/yp ;
- start ypbind ;
-
Gebruik het commando rpcinfo om er zeker van te zijn dat
ypbind inderdaad werkt:
-
Uitvoering van een "rpc -p localhost" zou je de volgende
informatie moeten geven:
programma |
vers |
proto |
port |
|
100000 |
2 |
tcp |
111 |
portmapper |
100000 |
2 |
udp |
111 |
portmapper |
100007 |
2 |
tcp |
637 |
ypbind |
100007 |
2 |
udp |
639 |
ypbind |
of
programma |
vers |
proto |
port |
|
100000 |
2 |
tcp |
111 |
portmapper |
100000 |
2 |
udp |
111 |
portmapper |
100007 |
2 |
udp |
758 |
ypbind |
100007 |
1 |
udp |
758 |
ypbind |
100007 |
2 |
tcp |
761 |
ypbind |
100007 |
1 |
tcp |
761 |
ypbind |
of je kan het volgende proberen:
-
"rpcinfo -u localhost ypbind" dit zou je het volgende moeten geven:
programma 100007 version 2 ready and waiting |
of
programma 100007 version 1 ready and waiting |
programma 100007 version 2 ready and waiting |
Afhankelijk van de versie van ypbind. De belangrijke informatie
is die over versie 2.
Nu we ypbind aan de praat hebben,
is je machine een NIS client geworden. Dus je kan hem gebruiken om aanvragen
te doen aan je server. Bijvoorbeeld "ypcat passwd.byname", dat zal je
alle wachtwoorden geven, geordend op gebruikersnaam, die aanwezig zijn
in de corresponderende directory.
Laatste details
Enkele bestanden moeten nu nog een klein beetje veranderd worden om YP
wat efficiënter te werk te laten gaan:
- /etc/host.conf: voeg "nis" toe zodat de gastheer wordt opgezocht;
- /etc/passwd: voeg de volgende regel toe:
+::::::
Dit zal alle gebruikers die te vinden zijn in de server directory
verbinden met de client. We kunnen deze authorisaties verfijnen door
gebruik te maken van de + en- symbolen waarmee we toegang kunnen geven
of verbieden tot de client. Om een gast gebruiker te weigeren, moet
je de regel
-guest::::::
toevoegen. De velden die je niet wilt
veranderen moeten leeg blijven. Het is echter mogelijk om meer toe te
voegen:
+me::::::/bin/ksh
De gebruiker "me" zal gebruik maken van ksh in plaats van de standaard
commandoregel (die gedefinieerd is in /etc/passwd van de NIS server).
Een laatste belangrijke opmerking: Ik wil aangeven dat NIS het gebruik
van netgroups uitstekend ondersteunt: 3
+@sysadmins:::::::
zal alle aanvragen van
leden van de netgroep sysadmin toestaan.
- /etc/group (en/of /etc/shadow voor enkele versie van libc) :
zoals in /etc/passwd, moet je zelf toevoegen
+:
Je kan ook wat spelen met groepsauthorisaties door gebruik te maken van + en
-
-
/etc/nsswitch.conf: De Netwerk Services Switch laat ons de volgorde
waarin de informatie moet worden gezocht aangeven, precies zoals met
/etc/host.conf. De keuzes zijn:
nisplus |
lookup via NIS+ ( NIS versie 3, een beveiligde versie
van NIS) |
nis |
lookup via NIS (NIS versie 2, alias YPs |
dns |
lookup via een DNS (Domain Name Server) |
files |
lookup in de lokale bestanden |
db |
lookup in de database /var/db |
Na ieder lookup actie, kan je een commando van de
volgende vorm opgeven
`[' ( `!'? STATUS `=' ACTION )+ `]'
waar:
- STATUS => "success" of "notfound" of "unavail" of
"tryagain"
- ACTION => "return" of "continue"
Afhankelijk van de versie van libc die gebruikt wordt, zijn de lookups
niet hetzelfde. De schaduw wachtwoorden bijvoorbeeld worden niet beheerd
met libc5. De ondersteunde services op een machine gebruiken een bibliotheek
die /lib/libnss_SERVICE.so.X heet. Zie voor meer informatie over deze service
ook de man pagina's over nsswitch.conf.
De schadow wachtwoorden op NIS worden alleen ondersteund met
with glibc2.x. Je moet onthouden dat ze gespecificeerd moeten
worden in nsswitch.conf.
Het NIS protocol
Nu onze NIS client helemaal operationeel is, zullen we zien hoe
hij de informatie die hij nodig heeft verkrijgt.
Zodra een client informatie nodig heeft die in een directory van de
YP zit, begint hij met zoeken naar een NIS server. Om er een te vinden,
start hij een TCP connectie naar de lokale
ypbind. De client vertelt hem bij welk domein hij hoort en
ypbind begint te zenden met behulp
van de functie RPC YPPROC_DOMAIN_NOACK. Alleen NIS servers die dit domein
beheren antwoorden hierop met een ACK. De anderen blijven stil.
ypbind stuurt de client het
resultaat van de opzoekactie (succes of falen) en , als hij deze heeft,
het adres van de eerste YP server die antwoordde. De client kan nu de
server aanspreken met zijn verzoek door het domain, de directory en de
sleutel te specificeren.
Dit protocol is vrij traag omdat het TCP connecties gebruikt. Om
het nog erger te maken, gebruikt het ook nog eens vele sockets. Om deze
problemen te vermijden, wacht ypbind
niet op een client voordat hij begint met het zoeken van servers. Eigenlijk
beheert hij zelfs een lijst met servers voor ieder domein in het bestand
/var/yp/binding/<domainename>.<version> en hij controleert
regelmatig of ze nog goed werken.
yp-gereedschappen
Deze sectie geeft kort enkele gereedschappen van het yp-tools
pakket. Om hier meer over te leren, kan je een zeer gedetailleerde
man pagina voor ieder van deze instructies vinden ;-P
- domainname: geeft of herstelt (afhankelijk van de optie) de
NIS domein naam;
- ypcat: laat de waardes van alle aanwezige sleutels in de NIS
directory zien;
- ypmatch: laat de waarde van een of meer sleutels die in de NIS
directory aanwezig zijn zien;
- ypset: specificeert welke NIS server ypbind gebruikt;
- ypwhich: geeft de naam van de NIS server. Met -m als argument,
gevolgd door een directory naam, geeft hij de naam van de
hoofddirectory.
- yppoll: neemt een map als argument en retourneert de domein naam
van de hoofdserver.
Enkele woorden over NIS+
Tot nu toe hebben we niet gesproken over een variant van NIS. In een
netwerk is het gebruik van NIS een groot gevaar voor de veiligheid. Als
een van de NIS servers bijvoorbeeld niet goed beschermd is en een persoon
met kwade bedoelingen daar achter komt, kan het volgende gebeuren:
- De NIS domein naam
- Het IP adres van een NIS client
het wordt zeer eenvoudig om het IP adres van deze machine (laten we doen alsof het deze
machine betreft) te spoofen en een ypcat passwd
te sturen om de wachtwoord lijst zeer eenvoudig in handen te krijgen. :-(
NIS+ levert een extra veiligheidslaag door een authenticatie protocol
gebaseerd op de uitwisseling van sleutels te integreren, bovendien staat
dit gegevensversleuteling toe.
De informatie wordt bewaard in tabellen die in verschillende directories
zitten. Iedere kolom van een tabel heeft een header die bijvoorbeeld specificeert
of de gegevens "hoodletter gevoelig" zijn, in binair formaat staan enz...
De hierboven genoemde structuur laat je op een eenvoudige manier de toegangsrechten
op directories, tabellen en ook de kolommen in de tabellen beheren. Dit betekent
dat het mogelijk is om de toegang tot de wachtwoorden tabel te verbieden voor iedere
gebruiker die niet geauthoriseerd is op de NIS+ server. Maar het staat wel alle
geauthoriseerde gebruikers toegang tot de volledige wachtwoorden tabel toe, behalve
het veld "passwd". Alleen de eigenaar van het "passwd" veld kan dat veld ophalen.
Er zijn 4 veiligheidsniveau's:
- Nobody: de gebruiker wordt niet geauthoriseerd;
- Owner: de gebruiker wordt geauthoriseerd als de eigenaar;
- Group: De gebruiker wordt geauthoriseerd en behoort tot een groep die
toegang heeft tot dit object;
- World: De gebruiker wordt geauthoriseerd, maar hij is niet de eigenaar
en hij behoort niet tot een groep die toegang heeft tot dit object.
In deze configuratie is root een van de vele gebruikers ... temninste,
bijna ;-). Als hij niet de correcte toegangsrechten heeft, kan hij de wachtwoorden
van de andere gebruikers niet meer zien. Dus dan zou hij niet meer in kunnen loggen
als een andere gebruiker...maar, hij kan nog steeds heel eenvoudig een
su uitvoeren :).
De gegevens die rondgaan over het netwerk zijn niet gecodeerd, behalve
de wachtwoorden: geen enkel wachtwoord wordt als standaard tekst over het
netwerk verzonden.
NIS+ is een krachtig gereedschap... maar het is lastig op te zetten. Thorsten
Kuduk schrijft het volgende (hij werkt aan NIS, NIS+, NIS-HOWTO ... dus hij weet
waar hij het over heeft ;-):
"De keuze tussen NIS en NIS+ is eenvoudig te zien: gebruik NIS zolang je
geen bijzondere veiligheidseisen stelt. NIS+ is veel lastiger de beheren
(vooral aan de server kant)"
Conclusie
We hebben geleerd hoe je een nieuwe machine toevoegt aan een bestaand netwerk
met een draaiende NIS server. In het volgende artikel zullen we gaan zien hoe
de server geconfigureerd moet worden en hoe hij werkt.
Voetnoten
- ... var/yp/binding1
- De exacte locaties van de bestanden worden niet vaak gespecificeerd
daar dit kan verschillen per distributie.
Als je bijvoorbeeld een ypbind
daemon start tijdens het opstarten: /etc/init.d/nis, /sbin/init.d/ypclient,
/etc/rc.d/init.d/ypbind, /etc/rc.local
- ... broadcast2
- Dit betekent dat de boodschap wordt verzonden over het gehele subnet
zonder een specifiek doeladres (type X.Y.0.0)
- ... netgroup3
- Het bestand /etc/netgroup definieert de groepen bestaande uit
drie delen (gastheer, gebruiker, domein) die dienen om de toestemmingen
te verifiëren tijdens het gebruik van commando's op andere machines
(zoals inloggen op afstand, commandoregels of mounten). Bekijk de
man pagina's voor meer details.