mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	* hesiod/hesiod.c (hesiod_init): Initialize classes. Fail if no valid classes were given or if both are equal. (hesiod_resolve): Use ctx->classes instead of hardcoded C_IN and C_HS order. (parse_config_file): Handle classes keyword. * hesiod/README.hesiod: Mention addition of the classes keyword.
		
			
				
	
	
		
			156 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
The GNU C library contains an NSS module for the Hesiod name service.
 | 
						|
Hesiod is a general name service for a variety of applications and is
 | 
						|
based on the Berkeley Internet Name Daemon (BIND).
 | 
						|
 | 
						|
Introduction
 | 
						|
============
 | 
						|
 | 
						|
The Hesiod NSS module implements access to all relevant standard
 | 
						|
Hesiod types, which means that Hesiod can be used for the `group',
 | 
						|
`passwd' and `services' databases.  There is however a restriction.
 | 
						|
In the same way that it is impossible to use `gethostent()' to iterate
 | 
						|
over all the data provided by DNS, it is not possible to scan the
 | 
						|
entire Hesiod database by means of `getgrent()', `getpwent()' and
 | 
						|
`getservent()'.  Besides, Hesiod only provides support for looking up
 | 
						|
services by name and not for looking them up by port.  In essence this
 | 
						|
means that the Hesiod name service is only consulted as a result of
 | 
						|
one of the following function calls:
 | 
						|
 | 
						|
  * getgrname(), getgrgid()
 | 
						|
  * getpwname(), getpwuid()
 | 
						|
  * getservbyname()
 | 
						|
 | 
						|
and their reentrant counterparts.
 | 
						|
 | 
						|
 | 
						|
Configuring your systems
 | 
						|
========================
 | 
						|
 | 
						|
Configuring your systems to make use the Hesiod name service requires
 | 
						|
one or more of the following steps, depending on whether you are
 | 
						|
already running Hesiod in your network.
 | 
						|
 | 
						|
Configuring NSS
 | 
						|
---------------
 | 
						|
 | 
						|
First you should modify the file `/etc/nsswitch.conf' to tell
 | 
						|
NSS for which database you want to use the Hesiod name service.  If
 | 
						|
you want to use Hesiod for all databases it can handle your
 | 
						|
configuration file could look like this:
 | 
						|
 | 
						|
  # /etc/nsswitch.conf
 | 
						|
  #
 | 
						|
  # Example configuration of GNU Name Service Switch functionality.
 | 
						|
  #
 | 
						|
 | 
						|
  passwd:	  db files hesiod
 | 
						|
  group:	  db files hesiod
 | 
						|
  shadow:	  db files
 | 
						|
 | 
						|
  hosts:	  files dns
 | 
						|
  networks:	  files dns
 | 
						|
 | 
						|
  protocols:	  db files
 | 
						|
  services:	  db files hesiod
 | 
						|
  ethers:	  db files
 | 
						|
  rpc:		  db files
 | 
						|
 | 
						|
For more information on NSS, please refer to the `The GNU C Library
 | 
						|
Reference Manual'.
 | 
						|
 | 
						|
 | 
						|
Configuring Hesiod
 | 
						|
------------------
 | 
						|
 | 
						|
Next, you will have to configure Hesiod.  If you are already running
 | 
						|
Hesiod in your network, you probably already have a file named
 | 
						|
`hesiod.conf' on your machines (probably as `/etc/hesiod.conf' or
 | 
						|
`/usr/local/etc/hesiod.conf').  The Hesiod NSS module looks for
 | 
						|
`/etc/hesiod.conf' by default.  If there is no configuration file you
 | 
						|
will want to create your own.  It should look something like:
 | 
						|
 | 
						|
  rhs=.your.domain
 | 
						|
  lhs=.ns
 | 
						|
  classes=in,hs
 | 
						|
 | 
						|
The optional classes settings specifies which DNS classes Hesiod
 | 
						|
should do lookups in.  Possible values are IN (the preferred class)
 | 
						|
and  HS (the deprecated class, still used by some sites).
 | 
						|
You may specify both classes separated by a comma to try one class
 | 
						|
first and then the other if no entry is available in the first
 | 
						|
class.  The default value of the classes variable is `IN,HS'.
 | 
						|
 | 
						|
The value of rhs can be overridden by the environment variable
 | 
						|
`HES_DOMAIN'.
 | 
						|
 | 
						|
Configuring your name servers
 | 
						|
-----------------------------
 | 
						|
 | 
						|
In addition, if you are not already running Hesiod in your network,
 | 
						|
you need to create Hesiod information on your central name servers.
 | 
						|
You need to run `named' from BIND 4.9 or higher on these servers, and
 | 
						|
make them authoritative for the domain `ns.your.domain' with a line in
 | 
						|
`/etc/named.boot' reading something like:
 | 
						|
 | 
						|
  primary         ns.your.domain          named.hesiod
 | 
						|
 | 
						|
or if you are using the new BIND 8.1 or higher add something to
 | 
						|
`/etc/named.conf' like:
 | 
						|
 | 
						|
  zone "ns.your.domain" {
 | 
						|
          type master;
 | 
						|
          file "named.hesiod";
 | 
						|
  };
 | 
						|
 | 
						|
Then in the BIND working directory (usually `/var/named') create the
 | 
						|
file `named.hesiod' containing data that looks something like:
 | 
						|
 | 
						|
  ; SOA and NS records.
 | 
						|
  @       IN      SOA     server1.your.domain admin-address.your.domain (
 | 
						|
                  40000           ; serial - database version number
 | 
						|
                  1800            ; refresh - sec servers
 | 
						|
                  300             ; retry - for refresh
 | 
						|
                  3600000         ; expire - unrefreshed data
 | 
						|
                  7200 )          ; min
 | 
						|
                  NS      server1.your.domain
 | 
						|
                  NS      server2.your.domain
 | 
						|
 | 
						|
  ; Actual Hesiod data.
 | 
						|
  libc.group      TXT     "libc:*:123:gnu,gnat"
 | 
						|
  123.gid         CNAME   libc.group
 | 
						|
  gnu.passwd      TXT     "gnu:*:4567:123:GNU:/home/gnu:/bin/bash"
 | 
						|
  456.uid         CNAME   mark.passwd
 | 
						|
  nss.service     TXT     "nss tcp 789 switch sw "
 | 
						|
  nss.service     TXT     "nss udp 789 switch sw"
 | 
						|
 | 
						|
where `libc' is an example of a group, `gnu' an example of an user,
 | 
						|
and `nss' an example of a service.  Note that the format used to
 | 
						|
describe services differs from the format used in `/etc/services'.
 | 
						|
For more information on `named' refer to the `Name Server Operations
 | 
						|
Guide for BIND' that is included in the BIND distribution.
 | 
						|
 | 
						|
 | 
						|
Security
 | 
						|
========
 | 
						|
 | 
						|
Note that the information stored in the Hesiod database in principle
 | 
						|
is publicly available.  Care should be taken with including vulnerable
 | 
						|
information like encrypted passwords in the Hesiod database.  There
 | 
						|
are some ways to improve security by using features provided by
 | 
						|
`named' (see the discussion about `secure zones' in the BIND
 | 
						|
documentation), but one should keep in mind that Hesiod was never
 | 
						|
intended to distribute passwords.  In the origional design
 | 
						|
authenticating users was the job of the Kerberos service.
 | 
						|
 | 
						|
 | 
						|
More information
 | 
						|
================
 | 
						|
 | 
						|
For more information on the Hesiod name service take a look at some of
 | 
						|
the papers in ftp://athena-dist.mit.edu:/pub/ATHENA/usenix and the
 | 
						|
documentation that accompanies the source code for the Hesiod name
 | 
						|
service library in ftp://athena-dist.mit.edu:/pub/ATHENA/hesiod.
 | 
						|
 | 
						|
There is a mailing list at MIT for Hesiod users, hesiod@mit.edu.  To
 | 
						|
get yourself on or off the list, send mail to hesiod-request@mit.edu.
 |