summaryrefslogtreecommitdiff
path: root/doc/overview.html
diff options
context:
space:
mode:
Diffstat (limited to 'doc/overview.html')
-rw-r--r--doc/overview.html101
1 files changed, 100 insertions, 1 deletions
diff --git a/doc/overview.html b/doc/overview.html
index 222e296..047bea6 100644
--- a/doc/overview.html
+++ b/doc/overview.html
@@ -28,7 +28,106 @@ than the POSIX interface specifies.
</p>
<p>
- To be completed.
+ nsss has two parts: the client library and the nsssd service.
+</p>
+
+<h2> The nsss client library </h2>
+
+<p>
+ The <a href="libnsss/">client library</a> provides:
+</p>
+
+<ul>
+ <li> <a href="libnsss/nsss-unix.html">nsss-unix</a>: a set of
+functions providing access to the standard <tt>/etc/passwd</tt>,
+<tt>/etc/group</tt> and <tt>/etc/shadow</tt> files. </li>
+ <li> <a href="libnsss/nsss-switch.html">nsss-switch: a set of
+functions implementing the same functionality as <tt>nsss-unix</tt>,
+but instead of looking for information in the standard files, they
+connect to a <em>nsssd service</em> (see below) that performs the
+requests for them. <li>
+ <li> three implementations of the the standard <tt>getpwnam()</tt>
+et al. functions: one using the <tt>nsss-unix</tt> functions, one
+using the <tt>nsss-switch</tt> functions, and the default one, called
+<tt>nsss-all</tt>, which attempts to connect to the nsssd service
+and retrieve information from it, but falls back to the <tt>nsss-unix</tt>
+implementation if it fails (for instance, if no nsssd service is
+listening). </li>
+<ul>
+
+<p>
+ Applications wishing to use nsss should be built against this client
+library. The <tt>getpwnam()</tt> et al. definitions will override those
+of the libc, and use the <tt>nsss-all</tt>, <tt>nsss-switch</tt> or
+<tt>nsss-unix</tt> depending on compilation options.
+</p>
+
+<p>
+ Unlike glibc's <tt>nsswitch</tt>, the nsss client library does not
+use dynamically loadable modules. nsss can be statically linked, and
+used in static programs. It's also quite light.
+</p>
+
+<h2> The nsssd service </h2>
+
+<p>
+ For applications that need to use the <tt>nsss-all</tt> or
+<tt>nsss-switch</tt> implementations of <tt>getpwnam()</tt> et al.
+(and that is the point, otherwise the libc's implementation could
+generally be used over <tt>nsss-unix</tt> instead!) there needs to
+be a daemon running on the system, and serving requests from
+<tt>nsss-switch</tt> clients.
+</p>
+
+<p>
+ That daemon should be set up by the system administrator. It should
+listen to the <tt>/run/service/nsssd/s</tt> Unix domain socket; that
+default location can be changed at nsss build time via the
+<tt>--with-nsssd-socket</tt> option to the configure script.
+</p>
+
+<p>
+ As of 0.0.1.0, two suitable implementations of a nsssd daemon are
+provided by the nsss package:
+</p>
+
+<ul>
+ <li> The <a href="nsssd-unix.html">nsssd-unix</a> program, which is
+sort of a dummy implementation since it simply accesses the standard
+files (it simply uses the <tt>nsss-unix</tt> library). It is still
+useful for testing purposes, and to have a placeholder service that
+can easily be replaced later. </li>
+ <li> The <a href="nsssd-nslcd.html">nsssd-nslcd</a> program, which
+performs requests to a
+<a href="https://arthurdejong.org/nss-pam-ldapd/nslcd.8">nslcd</a>
+daemon running on the same system and returns the answers fetched
+by nslcd. This allows nsss to get its users/groups information from
+a LDAP database. </li>
+</ul>
+
+<p>
+ More implementations, with a wider variety of backends, will come
+in future versions of nsss.
+</p>
+
+<p>
+ The provided programs are not meant to be run directly; instead, they
+use the UCSPI protocol and must be spawned by a Unix domain super-server
+(the equivalent of inetd, for Unix domain sockets). The
+<a href="//skarnet.org/software/s6/s6-ipcserver.html">s6-ipcserver</a>
+program, from the <a href="//skarnet.org/software/s6/">s6</a> package,
+is such a super-server. What this means is that for instance, running the
+following command-line as root will set up a correct nsss service:
+</p>
+
+<pre> s6-ipcserver -- /run/service/nsssd/s nsssd-unix </pre>
+
+<p>
+ Refinements can be added to this command-line, such as options to
+drop root privileges after binding to the socket, etc. Examples of how
+to add a nsssd service to your init scripts are provided in the
+<tt>examples/</tt> subdirectory of the nsss package, for OpenRC,
+s6 or s6-rc based systems.
</p>
</body>