DESCRIPTION
Various functions in the C Library need to be configured
to work correctly in the local environment. Traditionally,
this was done by using files (e.g., `/etc/passwd'), but other
nameservices (like the Network Information Service (NIS) and
the Domain Name Service (DNS)) became popular, and were
hacked into the C library, usually with a fixed search
order.
The Linux libc5 with NYS support and the GNU C Library 2.x
(libc.so.6) contain a cleaner solution of this problem. It is
designed after a method used by Sun Microsystems in the C
library of Solaris 2. We follow their name and call this
scheme "Name Service Switch" (NSS). The sources for the
"databases" and their lookup order are specified in the
/etc/nsswitch.conf file.
The following databases are available in the NSS:
- aliases
-
Mail aliases, used by sendmail(8). Presently
ignored.
- ethers
-
Ethernet numbers.
- group
-
Groups of users, used by getgrent(3)
functions.
- hosts
-
Host names and numbers, used by gethostbyname(3) and
similar functions.
- netgroup
-
Network wide list of hosts and users, used for
access rules. C libraries before glibc 2.1 only support
netgroups over NIS.
- networks
-
Network names and numbers, used by getnetent(3)
functions.
- passwd
-
User passwords, used by getpwent(3)
functions.
- protocols
-
Network protocols, used by getprotoent(3)
functions.
- publickey
-
Public and secret keys for Secure_RPC used by NFS
and NIS+.
rpc
-
Remote procedure call names and numbers, used by
getrpcbyname(3) and
similar functions.
- services
-
Network services, used by getservent(3)
functions.
- shadow
-
Shadow user passwords, used by getspnam(3).
An example /etc/nsswitch.conf (namely, the default
used when /etc/nsswitch.conf is
missing):
The first column is the database. The rest of the line
specifies how the lookup process works. You can specify the
way it works for each database individually.
The configuration specification for each database can
contain two different items:
-
The service specification like `files', `db', or
`nis'.
-
The reaction on lookup result like
`[NOTFOUND=return]'.
For libc5 with NYS, the allowed service specifications are
`files', `nis', and `nisplus'. For hosts, you could specify
`dns' as extra service, for passwd and group `compat', but
not for shadow.
For glibc, you must have a file called /lib/libnss_SERVICE.so.X for every SERVICE you are using. On a
standard installation, you could use `files', `db', `nis',
and `nisplus'. For hosts, you could specify `dns' as extra
service, for passwd, group, and shadow `compat'. These
services will not be used by libc5 with NYS. The version
number X is 1 for glibc 2.0 and
2 for glibc 2.1.
The second item in the specification gives the user much
finer control on the lookup process. Action items are placed
between two service names and are written within brackets.
The general form is
`[' ( `!'? STATUS `=' ACTION )+ `]'
where
- STATUS => success | notfound |
unavail | tryagain
- ACTION => return |
continue
The case of the keywords is insignificant. The STATUS
values are the results of a call to a lookup function of a
specific service. They mean:
- success
-
No error occurred and the wanted entry is returned.
The default action for this is `return'.
- notfound
-
The lookup process works ok but the needed value was
not found. The default action is `continue'.
- unavail
-
The service is permanently unavailable. This can
either mean the needed file is not available, or, for
DNS, the server is not available or does not allow
queries. The default action is `continue'.
- tryagain
-
The service is temporarily unavailable. This could
mean a file is locked or a server currently cannot
accept more connections. The default action is
`continue'.
Interaction with +/− syntax (compat mode)
Linux libc5 without NYS does not have the name service
switch but does allow the user some policy control. In
/etc/passwd you could have
entries of the form +user or +@netgroup (include the
specified user from the NIS passwd map), −user or
−@netgroup (exclude the specified user), and +
(include every user, except the excluded ones, from the NIS
passwd map). Since most people only put a + at the end of
/etc/passwd to include
everything from NIS, the switch provides a faster
alternative for this case (`passwd: files nis') which
doesn't require the single + entry in /etc/passwd, /etc/group, and /etc/shadow. If this is not sufficient,
the NSS `compat' service provides full +/− semantics.
By default, the source is `nis', but this may be overridden
by specifying `nisplus' as source for the pseudo-databases
passwd_compat,
group_compat and
shadow_compat.
This pseudo-databases are only available in GNU C
Library.
NOTES
Within each process that uses nsswitch.conf, the entire
file is read only once; if the file is later changed, the
process will continue using the old configuration.
With Solaris, it isn't possible to link programs using the
NSS Service statically. With Linux, this is no problem.
Copyright (c) 1998, 1999 Thorsten Kukuk (kukuk@vt.uni-paderborn.de)
This is free documentation; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
The GNU General Public License's references to "object code"
and "executables" are to be interpreted as the output of any
document formatting or typesetting system, including
intermediate and printed output.
This manual is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public
License along with this manual; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
USA.
This manual page based on the GNU C Library info pages.
|