home *** CD-ROM | disk | FTP | other *** search
- The Linux NIS(YP)/NIS+/NYS HOWTO
- Andrea Dell'Amico, Mitchum DSouza, Erwin Embsen, Peter Eriksson
- v0.5, 24 January 1995
-
- 1. Glossary of Terms
-
- In this document a lot of acronyms are used. Here are the most
- important acronyms and a brief explanation:
-
- DBM
- DataBase Management, a library of functions which maintain key-
- content pairs in a data base.
-
- DLL
- Dynamically Linked Library, a library linked to an executable
- program at run-time.
-
- domainname
- A name "key" that is used by NIS clients to be able to locate a
- suitable NIS server that serves that domainname key. Please note
- that this does not necessarily have anything at all to do with
- the DNS "domain" (machine name) of the machine(s).
-
- FTP
- File Transfer Protocol, a protocol used to transfer files
- between two computers.
-
- libnsl
- Name services library, a library of name service calls
- (getpwnam, getservbyname, etc...) on SVR4 Unixes.
-
- libsocket
- Socket services library, a library for the socket service calls
- (socket, bind, listen, etc...) on SVR4 Unixes.
-
- NIS
- Network Information Service, a service that provides
- information, that has to be known throughout the network, to all
- machines on the network. There is support for NIS in Linux's
- standard libc library, which in the following text is referred
- to as "traditional NIS".
-
- NIS+
- Network Information Service (Plus :-), essentially NIS on
- steroids. NIS+ is designed by Sun Microsystems Inc. as a
- replacement for NIS with better security and better handling of
- _large_ installations.
-
- NYS
- This is the name of a project and stands for NIS+, YP and Switch
- and is managed by Peter Eriksson <pen@lysator.liu.se>. It
- contains among other things a complete reimplementation of the
- NIS (=YP) code that uses the Name Services Switch functionality
- of the NYS library.
-
- RPC
- Remote Procedure Call. RPC routines allow C programs to make
- procedure calls on other machines across the network. When
- people talk about RPC they most often mean the SunRPC variant.
-
- YP Yellow Pages(tm), a registered trademark in the UK of British
- Telecom plc.
-
- TCP-IP
- Transmission Control Protocol/Internet Protocol. It's a data
- communication protocol often used on Unix machines.
-
- 1.1. Some General Information
-
- The next three lines are quoted from the Sun(tm) System & Network
- Administration Manual:
-
- "NIS was formerly known as Sun Yellow Pages (YP) but
- the name Yellow Pages(tm) is a registered trademark
- in the United Kingdom of British Telecom plc and may
- not be used without permission."
-
- NIS stands for Network Information Service. It's purpose is to provide
- information, that has to be known throughout the network, to all
- machines on the network. Information likely to be distributed by NIS
- is:
-
- ╖ login names/passwords/home directories (/etc/passwd)
-
- ╖ group information (/etc/group)
-
- So, for example, if your password entry is recorded in the NIS passwd
- database, you will be able to login on all machines on the net which
- have the NIS client programs running.
-
- Sun is a trademark of Sun Microsystems, Inc. licensed to SunSoft, Inc.
-
- 2. Introduction
-
- More and more, Linux machines are installed as part of a network of
- computers. To simplify network administration, most networks (mostly
- Sun-based networks) run the Network Information Service. Linux
- machines can take full advantage of existing NIS service or provide
- NIS service themselves. It can also (with the NYS library) act as a
- limited NIS+ client.
-
- This document tries to answer questions about setting up NIS(YP) on
- your Linux machine. It does not talk about how to set up NIS+. Don't
- forget to read section 5.1, The RPC Portmapper.
-
- 2.1. New versions of this document
-
- New versions of this document will be posted periodically (about every
- month) to the newsgroups comp.os.linux.announce and
- comp.os.linux.misc. The document is archived on a number of Linux FTP
- sites, including sunsite.unc.edu in /pub/Linux/docs/HOWTO.
-
- 2.2. Disclaimer
-
- Although this document has been put together to the best of our
- knowledge it may, and probably does contain errors. Please read any
- README files that are bundled with any of the various pieces of
- software described in this document for more detailed and accurate
- information. We will attempt to keep this document as error free as
- possible.
-
- 2.3. Feedback
-
- If you have any comments, questions or suggestions please email them
- to Erwin Embsen <erwin@nioz.nl>. Definitely contact him if you find
- errors or obvious omissions.
-
- 2.4. Acknowledgements
-
- We would like to thank all the people who have contributed (directly
- or indirectly) to this document. In alphabetical order:
-
- Andrea Dell'Amico <adellam@di.unipi.it>
- Mitchum DSouza <Mitch.Dsouza@Dubai.Sun.COM>
- Erwin Embsen <erwin@nioz.nl>
- Byron A Jeff <byron@cc.gatech.edu>
- Peter Eriksson <pen@lysator.liu.se>
-
- Theo de Raadt <deraadt@fsa.ca> is responsible for the original yp-
- clients code. Swen Thuemmler <swen@uni-paderborn.de> ported the yp-
- clients code to Linux and also ported the yp-routines in libc (again
- based on Theo's work).
-
- 3. NIS or NIS+ ?
-
- The choice between NIS and NIS+ is easy - use NIS if you don't have to
- use NIS+ or have severe security needs. NIS+ is _much_ more
- problematic to administer (it's pretty easy to handle on the client
- side, but the server side is horrible). Another problem is that the
- support for NIS+ under Linux is still under developement - one major
- thing it still lacks is support for data encryption/authentication
- which is _the_ major thing why anyone would want to use NIS+...
-
- 3.1. Traditional NIS or the NYS library ?
-
- The choice between Traditional NIS or the NIS code in the NYS library
- is a choice between laziness and maturity vs. flexibility and love of
- adventure.
-
- The "traditional NIS" code is in the standard C library and has been
- around longer and sometimes suffers from it's age and slight
- inflexibility.
-
- The NIS code in the NYS library, on the other hand requires you either
- to recompile and relink all your programs to the libnsl library, or
- recompile the libc library to include the libnsl code into the libc
- library (or maybe you can go get a precompiled version of libc from
- someone who has already done it).
-
- Another difference is that the traditional NIS code has some support
- for NIS Netgroups, which the NYS code doesn't (yet). On the other hand
- the NYS code allows you to handle Shadow Passwords in a transparent
- way.
-
- 4. How it works
-
- Within a network there must be at least one machine acting as a NIS
- server. You can have multiple NIS servers, each serving different NIS
- "domains" - or you can have cooperating NIS servers, where one is said
- to be the master NIS server, and all the other are so-called slave NIS
- servers (for a certain NIS "domain", that is!) - or you can have a mix
- of them...
-
- Slave servers only have copies of the NIS databases and receive these
- copies from the master NIS server whenever changes are made to the
- master's databases. Depending on the number of machines in your
- network and the reliability of your network, you might decide to
- install one or more slave servers. Whenever a NIS server goes down or
- is too slow in responding to requests, a NIS client connected to that
- server will try to find one that is up or quicker.
-
- NIS databases are in so-called DBM format, derived from ASCII
- databases. For example, the files /etc/passwd and /etc/group can be
- directly converted to DBM format using ASCII-to-DBM translation
- software ("dbload", it's included with the server software). The
- master NIS server should have both, the ASCII databases and the DBM
- databases.
-
- Slave servers will be notified of any change to the NIS maps, (via
- the "yppush" program), and automatically retrieve the necessary
- changes in order to synchronize their databases. NIS clients does not
- need to do this since they always talks to the NIS server to read the
- information stored in it's DBM databases.
-
- The author of the YP clients for linux has informed us that the newest
- ypbind (from yp-clients.tar.gz) is able to get the server from a
- configuration file - thus no need to broadcast (which is insecure -
- due to the fact that anyone may install a NIS server and answer the
- broadcast queries...)
-
- 5. What do you need to set up NIS?
-
- 5.1. The RPC Portmapper
-
- To run any of the software mentioned below you will need to run the
- program /usr/sbin/rpc.portmap. Some Linux distributions already have
- the code in /etc/rc.d/rc.inet2 to start up this daemon. All you have
- to do is comment it out and reboot your Linux machine to activate it.
-
- The RPC portmapper (portmap(8c)) is a server that converts RPC program
- numbers into TCP/IP (or UDP/IP) protocol port numbers. It must be
- running in order to make RPC calls (which is what the NIS client
- software does) to RPC servers (like a NIS server) on that machine.
- When an RPC server is started, it will tell portmap what port number
- it is listening to, and what RPC program numbers it is prepared to
- serve. When a client wishes to make an RPC call to a given program
- number, it will first contact portmap on the server machine to
- determine the port number where RPC packets should be sent.
-
- Normally, standard RPC servers are started by inetd(8C), so portmap
- must be started before inetd is invoked.
-
- 5.2. Determine whether you are a Server, Slave or Client.
-
- To answer this question you have to consider two cases:
-
- 1. Your machine is going to be part of a network with existing NIS
- servers
-
- 2. You do not have any NIS servers in the network yet
-
- In the first case, you only need the client programs (ypbind, ypwhich,
- ypcat, yppoll, ypmatch). The most important program is ypbind. This
- program must be running at all times, that is, it should always appear
- in the list of processes. It's a so-called daemon process and needs to
- be started from the system's startup file (eg. /etc/rc.local). As
- soon as ypbind is running, your system has become a NIS client.
-
- In the second case, if you don't have NIS servers, then you will also
- need a NIS server program (usually called ypserv). Section 6 describes
- how to set up a NIS server on your Linux machine using the "ypserv"
- implementation by Peter Eriksson (<pen@lysator.liu.se>). Note that
- this implementation does NOT support the master-slave concept talked
- about in section 3. Using this software, all your NIS servers will be
- master servers. There is also another free NIS server available,
- called "yps", written by Tobias Reber in Germany which does support
- the master-slave concept, but has other limitations.
-
- 5.3. The Software
-
- The system library "/usr/lib/libc.a" (version 4.4.2 and better) or the
- shared library "/usr/lib/libc.sa" and its related DLL contain all
- necessary system calls to succesfully compile the NIS client and
- server software.
-
- Some people reported that NIS only works with "/usr/lib/libc.a"
- version 4.5.21 and better so if you want to play it safe don't user
- older libc's. The NIS client software can be obtained from:
-
- Site Directory File Name
-
- ftp.uni-paderborn.de /pcsoft2/linux/local/yp yp-clients.tar.gz
- ftp.funet.fi /pub/OS/Linux/BETA/NYS/clients yp-clients.tar.gz
- ftp.lysator.liu.se /pub/NYS/clients yp-clients.tar.gz
- sunsite.unc.edu /pub/Linux/system/Network/admin yp-clients.tar.gz
-
- Once you obtained the software, please follow the instructions which
- come with the software.
-
- 5.4. Setting up a NIS Client using Traditional NIS
-
- Assuming you have succesfully compiled the software you are now ready
- to install the software. A suitable place for the ypbind daemon is the
- directory /usr/sbin.
-
- You'll need to do this as root of course. The other binaries (ypwhich,
- ypcat, yppoll, ypmatch) should go in a directory accessible by all
- users, for example /usr/etc or /usr/local/bin. It might be a good
- idea to test ypbind before incorporating it in /etc/rc.d/rc.inet2.
-
- To test ypbind do the following:
-
- ╖ Make sure you have your domain name set. If it is not set then
- issue the command:
-
- /bin/domainname-yp nis.domain
-
- where nis.domain should be some string, _NOT_ normally associated with
- the domain name of your machine! The reason for this is that it makes
- it a little harder for external crackers to retreive the password
- database from your NIS servers. If you don't know what the NIS domain
- name is on your network, ask your system/network administrator.
-
- ╖ Start up "/usr/sbin/rpc.portmap" if it is not already running.
-
- ╖ Create the directory "/var/yp" if it does not exist.
-
- ╖ Start up "/usr/sbin/ypbind"
-
- ╖ Use the command "rpcinfo -p localhost" to check if ypbind was able
- to register its service with the portmapper. The rpcinfo should
- produce something like:
-
- program vers proto port
- 100000 2 tcp 111 portmapper
- 100000 2 udp 111 portmapper
- 100007 2 udp 637 ypbind
- 100007 2 tcp 639 ypbind
- 300019 1 udp 660
-
- ╖ You may also run "rpcinfo -u localhost ypbind". This command should
- produce something like:
-
- program 100007 version 2 ready and waiting
-
- Finally, do not forget that for host lookups you must set (or add)
- "nis" to the lookup order line in your /etc/host.conf file. Please
- read the manpage "resolv+.8" for more details.
-
- At this point you should be able to use NIS client programs like
- ypcat, etc... For example, "ypcat passwd" will give you the entire
- NIS password database.
-
- IMPORTANT: If you skipped the test procedure then make sure you have
- set the domain name, and created the directory:
-
- /var/yp
-
- This directory MUST exist for ypbind to start up succesfully.
-
- If the test worked you may now want to change the files /etc/rc.d/rc.M
- and /etc/rc.d/rc.inet2 on your system so that ypbind will be started
- up at boot time and your system will act as a NIS client. Edit the
- file /etc/rc.d/rc.M and look for the commands which set the domain
- name. Change the domain name into the name of your domain. Also, edit
- the file /etc/rc.d/rc.inet2, comment out the lines which start up the
- rpc.portmap daemon, and add the following lines just after the place
- where rpc.portmap is started:
-
- #
- # Start the ypbind daemon
- #
- if [ -f ${NET}/ypbind -a -d /var/yp ]; then
- echo -n " ypbind"
- ${NET}/ypbind
- fi
-
- Unlike Sun's implementation of NIS you do not need to edit /etc/passwd
- and /etc/group to take advantage of NIS. Sun's implementation needs a
- line "+:*:0:0:::" in /etc/passwd and a line "+:*:0:" in /etc/group to
- tell NIS to search the NIS password and group databases.
-
- IMPORTANT: Note that the command finger will report "no such user"
- messages if you do not add the line "+:*:0:0:::" to /etc/passwd.
- Putting the line "+:*:0:0:::" back in /etc/passwd fixes finger.
-
- Well, that's it. Reboot the machine and watch the boot messages to see
- if ypbind is actually started.
-
- IMPORTANT: Note that the netgroup feature is implemented starting
- from libc 4.5.26. Netgroups allow access control for every machine and
- every user in the NIS domain, and they require an entry like:
-
- +@this_machine_users
-
- in /etc/passwd. But if you have a version of libc erlier than 4.5.26,
- every user in the NIS password database can access your linux
- machine if you run "ypbind".
-
- 6. What you need to set up NYS?
-
- 6.1. Determine whether you are a Server, Slave or Client.
-
- To answer this question you have to consider two cases:
-
- ╖ Your machine is going to be part of a network with existing NIS
- servers
-
- ╖ You do not have any NIS servers in the network yet
-
- In the first case you have two choices:
-
- ╖ Either you relink all client and daemon programs with the NYS
- library libnsl.so (or statically link them with libnsl.a). This
- means adding the line:
-
- LIBS=-lnsl
-
- to your Makefile signifing you want to link the Network Services
- Library. Basically all network deamons and the "login" program need to
- be recompiled.
-
- ╖ Or you can recompile the standard C library libc to include the NYS
- client library functions into the normal libc library, and then
- relink all statically linked programs (the dynamically linked
- programs automatically get the new version of libc). See section
- 6.5 below for more information about this option.
- Similarly like in the case of traditional NIS, if you don't have NIS
- servers, then you will also need a NIS server program (usually called
- ypserv) and you have to designate one of the machines in your network
- as a master NIS server. Again, you might want to set up at least one
- slave server as well.
-
- 6.2. The Software
-
- You need to retrieve and compile the NYS services library libnsl.so.
- If you don't have the DLL tools installed you may retrieve a
- precompiled shared, static and stub library from the same site
- mentioned below. Note, however, that the precompiled version may be
- (and probably is) older than the latest source code release.
-
- The NYS library (source and precompiled version) can be obtained
- from:
-
- Site Directory File Name
-
- ftp.lysator.liu.se /pub/NYS/libs nys-0.27.4.tar.gz
- ftp.lysator.liu.se /pub/NYS/binaries/lib libnsl.so.1.0.a26
-
- ftp.funet.fi /pub/OS/Linux/BETA/NYS/libs nys-0.27.4.tar.gz
- ftp.funet.fi /pub/OS/Linux/BETA/NYS/lib libnsl.so.1.0.a26
-
- Precompiled "login" and "su" programs may also be fetched from
-
- Site Directory File Name
-
- ftp.lysator.liu.se /pub/NYS/binaries/bin login
- ftp.lysator.liu.se /pub/NYS/binaries/bin su
-
- ftp.funet.fi /pub/OS/Linux/BETA/NYS/bin login
- ftp.funet.fi /pub/OS/Linux/BETA/NYS/bin su
-
- Similarly, example configuration files may be retrieved from
-
- Site Directory File Name
-
- ftp.lysator.liu.se /pub/NYS/binaries/etc *conf
- ftp.funet.fi /pub/OS/Linux/BETA/NYS/etc *conf
-
- For compilation of the nsl library, please follow the instructions
- which come with the software. If you wish to compile the shared DLL
- library you must have the DLL tools installed in the standard place
- (/usr/dll). The DLL tools (the package tools-2.11.tar.gz or later) can
- be obtained from many sites.
-
- 6.3. Setting up a NYS Client using NYS
-
- Unlike traditional NIS, there is no setting up required for a NIS
- client. All that is required is that the NIS configuration file
- (/etc/yp.conf) points to the correct server(s) for its information.
- Also, the Name Services Switch configuration file (/etc/nsswitch.conf)
- must be correctly set up.
-
- Please refer to the examples provided with the source code.
-
- 6.4. The nsswitch.conf File
-
- The Network Services switch file /etc/nsswitch.conf determines the
- order of lookups performed when a certain piece of information is
- requested, just like the /etc/host.conf file which determines the way
- host lookups are performed. Again, look at at the example file
- provided in the source distribution. For example, the line
-
- hosts: files nis dns
-
- specifies that host lookup functions should first look in the local
- /etc/hosts file, followed by a NIS lookup and finally thru the domain
- name service (/etc/resolv.conf and named), at which point if no match
- is found an error is returned.
-
- 6.5. Making your binaries NYS aware
-
- Instead of relinking each binary with the NYS library (libnsl.so), a
- cleaner solution has been achieved by providing the user with the
- ability to build a NYS aware libc. This means all you need to do is
- recompile a new libc and replace your existing /lib/libc.so.x.y.z for
- all (non-static compiled) programs to be NYS aware.
-
- This merge also gives you the advantage over the traditional NIS
- implementation in the linux libc in that it allows transparent shadow
- passwords support (via the /etc/nisswitch.conf file).
-
- Follow the simple steps below to rebuild a NYS aware libc.
-
- ╖ Make sure you have the latest DLL tools installed. Refer to the the
- GCC-FAQ for more info on where to get this.
-
- ╖ Get the latest libc sources. (again see GCC-FAQ)
-
- ╖ Get the latest nys sources from
-
- ftp.lysator.liu.se:/pub/NYS/libs
-
- and extract it under this libc-linux source directory. The current
- NYS distribution is "nys-0.27.4.tar.gz".
-
- ╖ Do the ./configure as before and first answer "n" to the question
-
- Values correct (y/n) [y] ?
-
- Then go thru all the other questions and the last question will now be
-
- Build a NYS libc from nys-0.27 (y default) ?
-
- answer "y" to this.
-
- ╖ Then issue the command
-
- % make
-
- The library generated after compilation is named something like
-
- libc.so.4.5.26
-
- and placed under the directory jump/libc-nys. To install this library
- our advise would be copying it to /lib with a name lexiographically
- greater than the version number it currently has. Just appending the
- letter "a" should do the trick. For example:
-
- % cp jump/libc-nys/libc.so.4.5.26 /lib/libc.so.4.5.26a
-
- Alternatively, append "nys" to it so you can quickly identify it. Now
- run the command
-
- % ldconfig
-
- which will reset your cache to use the new library. The dynamic linker
- strategy may be examined with the command "ldconfig -p".
-
- That's basically it. All your programs should now be NYS aware. Please
- note that usually the program "login" is compiled static and thus
- cannot access the new NYS functions from the NYS aware libc. You must
- either recompile "login" without the -static flag, or else statically
- link it to the libnsl.a library.
-
- 7. Setting up a NIS Server
-
- 7.1. The Server Program ypserv
-
- This document only describes how to set up the "ypserv" NIS server.
- The "yps" server setup is similar, _but_ not exactly the same so
- beware if you try to apply these instructions to "yps"!
-
- The NIS server software can be found on:
-
- Site Directory File Name
-
- ftp.lysator.liu.se /pub/NYS/servers ypserv-0.11.tar.gz
- ftp.funet.fi /pub/OS/Linux/BETA/NYS/servers ypserv-0.11.tar.gz
- mcsun.eu.net /os/linux/BETA/NYS/servers ypserv-0.11.tar.gz
- ftp.univie.ac.at /unix/system/linux/funet/BETA/NYS/servers
- ypserv-0.11.tar.gz
-
- The server setup is the same for both traditional NIS and NYS.
-
- Compile the software to generate the "ypserv", "dbcat" and "dbload"
- programs. Firstly, determine what files you require to be available
- via NIS and then add or remove the appropriate entries to the
- ypMakefile. Install the file ypMakefile into /var/yp as the file
- Makefile.
-
- Now build the DBM files by typing:
-
- % cd /var/yp; make
-
- Make sure the portmapper (rpc.portmap) is running, and start the
- server "ypserv". The command
-
- % rpcinfo -u localhost ypserv
-
- should output something like
-
- program 100004 version 2 ready and waiting
-
- That's it, your server is up and running.
-
- 7.2. The Program yppasswdd
-
- Whenever users change their passwords, the NIS password database and
- probably other NIS databases, which depend on the NIS password
- database, should be updated. The program "yppasswdd" is a server that
- handles password changes and makes sure that the NIS information will
- be updated accordingly. The software for "yppasswdd" can be found on:
-
- Site Directory File Name
-
- ftp.lysator.liu.se /pub/NYS yppasswdd-0.5.tar.gz
- ftp.funet.fi /pub/OS/Linux/BETA/NYS/servers yppasswdd-0.5.tar.gz
-
- Once you obtained the software, please follow the instructions which
- come with the software.
-
- 8. Verifying the NIS/NYS Installation
-
- If everything is fine (as it should be), you should be able to verify
- your installation with a few simple commands. Assuming, for example,
- your passwd file is being supplied by NIS, the command
-
- % ypcat passwd
-
- should give you the contents of your NIS passwd file. The command
-
- % ypmatch userid passwd
-
- (where userid is the login name of an arbitrary user) should give you
- the user's entry in the NIS passwd file. The "ypcat" and "ypmatch"
- programs should be included with your distribution of traditional NIS
- or NYS.
-
- 9. Common Problems and Troubleshooting NIS
-
- Here are some common problems reported by various users:
-
- 1. The libraries for 4.5.19 are broken. NIS won't work with it.
-
- 2. If you upgrade the libraries from 4.5.19 to 4.5.24 then the su
- command breaks. You need to get the su command from the slackware
- 1.2.0 distribution. Incidentally that's where you can get the
- updated libraries.
-
- 3. You could run into trouble with NIS and DNS on the same machine.
- My DNS server occasionally will not bring up NIS. Haven't yet
- tracked down why.
-
- 4. When a NIS server goes down and comes up again ypbind starts
- complaining with messages like:
-
- yp_match: clnt_call:
- RPC: Unable to receive; errno = Connection refused
-
- and logins are refused for those who are registered in the NIS
- database. Try to login as root and if you succeed, then kill ypbind
- and start it up again.
-
- 10. Frequently Asked Questions
-
- Most of your questions should be answered by now. If there are still
- questions unanswered you might want to post a message to
-
- comp.os.linux.help
-
- or contact one of the authors of this HOWTO.
-
-