| Maps service descriptions to service names | ||
| Maps Sun RPC service numbers to RPC service names | ||
| Maps protocol numbers to protocol names | ||
| Maps mail aliases to mail alias names |
You may find support for other files and maps in other NIS packages. These usually contain information for applications not discussed in this book, such as the
For some maps, people commonly use
$ ypcat -x
Use 'passwd' for 'passwd.byname'
Use 'group' for 'group.byname'
Use 'networks' for 'networks.byaddr'
Use 'hosts' for 'hosts.byaddr'
Use 'protocols' for 'protocols.bynumber'
Use 'services' for 'services.byname'
Use 'aliases' for 'mail.aliases'
Use 'ethers' for 'ethers.byname'
The NIS server program is traditionally called ypserv. For an average network, a single server usually suffices; large networks may choose to run several of these on different machines and different segments of the network to relieve the load on the server machines and routers. These servers are synchronized by making one of them the
We have been talking very vaguely about 'networks.' There's a distinctive term in NIS that refers to a collection of all hosts that share part of their system configuration data through NIS: the
NIS domains have a purely administrative function. They are mostly invisible to users, except for the sharing of passwords between all machines in the domain. Therefore, the name given to an NIS domain is relevant only to the administrators. Usually, any name will do, as long as it is different from any other NIS domain name on your local network. For instance, the administrator at the Virtual Brewery may choose to create two NIS domains, one for the Brewery itself, and one for the Winery, which she names
To set and display the NIS domain name of your host, you can use the domainname command. When invoked without any argument, it prints the current NIS domain name; to set the domain name, you must become the superuser:
# domainname brewery
NIS domains determine which NIS server an application will query. For instance, the login program on a host at the Winery should, of course, query only the Winery's NIS server (or one of them, if there are several) for a user's password information, while an application on a Brewery host should stick with the Brewery's server.
One mystery now remains to be solved: how does a client find out which server to connect to? The simplest approach would use a configuration file that names the host on which to find the server. However, this approach is rather inflexible because it doesn't allow clients to use different servers (from the same domain, of course) depending on their availability. Therefore, NIS implementations rely on a special daemon called ypbind to detect a suitable NIS server in their NIS domain. Before performing any NIS queries, an application first finds out from ypbind which server to use.
ypbind probes for servers by broadcasting to the local IP network; the first to respond is assumed to be the fastest one and is used in all subsequent NIS queries. After a certain interval has elapsed, or if the server becomes unavailable, ypbind probes for active servers again.
Dynamic binding is useful only when your network provides more than one NIS server. Dynamic binding also introduces a security problem. ypbind blindly believes whoever answers, whether it be a humble NIS server or a malicious intruder. Needless to say, this becomes especially troublesome if you manage your password databases over NIS. To guard against this, the Linux ypbind program provides you with the option of probing the local network to find the local NIS server, or configuring the NIS server hostname in a configuration file.
NIS Versus NIS+
NIS and NIS+ share little more than their name and a common goal. NIS+ is structured entirely differently from NIS. Instead of a flat namespace with disjoint NIS domains, NIS+ uses a hierarchical namespace similar to that of DNS. Instead of maps, so-called
NIS+ additionally supports secure and encrypted RPC, which helps greatly to solve the security problems of NIS.
Traditional NIS has an RPC Version number of 2, while NIS+ is Version 3. At the time we're writing, there isn't yet a good working implementation of NIS+ for Linux, so it isn't covered here.
The Client Side of NIS
