7.4. NIS – deling af adgangskodefiler mellem Unix-maskiner

Er der flere maskiner i lokalnettet, og har brugerne brug for adgang til dem alle (eller nogle af dem), er NIS en god løsning.

NIS, The Network Information System, sørger for at flere maskiner kan dele oplysninger om brugere, grupper og endda også maskiner og en del andre oplysninger.

NIS blev tidligere kaldt "Yellow Pages", forkortet "yp", efter telefonbøgernes gule sider, men det måtte ændres, da Yellow Pages er et registreret varemærke ejet af British Telecom. Men de fleste programmer i NIS starter stadig med yp.

NIS arbejder, ligesom DNS, med et domænenavn. Men disse to domænenavne har intet med hinanden at gøre. I det følgende har vi to Red Hat-maskiner i (DNS-)domænet strangeparty.dk. De skal dele informationer om kodeord mv. i (NIS-)domænet spo.

Serveren hedder "supernaut". Klienten hedder "omnitec".

På serveren skal pakken "ypserv" installeres:

[root@supernaut /home/kwv]#  rpm -Uvh /cdrom/RPMS/ypserv-1.3.9-1.alpha.rpm 
ypserv                 ##################################################

NIS-domænet skal være "spo". Det sættes med kommandoen domainname.

[root@supernaut /home/kwv]# domainname spo

Yp-serveren skal nu startes:

[root@supernaut /home/kwv]#  /etc/rc.d/init.d/ypserv start
Starting YP server services:                               [  OK  ]

Det kan betale sig at gennemse, og måske tilrette, filen /var/yp/Makefile. Du bør nok ændre MINUID og MINGID, så disse starter UID (bruger-ID) og GID (grupper-ID) ved 300, og ikke ved 500 som er standard i Red Hat. Du kan også udkommentere linjen "GSHADOW = $(YPPWDDIR)/gshadow" og indsætte "MERGE_group=false".

Herefter initieres NIS-serveren:

[root@supernaut /home/kwv]# /usr/lib/yp/ypinit -m

At this point, we have to construct a list of the hosts which will run NIS
servers.  supernaut.strangeparty.dk 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:  supernaut.strangeparty.dk
        next host to add:  
The current list of NIS servers looks like this:

supernaut.strangeparty.dk

Is this correct?  [y/n: y]  
We need some  minutes to build the databases...
Building /var/yp/spo/ypservers...
Running /var/yp/Makefile...
gmake[1]: Entering directory `/var/yp/spo'
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating rpc.byname...
Updating rpc.bynumber...
Updating services.byname...
Updating netid.byname...
Updating protocols.bynumber...
Updating protocols.byname...
Updating mail.aliases...
gmake[1]: Leaving directory `/var/yp/spo'
[root@supernaut /home/kwv]# 

Med ypbind installeret på serveren, kan man nu kontrollere de services der stilles til rådighed. Ypbind skal startes først:

[root@supernaut /home/kwv]# /etc/rc.d/init.d/ypbind start

Binding to the NIS domain...                               [  OK  ]
Listening for an NIS domain server: supernaut.strangeparty.dk

Kommandoen ypcat -x viser de tjenester serveren stiller til rådighed:

[root@supernaut /home/kwv]# ypcat -x

Use "ethers"    for map "ethers.byname"
Use "aliases"   for map "mail.aliases"
Use "services"  for map "services.byname"
Use "protocols" for map "protocols.bynumber"
Use "hosts"     for map "hosts.byname"
Use "networks"  for map "networks.byaddr"
Use "group"     for map "group.byname"
Use "passwd"    for map "passwd.byname"

Det interessante i vores lille netværk er passwd og group. Yderligere kan aliases og mail.aliases være smart til at styre lokal e-post.

Men hvad indeholder de så?

[root@supernaut /home/kwv]# ypcat passwd
hanne:BmXEt39P1By2I:301:300:Hanne:/supernaut/hanne:/bin/bash
kwv:/g10xcDPwwaA2:405:400:Kristian Vilmann:/home/kwv:/bin/bash
[root@supernaut /home/kwv]# ypcat group
hjemme:x:300:
teknik:x:400:

På klienten skal ypbind selvfølgelig være installeret. Og den skal startes:

[root@omnitech /root]# rpm -q ypbind
ypbind-3.3-24
[root@omnitech /root]# domainname spo
[root@omnitech /root]# /etc/rc.d/init.d/ypbind start
Binding to the NIS domain...                               [  OK  ]
Listening for an NIS domain server: .supernaut.strangeparty.dk

Hvis klienten har problemer med at finde NIS-serveren, eller der er flere NIS-domæner i netværket, kan man sætte sine præferencer i filen /etc/yp.conf.

Lad os se om det ser rigtigt ud. ypwhich fortæller hvilken NIS-server klienten er bundet til:

[root@omnitech /root]# ypwhich
supernaut.strangeparty.dk
[root@omnitech /root]# ypcat passwd
hanne:$1$d5dYr98N$/k.0aNyvq/BMX0UlMoyGZ1:301:300:Hanne:/home/hanne:/bin/bash
kwv:$1$I1/h6uyj$Spk11r0bYTyo9r.sc7nQ..:405:400:Kristian Vilmann:/home/kwv:/bin/bash

Det ser fint ud. Vi lader nu en bruger prøve telnet fra serveren til klienten. For en god ordens skyld kontrolleres at brugeren hanne ikke optræder i filen /etc/passwd:

[root@omnitech /root]# grep hanne /etc/passwd

Her var der intet svar (nul linjer).

[hanne@supernaut ~]# telnet omnitec
Trying 192.168.10.126...
Connected to omnitec.strangeparty.dk.
Escape character is '^]'.

Red Hat Linux release 6.1 (Cartman)
Kernel 2.2.12-20 on an i586
login: hanne
Password: 
Last login: Wed Mar 29 13:42:12 from supernaut.strangeparty.dk
[hanne@omnitec ~]$ id
uid=301(hanne) gid=300(hjemme) groups=300(hjemme)
[hanne@omnitec ~]$ pwd
/supernaut/hanne
[hanne@omnitec ~]$ whoami
hanne
[hanne@omnitec ~]$ ls -al
total 142
drwx------   2 hanne    hjemme       1024 Mar 29 13:13 WebDB/
-rw-r--r--   1 hanne    hjemme      34862 Mar 12 23:24 headbanging.jpg
-rw-r--r--   1 hanne    hjemme      59995 Oct 18 22:16 insoundout.gif
drwxr-xr-x   4 hanne    hjemme       1024 Mar 12 00:10 objectsystem1.0/
-rw-r--r--   1 hanne    hjemme      43971 Mar 21 19:31 sslug.httpd.conf

Det ser rigtigt ud. Læg mærke til at Hannes hjemmekatalog er NFS-monteres fra serveren, og at hun derfor har samme hjemmekatalog på begge maskiner.

NIS tilbyder en række værktøjer til manipulering af brugerinformationerne på NIS-serveren: yppasswd, ypchfn og ypchsh.

De fungerer på samme måde som de tilsvarende kommandoer uden yp-præfikset. Hanne vil gerne skifte sit kodeord:

[hanne@omnitec ~]$ yppasswd
Changing NIS account information for hanne on supernaut.strangeparty.dk.
Please enter old password: GAMMELKODE
Changing NIS password for hanne on supernaut.strangeparty.dk.
Please enter new password: NYKODE
Please retype new password: NYKODE

The NIS password has been changed on supernaut.strangeparty.dk.

Lad os se om det virker:

[hanne@omnitec ~]$ telnet supernaut
Trying 192.168.10.1...
Connected to supernaut.strangeparty.dk.
Escape character is '^]'.

Red Hat Linux release 6.0 (Hedwig)
Kernel 2.2.14 on an alpha
login: hanne
Password: NYKODE
Last login: Wed Mar 29 13:02:19 from omnitec.strangeparty.dk

Fint. Kodeordet er ændret på serveren. Men hvad med klienten?

[hanne@supernaut ~]$ telnet omnitec
Trying 192.168.10.126...
Connected to omnitec.strangeparty.dk.
Escape character is '^]'.

Red Hat Linux release 6.1 (Cartman)
Kernel 2.2.12-20 on an i586
login: hanne
Password: NYKODE
Last login: Wed Mar 29 13:46:21 from supernaut.strangeparty.dk

Hvis man som administrator ændrer i adgangskodefilen, opretter eller sletter en bruger, eller ændrer andet der påvirker NIS, skal man sørge for at NIS-databaserne er konsistente efter ændringerne:

[root@omnitech /root]# cd /var/yp
[root@omnitech /root]# make

Og så skal vi lige sørge for at det starter næste gang maskinerne genstartes: På serveren skal ypserv, yppasswdd og ypbind startes i runlevel 3, 4 og 5.

[root@supernaut /home/kwv]# /sbin/chkconfig --list | grep yp
ypbind 0:off 1:off 2:off 3:on 4:on 5:on 6:off
yppasswdd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
ypserv 0:off 1:off 2:off 3:off 4:off 5:off 6:off

ypserv starter ikke automatisk. Det får vi den til:

[root@supernaut /home/kwv]# /sbin/chkconfig ypserv on
[root@supernaut /home/kwv]# /sbin/chkconfig --list | grep yp
ypbind 0:off 1:off 2:off 3:on 4:on 5:on 6:off
yppasswdd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
ypserv 0:off 1:off 2:off 3:on 4:on 5:on 6:off

NIS-domænet skal sættes, både på server og klient. Det gøres i /etc/sysconfig/network:

nisdomain=spo

På klienten skal ypbind også startes ved boot:

[root@supernaut /home/kwv]# /sbin/chkconfig --list ypbind
ypbind 0:off 1:off 2:off 3:on 4:on 5:on 6:off

NIS kan en del mere end beskrevet her. Men dette er normalt det, der er størst behov for.

For mere information: Linux Network Administrators Guide, NIS-HOWTO, Managing NFS & NIS, O'Reilly & Associates, Manualsiderne fra ypserv- og ypbind-pakkerne. Find dem således:

[hanne@supernaut ~]$ rpm -ql `rpm -qa | grep ^yp` |grep man