svn commit: r44962 - head/en_US.ISO8859-1/articles/ldap-auth

Benedict Reuschling bcr at FreeBSD.org
Mon May 26 17:43:19 UTC 2014


Author: bcr
Date: Mon May 26 17:43:18 2014
New Revision: 44962
URL: http://svnweb.freebsd.org/changeset/doc/44962

Log:
  Whitespace fixes covering the whole document.
  Translators can ignore them.

Modified:
  head/en_US.ISO8859-1/articles/ldap-auth/article.xml

Modified: head/en_US.ISO8859-1/articles/ldap-auth/article.xml
==============================================================================
--- head/en_US.ISO8859-1/articles/ldap-auth/article.xml	Mon May 26 17:21:11 2014	(r44961)
+++ head/en_US.ISO8859-1/articles/ldap-auth/article.xml	Mon May 26 17:43:18 2014	(r44962)
@@ -1,14 +1,24 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
 	"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
-<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="en">
-  <info><title>LDAP Authentication</title>
-    
+<article xmlns="http://docbook.org/ns/docbook"
+  xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+  xml:lang="en">
+  <info>
+    <title>LDAP Authentication</title>
 
     <authorgroup>
-      <author><personname><firstname>Toby</firstname><surname>Burress</surname></personname><affiliation>
-	  <address><email>kurin at causa-sui.net</email></address>
-	</affiliation></author>
+      <author>
+	<personname>
+	  <firstname>Toby</firstname>
+	  <surname>Burress</surname>
+	</personname>
+	<affiliation>
+	  <address>
+	    <email>kurin at causa-sui.net</email>
+	  </address>
+	</affiliation>
+      </author>
     </authorgroup>
 
     <copyright>
@@ -28,10 +38,11 @@
 
     <abstract>
       <para>This document is intended as a guide for the configuration
-	of an LDAP server (principally an <application>OpenLDAP</application>
-	server) for authentication on &os;.  This is useful for situations
-	where many servers need the same user accounts, for example as a
-	replacement for <application>NIS</application>.</para>
+	of an LDAP server (principally an
+	<application>OpenLDAP</application> server) for authentication
+	on &os;.  This is useful for situations where many servers
+	need the same user accounts, for example as a replacement for
+	<application>NIS</application>.</para>
     </abstract>
   </info>
 
@@ -39,65 +50,73 @@
     <title>Preface</title>
 
     <para>This document is intended to give the reader enough of an
-      understanding of LDAP to configure an LDAP server.  This document will
-      attempt to provide an
-      explanation of <package>net/nss_ldap</package>
-      and <package>security/pam_ldap</package> for use with
-      client machines services for use with the LDAP server.</para>
+      understanding of LDAP to configure an LDAP server.  This
+      document will attempt to provide an explanation of
+      <package>net/nss_ldap</package> and
+      <package>security/pam_ldap</package> for use with client
+      machines services for use with the LDAP server.</para>
 
     <para>When finished, the reader should be able to configure and
       deploy a &os; server that can host an LDAP directory, and to
-      configure and deploy a &os; server which can authenticate against
-      an LDAP directory.</para>
+      configure and deploy a &os; server which can authenticate
+      against an LDAP directory.</para>
 
     <para>This article is not intended to be an exhaustive account of
       the security, robustness, or best practice considerations for
-      configuring LDAP or the other services discussed herein.  While the author
-      takes care to do everything correctly, he does not
-      address security issues beyond a general scope.  This article should be
-      considered to lay the theoretical groundwork only, and any actual
-      implementation should be accompanied by careful requirement
-      analysis.</para>
+      configuring LDAP or the other services discussed herein.  While
+      the author takes care to do everything correctly, he does not
+      address security issues beyond a general scope.  This article
+      should be considered to lay the theoretical groundwork only, and
+      any actual implementation should be accompanied by careful
+      requirement analysis.</para>
   </sect1>
 
   <sect1 xml:id="ldap">
     <title>Configuring LDAP</title>
+
     <para>LDAP stands for <quote>Lightweight Directory Access
-      Protocol</quote> and is a subset of the X.500 Directory Access
-      Protocol.  Its most recent specifications are in <link xlink:href="http://www.ietf.org/rfc/rfc4510.txt">RFC4510</link> and
-      friends.  Essentially it is a database that expects to be read from
-      more often than it is written to.</para>
-
-    <para>The LDAP server <link xlink:href="http://www.openldap.org/">OpenLDAP</link> will be used in the
-      examples in this document; while the principles here should be
-      generally applicable to many different servers, most of the
-      concrete administration is
+	Protocol</quote> and is a subset of the X.500 Directory Access
+      Protocol.  Its most recent specifications are in <link
+	xlink:href="http://www.ietf.org/rfc/rfc4510.txt">RFC4510</link>
+      and friends.  Essentially it is a database that expects to be
+      read from more often than it is written to.</para>
+
+    <para>The LDAP server <link
+	xlink:href="http://www.openldap.org/">OpenLDAP</link> will be
+      used in the examples in this document; while the principles here
+      should be generally applicable to many different servers, most
+      of the concrete administration is
       <application>OpenLDAP</application>-specific.  There are several
-      server versions in ports, for example <package>net/openldap24-server</package>.  Client servers
-      will need the corresponding <package>net/openldap24-client</package> libraries.</para>
+      server versions in ports, for example
+      <package>net/openldap24-server</package>.  Client servers will
+      need the corresponding <package>net/openldap24-client</package>
+      libraries.</para>
 
-    <para>There are (basically) two areas of the LDAP service which need
-      configuration.  The first is setting up a server to receive
+    <para>There are (basically) two areas of the LDAP service which
+      need configuration.  The first is setting up a server to receive
       connections properly, and the second is adding entries to the
-      server's directory so that &os; tools know how to interact with it.</para>
+      server's directory so that &os; tools know how to interact with
+      it.</para>
 
     <sect2 xml:id="ldap-connect">
       <title>Setting Up the Server for Connections</title>
 
       <note>
 	<para>This section is specific to
-	  <application>OpenLDAP</application>.  If you are using another
-	  server, you will need to consult that server's
+	  <application>OpenLDAP</application>.  If you are using
+	  another server, you will need to consult that server's
 	  documentation.</para>
       </note>
 
       <sect3 xml:id="ldap-connect-install">
 	<title>Installing <application>OpenLDAP</application></title>
 
-	<para>First, install <application>OpenLDAP</application>:</para>
+	<para>First, install
+	  <application>OpenLDAP</application>:</para>
 
 	<example xml:id="oldap-install">
-	  <title>Installing <application>OpenLDAP</application></title>
+	  <title>Installing
+	    <application>OpenLDAP</application></title>
 
 	  <screen>&prompt.root; <userinput>cd /usr/ports/net/openldap24-server</userinput>
 &prompt.root; make install clean</screen>
@@ -114,38 +133,39 @@
 	<para>Next we must configure
 	  <application>OpenLDAP</application>.</para>
 
-	<para>You will want to require encryption in your
-	  connections to the LDAP server; otherwise your users' passwords
-	  will be transferred in plain text, which is considered
-	  insecure.  The tools we will be using support two very similar kinds
-	  of encryption, SSL and TLS.</para>
-
-	<para>TLS stands for <quote>Transportation Layer Security</quote>.
-	  Services that employ TLS tend to connect on the
-	  <emphasis>same</emphasis> ports as the same services without
-	  TLS; thus an SMTP server which supports TLS will listen for
-	  connections on port 25, and an LDAP server will listen on 389.</para>
+	<para>You will want to require encryption in your connections
+	  to the LDAP server; otherwise your users' passwords will be
+	  transferred in plain text, which is considered insecure.
+	  The tools we will be using support two very similar kinds of
+	  encryption, SSL and TLS.</para>
+
+	<para>TLS stands for <quote>Transportation Layer
+	    Security</quote>.  Services that employ TLS tend to
+	  connect on the <emphasis>same</emphasis> ports as the same
+	  services without TLS; thus an SMTP server which supports TLS
+	  will listen for connections on port 25, and an LDAP server
+	  will listen on 389.</para>
 
 	<para>SSL stands for <quote>Secure Sockets Layer</quote>, and
-	  services that implement SSL do <emphasis>not</emphasis> listen on
-	  the same ports as their non-SSL counterparts.  Thus SMTPS listens
-	  on port 465 (not 25), HTTPS listens on 443, and LDAPS on
-	  636.</para>
-
-	<para>The reason SSL uses a different port than TLS is because a
-	  TLS connection begins as plain text, and switches to encrypted
-	  traffic after the <literal>STARTTLS</literal> directive.  SSL
-	  connections are encrypted from the beginning.  Other than that
-	  there are no substantial differences between the two.</para>
+	  services that implement SSL do <emphasis>not</emphasis>
+	  listen on the same ports as their non-SSL counterparts.
+	  Thus SMTPS listens on port 465 (not 25), HTTPS listens on
+	  443, and LDAPS on 636.</para>
+
+	<para>The reason SSL uses a different port than TLS is because
+	  a TLS connection begins as plain text, and switches to
+	  encrypted traffic after the <literal>STARTTLS</literal>
+	  directive.  SSL connections are encrypted from the
+	  beginning.  Other than that there are no substantial
+	  differences between the two.</para>
 
 	<note>
-	  <para>We will adjust
-	    <application>OpenLDAP</application> to use TLS, as SSL is
-	    considered deprecated.</para>
+	  <para>We will adjust <application>OpenLDAP</application> to
+	    use TLS, as SSL is considered deprecated.</para>
 	</note>
 
-	<para>Once <application>OpenLDAP</application> is installed via
-	  ports, the following configuration parameters in
+	<para>Once <application>OpenLDAP</application> is installed
+	  via ports, the following configuration parameters in
 	  <filename>/usr/local/etc/openldap/slapd.conf</filename> will
 	  enable TLS:</para>
 
@@ -158,17 +178,18 @@ TLSCACertificateFile /path/to/your/cacer
 
 	<para>Here, <literal>ssf=128</literal> tells
 	  <application>OpenLDAP</application> to require 128-bit
-	  encryption for all connections, both search and update.  This
-	  parameter may be configured based on the security needs of your
-	  site, but rarely you need to weaken it, as most LDAP client
-	  libraries support strong encryption.</para>
+	  encryption for all connections, both search and update.
+	  This parameter may be configured based on the security needs
+	  of your site, but rarely you need to weaken it, as most LDAP
+	  client libraries support strong encryption.</para>
 
 	<para>The <filename>cert.crt</filename>,
 	  <filename>cert.key</filename>, and
-	  <filename>cacert.crt</filename> files are necessary for clients
-	  to authenticate <emphasis>you</emphasis> as the valid LDAP
-	  server.  If you simply want a server that runs, you can create a
-	  self-signed certificate with OpenSSL:</para>
+	  <filename>cacert.crt</filename> files are necessary for
+	  clients to authenticate <emphasis>you</emphasis> as the
+	  valid LDAP server.  If you simply want a server that runs,
+	  you can create a self-signed certificate with
+	  OpenSSL:</para>
 
 	<example xml:id="genrsa">
 	  <title>Generating an RSA Key</title>
@@ -181,16 +202,16 @@ e is 65537 (0x10001)
 &prompt.user; <userinput>openssl req -new -key cert.key -out cert.csr</userinput></screen>
 	</example>
 
-	<para>At this point you should be prompted for some values.  You
-	  may enter whatever values you like; however, it is important the
-	  <quote>Common Name</quote> value be the fully qualified domain
-	  name of the <application>OpenLDAP</application> server.
-	  In our case, and the examples here, the server is
-	  <replaceable>server.example.org</replaceable>.
-	  Incorrectly setting this value will cause clients to fail when
-	  making connections.  This can the
-	  cause of great frustration, so ensure that you follow these
-	  steps closely.</para>
+	<para>At this point you should be prompted for some values.
+	  You may enter whatever values you like; however, it is
+	  important the <quote>Common Name</quote> value be the fully
+	  qualified domain name of the
+	  <application>OpenLDAP</application> server.  In our case,
+	  and the examples here, the server is
+	  <replaceable>server.example.org</replaceable>.  Incorrectly
+	  setting this value will cause clients to fail when making
+	  connections.  This can the cause of great frustration, so
+	  ensure that you follow these steps closely.</para>
 
 	<para>Finally, the certificate signing request needs to be
 	  signed:</para>
@@ -207,11 +228,12 @@ Getting Private key</screen>
 	<para>This will create a self-signed certificate that can be
 	  used for the directives in <filename>slapd.conf</filename>,
 	  where <filename>cert.crt</filename> and
-	  <filename>cacert.crt</filename> are the same file.  If you are
-	  going to use many <application>OpenLDAP</application> servers
-	  (for replication via <literal>slurpd</literal>) you will want to
-	  see <xref linkend="ssl-ca"/> to generate a CA key and use it to
-	  sign individual server certificates.</para>
+	  <filename>cacert.crt</filename> are the same file.  If you
+	  are going to use many <application>OpenLDAP</application>
+	  servers (for replication via <literal>slurpd</literal>) you
+	  will want to see <xref linkend="ssl-ca"/> to generate a CA
+	  key and use it to sign individual server
+	  certificates.</para>
 
 	<para>Once this is done, put the following in
 	  <filename>/etc/rc.conf</filename>:</para>
@@ -230,16 +252,18 @@ ldap     slapd      3261  7  tcp4   *:38
       <sect3 xml:id="ldap-connect-client">
 	<title>Configuring the Client</title>
 
-	<para>Install the <package>net/openldap24-client</package> port for the
-	  <application>OpenLDAP</application> libraries.  The client
-	  machines will always have <application>OpenLDAP</application>
-	  libraries since that is all <package>security/pam_ldap</package> and <package>net/nss_ldap</package> support, at least for the
+	<para>Install the <package>net/openldap24-client</package>
+	  port for the <application>OpenLDAP</application> libraries.
+	  The client machines will always have
+	  <application>OpenLDAP</application> libraries since that is
+	  all <package>security/pam_ldap</package> and
+	  <package>net/nss_ldap</package> support, at least for the
 	  moment.</para>
 
 	<para>The configuration file for the
 	  <application>OpenLDAP</application> libraries is
-	  <filename>/usr/local/etc/openldap/ldap.conf</filename>.  Edit
-	  this file to contain the following values:</para>
+	  <filename>/usr/local/etc/openldap/ldap.conf</filename>.
+	  Edit this file to contain the following values:</para>
 
 	<programlisting>base dc=example,dc=org
 uri ldap://server.example.org/
@@ -248,17 +272,17 @@ tls_cacert /path/to/your/cacert.crt</pro
 
 	<note>
 	  <para>It is important that your clients have access to
-	    <filename>cacert.crt</filename>, otherwise they will not be
-	    able to connect.</para>
+	    <filename>cacert.crt</filename>, otherwise they will not
+	    be able to connect.</para>
 	</note>
 
 	<note>
 	  <para>There are two files called
-	    <filename>ldap.conf</filename>.  The first is this file, which
-	    is for the <application>OpenLDAP</application> libraries and
-	    defines how to talk to the server.  The second is
-	    <filename>/usr/local/etc/ldap.conf</filename>, and is for
-	    <application>pam_ldap</application>.</para>
+	    <filename>ldap.conf</filename>.  The first is this file,
+	    which is for the <application>OpenLDAP</application>
+	    libraries and defines how to talk to the server.  The
+	    second is <filename>/usr/local/etc/ldap.conf</filename>,
+	    and is for <application>pam_ldap</application>.</para>
 	</note>
 
 	<para>At this point you should be able to run
@@ -266,8 +290,9 @@ tls_cacert /path/to/your/cacert.crt</pro
 	  <option>-Z</option> means <quote>use TLS</quote>.  If you
 	  encounter an error, then something is configured wrong; most
 	  likely it is your certificates.  Use &man.openssl.1;'s
-	  <command>s_client</command> and <command>s_server</command> to
-	  ensure you have them configured and signed properly.</para>
+	  <command>s_client</command> and <command>s_server</command>
+	  to ensure you have them configured and signed
+	  properly.</para>
       </sect3>
     </sect2>
 
@@ -275,22 +300,23 @@ tls_cacert /path/to/your/cacert.crt</pro
       <title>Entries in the Database</title>
 
       <para>Authentication against an LDAP directory is generally
-	accomplished by attempting to bind to the directory as the connecting user.
-	This is done by establishing a <quote>simple</quote>
-	bind on the directory with the user name supplied.  If there is an
-	entry with the <literal>uid</literal> equal to the user name and
-	that entry's <literal>userPassword</literal> attribute matches the
-	password supplied, then the bind is successful.</para>
+	accomplished by attempting to bind to the directory as the
+	connecting user.  This is done by establishing a
+	<quote>simple</quote> bind on the directory with the user name
+	supplied.  If there is an entry with the
+	<literal>uid</literal> equal to the user name and that entry's
+	<literal>userPassword</literal> attribute matches the password
+	supplied, then the bind is successful.</para>
 
-      <para>The first thing we have to do is figure out is where in the
-	directory our users will live.</para>
+      <para>The first thing we have to do is figure out is where in
+	the directory our users will live.</para>
 
       <para>The base entry for our database is
-	<literal>dc=example,dc=org</literal>.  The default location for
-	users that most clients seem to expect is something like
-	<literal>ou=people,<replaceable>base</replaceable></literal>, so
-	that is what will be used here.  However keep in mind that this is
-	configurable.</para>
+	<literal>dc=example,dc=org</literal>.  The default location
+	for users that most clients seem to expect is something like
+	<literal>ou=people,<replaceable>base</replaceable></literal>,
+	so that is what will be used here.  However keep in mind that
+	this is configurable.</para>
 
       <para>So the ldif entry for the <literal>people</literal>
 	organizational unit will look like:</para>
@@ -306,17 +332,18 @@ ou: people</programlisting>
       <para>Some thought might be given to the object class your users
 	will belong to.  Most tools by default will use
 	<literal>people</literal>, which is fine if you simply want to
-	provide entries against which to authenticate.  However, if you
-	are going to store user information in the LDAP database as well,
-	you will probably want to use <literal>inetOrgPerson</literal>,
-	which has many useful attributes.  In either case, the relevant
-	schemas need to be loaded in
-	<filename>slapd.conf</filename>.</para>
+	provide entries against which to authenticate.  However, if
+	you are going to store user information in the LDAP database
+	as well, you will probably want to use
+	<literal>inetOrgPerson</literal>, which has many useful
+	attributes.  In either case, the relevant schemas need to be
+	loaded in <filename>slapd.conf</filename>.</para>
 
       <para>For this example we will use the <literal>person</literal>
-	object class.  If you are using <literal>inetOrgPerson</literal>,
-	the steps are basically identical, except that the
-	<literal>sn</literal> attribute is required.</para>
+	object class.  If you are using
+	<literal>inetOrgPerson</literal>, the steps are basically
+	identical, except that the <literal>sn</literal> attribute is
+	required.</para>
 
       <para>To add a user <literal>testuser</literal>, the ldif would
 	be:</para>
@@ -333,9 +360,9 @@ loginShell: /bin/csh
 uid: tuser
 cn: tuser</programlisting>
 
-      <para>I start my LDAP users' UIDs at 10000 to avoid collisions with
-	system accounts; you can configure whatever number you wish here,
-	as long as it is less than 65536.</para>
+      <para>I start my LDAP users' UIDs at 10000 to avoid collisions
+	with system accounts; you can configure whatever number you
+	wish here, as long as it is less than 65536.</para>
 
       <para>We also need group entries.  They are as configurable as
 	user entries, but we will use the defaults below:</para>
@@ -352,13 +379,14 @@ gidNumber: 10000
 cn: tuser</programlisting>
 
       <para>To enter these into your database, you can use
-	<command>slapadd</command> or <command>ldapadd</command>
-	on a file containing these entries.  Alternatively, you can use
+	<command>slapadd</command> or <command>ldapadd</command> on a
+	file containing these entries.  Alternatively, you can use
 	<package>sysutils/ldapvi</package>.</para>
 
-      <para>The <command>ldapsearch</command> utility on the client machine
-	should now return these entries.  If it does, your database is
-	properly configured to be used as an LDAP authentication server.</para>
+      <para>The <command>ldapsearch</command> utility on the client
+	machine should now return these entries.  If it does, your
+	database is properly configured to be used as an LDAP
+	authentication server.</para>
     </sect2>
   </sect1>
 
@@ -366,27 +394,29 @@ cn: tuser</programlisting>
     <title>Client Configuration</title>
 
     <para>The client should already have
-      <application>OpenLDAP</application> libraries from <xref linkend="ldap-connect-client"/>, but if you are installing several
-      client machines you will need to install <package>net/openldap24-client</package> on each of
-      them.</para>
+      <application>OpenLDAP</application> libraries from <xref
+	linkend="ldap-connect-client"/>, but if you are installing
+      several client machines you will need to install
+      <package>net/openldap24-client</package> on each of them.</para>
 
     <para>&os; requires two ports to be installed to authenticate
-      against an LDAP server, <package>security/pam_ldap</package> and <package>net/nss_ldap</package>.</para>
+      against an LDAP server, <package>security/pam_ldap</package> and
+      <package>net/nss_ldap</package>.</para>
 
     <sect2 xml:id="client-auth">
       <title>Authentication</title>
 
-      <para><package>security/pam_ldap</package> is
-	configured via <filename>/usr/local/etc/ldap.conf</filename>.</para>
+      <para><package>security/pam_ldap</package> is configured via
+	<filename>/usr/local/etc/ldap.conf</filename>.</para>
 
       <note>
 	<para>This is a <emphasis>different file</emphasis> than the
 	  <application>OpenLDAP</application> library functions'
 	  configuration file,
-	  <filename>/usr/local/etc/openldap/ldap.conf</filename>; however,
-	  it takes many of the same options; in fact it is a superset of
-	  that file.  For the rest of this section, references to
-	  <filename>ldap.conf</filename> will mean
+	  <filename>/usr/local/etc/openldap/ldap.conf</filename>;
+	  however, it takes many of the same options; in fact it is a
+	  superset of that file.  For the rest of this section,
+	  references to <filename>ldap.conf</filename> will mean
 	  <filename>/usr/local/etc/ldap.conf</filename>.</para>
       </note>
 
@@ -394,11 +424,12 @@ cn: tuser</programlisting>
 	configuration parameters from
 	<filename>openldap/ldap.conf</filename> to the new
 	<filename>ldap.conf</filename>.  Once this is done, we want to
-	tell <package>security/pam_ldap</package> what to
-	look for on the directory server.</para>
+	tell <package>security/pam_ldap</package> what to look for on
+	the directory server.</para>
 
-      <para>We are identifying our users with the <literal>uid</literal>
-	attribute.  To configure this (though it is the default), set the
+      <para>We are identifying our users with the
+	<literal>uid</literal> attribute.  To configure this (though
+	it is the default), set the
 	<literal>pam_login_attribute</literal> directive in
 	<filename>ldap.conf</filename>:</para>
 
@@ -408,46 +439,51 @@ cn: tuser</programlisting>
 	<programlisting>pam_login_attribute uid</programlisting>
       </example>
 
-      <para>With this set, <package>security/pam_ldap</package> will search the entire
-	LDAP directory under <literal>base</literal> for the value
-	<literal>uid=<replaceable>username</replaceable></literal>.  If it
-	finds one and only one entry, it will attempt to bind as that user
-	with the password it was given.  If it binds correctly, then it
-	will allow access.  Otherwise it will fail.</para>
+      <para>With this set, <package>security/pam_ldap</package> will
+	search the entire LDAP directory under <literal>base</literal>
+	for the value
+	<literal>uid=<replaceable>username</replaceable></literal>.
+	If it finds one and only one entry, it will attempt to bind as
+	that user with the password it was given.  If it binds
+	correctly, then it will allow access.  Otherwise it will
+	fail.</para>
 
       <sect3 xml:id="client-auth-pam">
 	<title>PAM</title>
 
 	<para>PAM, which stands for <quote>Pluggable Authentication
-	  Modules</quote>, is the method by which &os; authenticates most
-	  of its sessions.  To tell &os; we wish to use an LDAP server, we
-	  will have to add a line to the appropriate PAM file.</para>
+	    Modules</quote>, is the method by which &os; authenticates
+	  most of its sessions.  To tell &os; we wish to use an LDAP
+	  server, we will have to add a line to the appropriate PAM
+	  file.</para>
 
 	<para>Most of the time the appropriate PAM file is
 	  <filename>/etc/pam.d/sshd</filename>, if you want to use
 	  <application>SSH</application> (remember to set the relevant
-	  options in <filename>/etc/ssh/sshd_config</filename>, otherwise
-	  <application>SSH</application> will not use PAM).</para>
+	  options in <filename>/etc/ssh/sshd_config</filename>,
+	  otherwise <application>SSH</application> will not use
+	  PAM).</para>
 
 	<para>To use PAM for authentication, add the line</para>
 
 	<programlisting>auth  sufficient  /usr/local/lib/pam_ldap.so  no_warn</programlisting>
 
 	<para>Exactly where this line shows up in the file and which
-	  options appear in the fourth column determine the exact behavior
-	  of the authentication mechanism; see &man.pam.d.5;</para>
+	  options appear in the fourth column determine the exact
+	  behavior of the authentication mechanism; see
+	  &man.pam.d.5;</para>
 
-	<para>With this configuration you should be able to authenticate
-	  a user against an LDAP directory.
+	<para>With this configuration you should be able to
+	  authenticate a user against an LDAP directory.
 	  <application>PAM</application> will perform a bind with your
 	  credentials, and if successful will tell
 	  <application>SSH</application> to allow access.</para>
 
 	<para>However it is not a good idea to allow
 	  <emphasis>every</emphasis> user in the directory into
-	  <emphasis>every</emphasis> client machine.  With the
-	  current configuration, all that a user needs to log into a
-	  machine is an LDAP entry.  Fortunately there are a few ways to
+	  <emphasis>every</emphasis> client machine.  With the current
+	  configuration, all that a user needs to log into a machine
+	  is an LDAP entry.  Fortunately there are a few ways to
 	  restrict user access.</para>
 
 	<para><filename>ldap.conf</filename> supports a
@@ -458,27 +494,28 @@ cn: tuser</programlisting>
 	<programlisting>pam_groupdn cn=servername,ou=accessgroups,dc=example,dc=org</programlisting>
 
 	<para>in <filename>ldap.conf</filename>, then only members of
-	  that group will be able to log in.  There are a few things to
-	  bear in mind, however.</para>
+	  that group will be able to log in.  There are a few things
+	  to bear in mind, however.</para>
 
 	<para>Members of this group are specified in one or more
-	  <literal>memberUid</literal> attributes, and each attribute must
-	  have the full distinguished name of the member.  So
-	  <literal>memberUid: someuser</literal> will not work; it must
-	  be:</para>
+	  <literal>memberUid</literal> attributes, and each attribute
+	  must have the full distinguished name of the member.  So
+	  <literal>memberUid: someuser</literal> will not work; it
+	  must be:</para>
 
 	<programlisting>memberUid: uid=someuser,ou=people,dc=example,dc=org</programlisting>
 
-	<para>Additionally, this directive is not checked in PAM during
-	  authentication, it is checked during account management, so you
-	  will need a second line in your PAM files under
-	  <literal>account</literal>.  This will require, in turn,
-	  <emphasis>every</emphasis> user to be listed in the group, which
-	  is not necessarily what we want.  To avoid blocking users that
-	  are not in LDAP, you should enable the
-	  <literal>ignore_unknown_user</literal> attribute.  Finally, you
-	  should set the <literal>ignore_authinfo_unavail</literal> option
-	  so that you are not locked out of every computer when the LDAP
+	<para>Additionally, this directive is not checked in PAM
+	  during authentication, it is checked during account
+	  management, so you will need a second line in your PAM files
+	  under <literal>account</literal>.  This will require, in
+	  turn, <emphasis>every</emphasis> user to be listed in the
+	  group, which is not necessarily what we want.  To avoid
+	  blocking users that are not in LDAP, you should enable the
+	  <literal>ignore_unknown_user</literal> attribute.  Finally,
+	  you should set the
+	  <literal>ignore_authinfo_unavail</literal> option so that
+	  you are not locked out of every computer when the LDAP
 	  server is unavailable.</para>
 
 	<para>Your <filename>pam.d/sshd</filename> might then end up
@@ -499,11 +536,12 @@ account         required        /usr/loc
 
 	<note>
 	  <para>Since we are adding these lines specifically to
-	  <filename>pam.d/sshd</filename>, this will only have an effect
-	  on <application>SSH</application> sessions.  LDAP users will
-	  be unable to log in at the console.  To change this behavior,
-	  examine the other files in <filename>/etc/pam.d</filename> and
-	  modify them accordingly.</para>
+	    <filename>pam.d/sshd</filename>, this will only have an
+	    effect on <application>SSH</application> sessions.  LDAP
+	    users will be unable to log in at the console.  To change
+	    this behavior, examine the other files in
+	    <filename>/etc/pam.d</filename> and modify them
+	    accordingly.</para>
 	</note>
       </sect3>
     </sect2>
@@ -512,21 +550,23 @@ account         required        /usr/loc
       <title>Name Service Switch</title>
 
       <para><application>NSS</application> is the service that maps
-	attributes to names.  So, for example, if a file is owned by user
-	<literal>1001</literal>, an application will query
+	attributes to names.  So, for example, if a file is owned by
+	user <literal>1001</literal>, an application will query
 	<application>NSS</application> for the name of
-	<literal>1001</literal>, and it might get <literal>bob</literal>
-	or <literal>ted</literal> or whatever the user's name is.</para>
+	<literal>1001</literal>, and it might get
+	<literal>bob</literal> or <literal>ted</literal> or whatever
+	the user's name is.</para>
 
       <para>Now that our user information is kept in LDAP, we need to
 	tell <application>NSS</application> to look there when
 	queried.</para>
 
-      <para>The <package>net/nss_ldap</package> port
-	does this.  It uses the same configuration file as <package>security/pam_ldap</package>, and should not need
-	any extra parameters once it is installed.  Instead, what is left
-	is simply to edit <filename>/etc/nsswitch.conf</filename> to take
-	advantage of the directory.  Simply replace the following
+      <para>The <package>net/nss_ldap</package> port does this.  It
+	uses the same configuration file as
+	<package>security/pam_ldap</package>, and should not need any
+	extra parameters once it is installed.  Instead, what is left
+	is simply to edit <filename>/etc/nsswitch.conf</filename> to
+	take advantage of the directory.  Simply replace the following
 	lines:</para>
 
       <programlisting>group: compat
@@ -547,12 +587,13 @@ passwd: files ldap</programlisting>
     <sect2 xml:id="caveats">
       <title>Caveats</title>
 
-      <para>Unfortunately, as of the time this was written &os; did not
-	support changing user passwords with &man.passwd.1;.  Because of
-	this, most administrators are left to implement a solution
-	themselves.  I provide some examples here.  Note that if you write
-	your own password change script, there are some security issues
-	you should be made aware of; see <xref linkend="security-passwd"/></para>
+      <para>Unfortunately, as of the time this was written &os; did
+	not support changing user passwords with &man.passwd.1;.
+	Because of this, most administrators are left to implement a
+	solution themselves.  I provide some examples here.  Note that
+	if you write your own password change script, there are some
+	security issues you should be made aware of; see <xref
+	  linkend="security-passwd"/></para>
 
       <example xml:id="chpw-shell">
 	<title>Shell Script for Changing Passwords</title>
@@ -580,17 +621,17 @@ ldappasswd -D uid="$USER",ou=people,dc=e
 	<para>This script does hardly any error checking, but more
 	  important it is very cavalier about how it stores your
 	  passwords.  If you do anything like this, at least adjust
-	  the <literal>security.bsd.see_other_uids</literal>
-	  sysctl value:</para>
+	  the <literal>security.bsd.see_other_uids</literal> sysctl
+	  value:</para>
 
 	<screen>&prompt.root; <userinput>sysctl security.bsd.see_other_uids=0</userinput>.</screen>
       </caution>
 
       <para>A more flexible (and probably more secure) approach can be
-	used by writing a custom program, or even a web interface.  The
-	following is part of a <application>Ruby</application> library
-	that can change LDAP passwords.  It sees use both on the command
-	line, and on the web.</para>
+	used by writing a custom program, or even a web interface.
+	The following is part of a <application>Ruby</application>
+	library that can change LDAP passwords.  It sees use both on
+	the command line, and on the web.</para>
 
       <example xml:id="chpw-ruby">
 	<title>Ruby Script for Changing Passwords</title>
@@ -634,8 +675,9 @@ conn.modify(luser, [replace])]]></progra
       </example>
 
       <para>Although not guaranteed to be free of security holes (the
-	password is kept in memory, for example) this is cleaner and more
-	flexible than a simple <command>sh</command> script.</para>
+	password is kept in memory, for example) this is cleaner and
+	more flexible than a simple <command>sh</command>
+	script.</para>
     </sect2>
   </sect1>
 
@@ -658,13 +700,15 @@ conn.modify(luser, [replace])]]></progra
 
       <para>Several attributes in LDAP should be read-only.  If left
 	writable by the user, for example, a user could change his
-	<literal>uidNumber</literal> attribute to <literal>0</literal> and
-	get <systemitem class="username">root</systemitem> access!</para>
-
-      <para>To begin with, the <literal>userPassword</literal> attribute
-	should not be world-readable.  By default, anyone who can connect
-	to the LDAP server can read this attribute.  To disable this, put
-	the following in <filename>slapd.conf</filename>:</para>
+	<literal>uidNumber</literal> attribute to <literal>0</literal>
+	and get <systemitem class="username">root</systemitem>
+	access!</para>
+
+      <para>To begin with, the <literal>userPassword</literal>
+	attribute should not be world-readable.  By default, anyone
+	who can connect to the LDAP server can read this attribute.
+	To disable this, put the following in
+	<filename>slapd.conf</filename>:</para>
 
       <example xml:id="hide-userpass">
 	<title>Hide Passwords</title>
@@ -681,14 +725,14 @@ access to *
       </example>
 
       <para>This will disallow reading of the
-	<literal>userPassword</literal> attribute, while still allowing
-	users to change their own passwords.</para>
+	<literal>userPassword</literal> attribute, while still
+	allowing users to change their own passwords.</para>
 
       <para>Additionally, you'll want to keep users from changing some
 	of their own attributes.  By default, users can change any
-	attribute (except for those which the LDAP schemas themselves deny
-	changes), such as <literal>uidNumber</literal>.  To close this
-	hole, modify the above to</para>
+	attribute (except for those which the LDAP schemas themselves
+	deny changes), such as <literal>uidNumber</literal>.  To close
+	this hole, modify the above to</para>
 
       <example xml:id="attrib-readonly">
 	<title>Read-only Attributes</title>
@@ -707,35 +751,38 @@ access to *
   by * read</programlisting>
       </example>
 
-      <para>This will stop users from being able to masquerade as other
-	users.</para>
+      <para>This will stop users from being able to masquerade as
+	other users.</para>
     </sect2>
 
     <sect2 xml:id="secure-root">
-      <title><systemitem class="username">root</systemitem> Account Definition</title>
+      <title><systemitem class="username">root</systemitem> Account
+	Definition</title>
 
-      <para>Often the <systemitem class="username">root</systemitem> or manager account for
-	the LDAP service will be defined in the configuration file.
-	<application>OpenLDAP</application> supports this, for example,
-	and it works, but it can lead to trouble if
-	<filename>slapd.conf</filename> is compromised.  It may be better
-	to use this only to bootstrap yourself into LDAP, and then define
-	a <systemitem class="username">root</systemitem> account there.</para>
+      <para>Often the <systemitem class="username">root</systemitem>
+	or manager account for the LDAP service will be defined in the
+	configuration file.  <application>OpenLDAP</application>
+	supports this, for example, and it works, but it can lead to
+	trouble if <filename>slapd.conf</filename> is compromised.  It
+	may be better to use this only to bootstrap yourself into
+	LDAP, and then define a <systemitem
+	  class="username">root</systemitem> account there.</para>
 
       <para>Even better is to define accounts that have limited
-	permissions, and omit a <systemitem class="username">root</systemitem> account entirely.
-	For example, users that can add or remove user accounts are added to
-	one group, but they cannot themselves change the membership of
-	this group.  Such a security policy would help mitigate the effects
-	of a leaked password.</para>
+	permissions, and omit a <systemitem
+	  class="username">root</systemitem> account entirely.  For
+	example, users that can add or remove user accounts are added
+	to one group, but they cannot themselves change the membership
+	of this group.  Such a security policy would help mitigate the
+	effects of a leaked password.</para>
 
       <sect3 xml:id="manager-acct">
 	<title>Creating a Management Group</title>
 
-	<para>Say you want your IT department to be able to change home
-	  directories for users, but you do not want all of them to be able
-	  to add or remove users.  The way to do this is to add a group
-	  for these admins:</para>
+	<para>Say you want your IT department to be able to change
+	  home directories for users, but you do not want all of them
+	  to be able to add or remove users.  The way to do this is to
+	  add a group for these admins:</para>
 
 	<example xml:id="manager-acct-dn">
 	  <title>Creating a Management Group</title>
@@ -755,21 +802,24 @@ memberUid: uid=user2,ou=people,dc=exampl
 	<example xml:id="management-acct-acl">
 	  <title>ACLs for a Home Directory Management Group</title>
 
-	<programlisting>access to dn.subtree="ou=people,dc=example,dc=org"
+	  <programlisting>access to dn.subtree="ou=people,dc=example,dc=org"
   attr=homeDirectory
   by dn="cn=homemanagement,dc=example,dc=org"
   dnattr=memberUid write</programlisting>
 	</example>
 
-	<para>Now <systemitem class="username">tuser</systemitem> and <systemitem class="username">user2</systemitem>
-        can change other users' home directories.</para>
+	<para>Now <systemitem class="username">tuser</systemitem> and
+	  <systemitem class="username">user2</systemitem> can change
+	  other users' home directories.</para>
 
 	<para>In this example we have given a subset of administrative
 	  power to certain users without giving them power in other
-	  domains.  The idea is that soon no single user account has the
-	  power of a <systemitem class="username">root</systemitem> account, but every power
-	  root had is had by at least one user.  The <systemitem class="username">root</systemitem>
-	  account then becomes unnecessary and can be removed.</para>
+	  domains.  The idea is that soon no single user account has
+	  the power of a <systemitem
+	    class="username">root</systemitem> account, but every
+	  power root had is had by at least one user.  The <systemitem
+	    class="username">root</systemitem> account then becomes
+	  unnecessary and can be removed.</para>
       </sect3>
     </sect2>
 
@@ -777,14 +827,15 @@ memberUid: uid=user2,ou=people,dc=exampl
       <title>Password Storage</title>
 
       <para>By default <application>OpenLDAP</application> will store
-	the value of the <literal>userPassword</literal> attribute as it
-	stores any other data: in the clear.  Most of the time it is base
-	64 encoded, which provides enough protection to keep an honest
-	administrator from knowing your password, but little else.</para>
-
-      <para>It is a good idea, then, to store passwords in a more secure
-	format, such as SSHA (salted SHA).  This is done by whatever
-	program you use to change users' passwords.</para>
+	the value of the <literal>userPassword</literal> attribute as
+	it stores any other data: in the clear.  Most of the time it
+	is base 64 encoded, which provides enough protection to keep
+	an honest administrator from knowing your password, but little
+	else.</para>
+
+      <para>It is a good idea, then, to store passwords in a more
+	secure format, such as SSHA (salted SHA).  This is done by
+	whatever program you use to change users' passwords.</para>
     </sect2>
   </sect1>
 
@@ -795,42 +846,43 @@ memberUid: uid=user2,ou=people,dc=exampl
       particularly if you have many users and do not want to configure
       everything manually.</para>
 
-    <para><package>security/pam_mkhomedir</package> is
-      a PAM module that always succeeds; its purpose is to create home
-      directories for users which do not have them.  If you have dozens of
-      client servers and hundreds of users, it is much easier to use this
-      and set up skeleton directories than to prepare every home
+    <para><package>security/pam_mkhomedir</package> is a PAM module
+      that always succeeds; its purpose is to create home directories
+      for users which do not have them.  If you have dozens of client
+      servers and hundreds of users, it is much easier to use this and
+      set up skeleton directories than to prepare every home
       directory.</para>
 
-    <para><package>sysutils/cpu</package> is a
-      &man.pw.8;-like utility that can be used to manage users in the LDAP
-      directory.  You can call it directly, or wrap scripts around it.  It
-      can handle both TLS (with the <option>-x</option> flag) and
-      SSL (directly).</para>
-
-    <para><package>sysutils/ldapvi</package> is a great
-      utility for editing LDAP values in an LDIF-like syntax.  The
-      directory (or subsection of the directory) is presented in the
-      editor chosen by the <envar>EDITOR</envar> environment variable.
-      This makes it easy to enable large-scale changes in the directory
-      without having to write a custom tool.</para>
-
-    <para><package>security/openssh-portable</package>
-      has the ability to contact an LDAP server to verify
-      <application>SSH</application> keys.  This is extremely nice if you
-      have many servers and do not want to copy your public keys across
-      all of them.</para>
+    <para><package>sysutils/cpu</package> is a &man.pw.8;-like utility
+      that can be used to manage users in the LDAP directory.  You can
+      call it directly, or wrap scripts around it.  It can handle both
+      TLS (with the <option>-x</option> flag) and SSL
+      (directly).</para>
+
+    <para><package>sysutils/ldapvi</package> is a great utility for
+      editing LDAP values in an LDIF-like syntax.  The directory (or
+      subsection of the directory) is presented in the editor chosen
+      by the <envar>EDITOR</envar> environment variable.  This makes
+      it easy to enable large-scale changes in the directory without
+      having to write a custom tool.</para>
+
+    <para><package>security/openssh-portable</package> has the ability
+      to contact an LDAP server to verify
+      <application>SSH</application> keys.  This is extremely nice if
+      you have many servers and do not want to copy your public keys
+      across all of them.</para>
   </appendix>
 
   <appendix xml:id="ssl-ca">
-    <title><application>OpenSSL</application> Certificates for LDAP</title>
+    <title><application>OpenSSL</application> Certificates for
+      LDAP</title>
 
-    <para>If you are hosting two or more LDAP servers, you will probably
-      not want to use self-signed certificates, since each client will
-      have to be configured to work with each certificate.  While this is
-      possible, it is not nearly as simple as creating your own
-      certificate authority, and signing your servers' certificates with
-      that.</para>
+    <para>If you are hosting two or more LDAP servers, you will
+      probably not want to use self-signed certificates, since each
+      client will have to be configured to work with each certificate.
+      While this is possible, it is not nearly as simple as creating
+      your own certificate authority, and signing your servers'
+      certificates with that.</para>
 
     <para>The steps here are presented as they are with very little
       attempt at explaining what is going on—further explanation
@@ -849,22 +901,23 @@ memberUid: uid=user2,ou=people,dc=exampl
     </example>
 
     <para>These will be your root CA key and certificate.  You will
-      probably want to encrypt the key and store it in a cool, dry place;
-      anyone with access to it can masquerade as one of your LDAP
-      servers.</para>
+      probably want to encrypt the key and store it in a cool, dry
+      place; anyone with access to it can masquerade as one of your
+      LDAP servers.</para>
 
     <para>Next, using the first two steps above create a key
       <filename>ldap-server-one.key</filename> and certificate signing
-      request <filename>ldap-server-one.csr</filename>.  Once you sign the
-      signing request with <filename>root.key</filename>, you will be able
-      to use <filename>ldap-server-one.*</filename> on your LDAP
-      servers.</para>
+      request <filename>ldap-server-one.csr</filename>.  Once you sign
+      the signing request with <filename>root.key</filename>, you will
+      be able to use <filename>ldap-server-one.*</filename> on your
+      LDAP servers.</para>
 
     <note>
-      <para>Do not forget to use the fully qualified domain name for the
-	<quote>common name</quote> attribute when generating the
+      <para>Do not forget to use the fully qualified domain name for
+	the <quote>common name</quote> attribute when generating the
 	certificate signing request; otherwise clients will reject a
-	connection with you, and it can be very tricky to diagnose.</para>
+	connection with you, and it can be very tricky to
+	diagnose.</para>
     </note>
 
     <para>To sign the key, use <option>-CA</option> and
@@ -879,13 +932,13 @@ memberUid: uid=user2,ou=people,dc=exampl
 -out ldap-server-one.crt</userinput></screen>
     </example>
 

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-doc-all mailing list