svn commit: r44444 - head/en_US.ISO8859-1/books/handbook/security
Dru Lavigne
dru at FreeBSD.org
Fri Apr 4 15:21:37 UTC 2014
Author: dru
Date: Fri Apr 4 15:21:36 2014
New Revision: 44444
URL: http://svnweb.freebsd.org/changeset/doc/44444
Log:
Finish editorial review of Kerberos chapter.
Sponsored by: iXsystems
Modified:
head/en_US.ISO8859-1/books/handbook/security/chapter.xml
Modified: head/en_US.ISO8859-1/books/handbook/security/chapter.xml
==============================================================================
--- head/en_US.ISO8859-1/books/handbook/security/chapter.xml Fri Apr 4 15:16:08 2014 (r44443)
+++ head/en_US.ISO8859-1/books/handbook/security/chapter.xml Fri Apr 4 15:21:36 2014 (r44444)
@@ -1366,23 +1366,24 @@ kadmin><userinput> exit</userinput></
</sect2>
<sect2>
- <title><application>Kerberos</application> Enabling a Client
- with Heimdal</title>
+ <title>Configuring a Client to use
+ <application>Kerberos</application></title>
<indexterm>
<primary>Kerberos5</primary>
<secondary>configure clients</secondary>
</indexterm>
- <para>Setting up a client computer is easy as only
- <filename>/etc/krb5.conf</filename> is needed. Securely copy
- this file over to the client computer from the
+ <para>To configure a client to use
+ <application>Kerberos</application>, securely copy
+ <filename>/etc/krb5.conf</filename>
+ to the client computer from the
<acronym>KDC</acronym>.</para>
- <para>Test the client by attempting to use &man.kinit.1;,
- &man.klist.1;, and &man.kdestroy.1; from the client to obtain,
- show, and then delete a ticket for the principal created
- above. <application>Kerberos</application> applications
+ <para>Test the client by using <command>kinit</command>,
+ <command>klist</command>, and <command>kdestroy</command> from the client to obtain,
+ show, and then delete an existing ticket for the principal.
+ <application>Kerberos</application> applications
should also be able to connect to
<application>Kerberos</application> enabled servers. If that
does not work but obtaining a ticket does, the problem is
@@ -1390,26 +1391,21 @@ kadmin><userinput> exit</userinput></
<acronym>KDC</acronym>.</para>
<para>When testing a Kerberized application, try using a packet
- sniffer such as &man.tcpdump.1; to confirm that the password
+ sniffer such as <command>tcpdump</command> to confirm that the password
is not sent in the clear.</para>
- <para>Various non-core <application>Kerberos</application>
- client applications are available. The <quote>minimal</quote>
- installation in &os; installs &man.telnetd.8; as the only
- <application>Kerberos</application> enabled service.</para>
-
- <para>The Heimdal port installs
+ <para>Various <application>Kerberos</application>
+ client applications are available.
+ &os; installs <command>telnetd</command> as the only
+ <application>Kerberos</application> enabled service. The
+ Heimdal package or port installs
<application>Kerberos</application> enabled versions of
- &man.ftpd.8;, &man.rshd.8;, &man.rcp.1;, &man.rlogind.8;, and
+ <command>ftpd</command>, <command>rshd</command>,
+ <command>rcp</command>, <command>rlogind</command>, and
a few other less common programs. The <acronym>MIT</acronym>
- port also contains a full suite of
+ port contains a full suite of
<application>Kerberos</application> client
applications.</para>
- </sect2>
-
- <sect2>
- <title>User Configuration Files: <filename>.k5login</filename>
- and <filename>.k5users</filename></title>
<indexterm>
<primary><filename>.k5login</filename></primary>
@@ -1433,7 +1429,7 @@ kadmin><userinput> exit</userinput></
<para>The <filename>.k5login</filename> and
<filename>.k5users</filename> files, placed in a user's home
directory, can be used to solve this problem. For example, if
- <filename>.k5login</filename> with the following contents is
+ the following <filename>.k5login</filename> is
placed in the home directory of <systemitem
class="username">webdevelopers</systemitem>, both principals
listed will have access to that account without requiring a
@@ -1447,15 +1443,63 @@ jdoe at example.org</screen>
</sect2>
<sect2>
+ <title><acronym>MIT</acronym> Differences</title>
+
+ <para>The major difference between the <acronym>MIT</acronym> and
+ Heimdal implementations is that <command>kadmin</command> has a different, but
+ equivalent, set of commands and uses a different protocol.
+ If the <acronym>KDC</acronym> is <acronym>MIT</acronym>, the
+ Heimdal version of <command>kadmin</command> cannot be used to administer
+ the <acronym>KDC</acronym> remotely, and vice versa.</para>
+
+ <para>Client applications may also use slightly different
+ command line options to accomplish the same tasks.
+ Following the instructions at
+ <application>Kerberos</application> <link
+ xlink:href="http://web.mit.edu/Kerberos/www/">http://web.mit.edu/Kerberos/www/</link>
+ is recommended. Be careful of path issues: the
+ <acronym>MIT</acronym> port installs into
+ <filename>/usr/local/</filename> by default, and the
+ &os; system applications run instead of the
+ <acronym>MIT</acronym> versions if <envar>PATH</envar> lists
+ the system directories first.</para>
+
+ <note>
+ <para>With the &os; <acronym>MIT</acronym>
+ <package>security/krb5</package> port, be sure to read
+ <filename>/usr/local/share/doc/krb5/README.FreeBSD</filename>
+ installed by the port to understand why logins via
+ <command>telnetd</command> and <command>klogind</command> behave
+ somewhat oddly. Correcting the <quote>incorrect permissions
+ on cache file</quote> behavior requires that the
+ <command>login.krb5</command> binary be used for
+ authentication so that it can properly change ownership for
+ the forwarded credentials.</para>
+ </note>
+
+ <para>The following edits should also be made to
+ <filename>rc.conf</filename>:</para>
+
+ <programlisting>kerberos5_server="/usr/local/sbin/krb5kdc"
+kadmind5_server="/usr/local/sbin/kadmind"
+kerberos5_server_flags=""
+kerberos5_server_enable="YES"
+kadmind5_server_enable="YES"</programlisting>
+ </sect2>
+
+ <sect2>
<title><application>Kerberos</application> Tips, Tricks, and
Troubleshooting</title>
+ <para>When configuring and troubleshooting
+ <application>Kerberos</application>, keep the following points
+ in mind:</para>
+
<itemizedlist>
<listitem>
- <para>When using either the Heimdal or
+ <para>When using either Heimdal or
<acronym>MIT</acronym>
- <application>Kerberos</application><indexterm><primary>Kerberos5</primary><secondary>troubleshooting</secondary></indexterm>
- ports, ensure that the <envar>PATH</envar> lists the
+ <application>Kerberos</application>, ensure that the <envar>PATH</envar> lists the
<application>Kerberos</application> versions of the
client applications before the system versions.</para>
</listitem>
@@ -1468,12 +1512,6 @@ jdoe at example.org</screen>
</listitem>
<listitem>
- <para><acronym>MIT</acronym> and Heimdal interoperate
- except for &man.kadmin.8;, which is not
- standardized.</para>
- </listitem>
-
- <listitem>
<para>If the hostname is changed, the <systemitem
class="username">host/</systemitem> principal must be
changed and the keytab updated. This also applies to
@@ -1485,7 +1523,7 @@ jdoe at example.org</screen>
<listitem>
<para>All hosts in the realm must be both forward and
reverse resolvable in <acronym>DNS</acronym> or, at a
- minimum, in <filename>/etc/hosts</filename>. CNAMEs
+ minimum, exist in <filename>/etc/hosts</filename>. CNAMEs
will work, but the A and PTR records must be correct and
in place. The error message for unresolvable hosts is not
intuitive: <errorname>Kerberos5 refuses authentication
@@ -1496,31 +1534,30 @@ jdoe at example.org</screen>
<listitem>
<para>Some operating systems that act as clients to the
<acronym>KDC</acronym> do not set the permissions for
- &man.ksu.1; to be setuid <systemitem
+ <command>ksu</command> to be setuid <systemitem
class="username">root</systemitem>. This means that
- &man.ksu.1; does not work. This is not a
+ <command>ksu</command> does not work. This is a permissions problem, not a
<acronym>KDC</acronym> error.</para>
</listitem>
<listitem>
<para>With <acronym>MIT</acronym>
- <application>Kerberos</application>, in order to allow a
+ <application>Kerberos</application>, to allow a
principal to have a ticket life longer than the default
ten hours, use <command>modify_principal</command> at the
- &man.kadmin.8; prompt to change the maxlife of both the
+ &man.kadmin.8; prompt to change the <literal>maxlife</literal> of both the
principal in question and the <systemitem
- class="username">krbtgt</systemitem> principal. Then
- the principal can use <command>kinit -l</command> to
+ class="username">krbtgt</systemitem> principal. The
+ principal can then use <command>kinit -l</command> to
request a ticket with a longer lifetime.</para>
</listitem>
<listitem>
- <note>
<para>When running a packet sniffer on the
<acronym>KDC</acronym> to aid in troubleshooting while
- running &man.kinit.1; from a workstation, the Ticket
+ running <command>kinit</command> from a workstation, the Ticket
Granting Ticket (<acronym>TGT</acronym>) is sent
- immediately upon running &man.kinit.1;, even before the
+ immediately, even before the
password is typed. This is because the
<application>Kerberos</application> server freely
transmits a <acronym>TGT</acronym> to any unauthorized
@@ -1528,7 +1565,7 @@ jdoe at example.org</screen>
encrypted in a key derived from the user's password.
When a user types their password, it is not sent to the
<acronym>KDC</acronym>, it is instead used to decrypt
- the <acronym>TGT</acronym> that &man.kinit.1; already
+ the <acronym>TGT</acronym> that <command>kinit</command> already
obtained. If the decryption process results in a valid
ticket with a valid time stamp, the user has valid
<application>Kerberos</application> credentials.
@@ -1541,17 +1578,16 @@ jdoe at example.org</screen>
This second layer of encryption allows the
<application>Kerberos</application> server to verify
the authenticity of each <acronym>TGT</acronym>.</para>
- </note>
</listitem>
<listitem>
- <para>To use long ticket lifetimes, such as a week, when
+ <para>To use long ticket lifetimes when
using <application>OpenSSH</application> to connect to the
machine where the ticket is stored, make sure that
<application>Kerberos</application>
<option>TicketCleanup</option> is set to
<literal>no</literal> in
- <filename>sshd_config</filename> or else tickets will be
+ <filename>/etc/ssh/sshd_config</filename>. Otherwise, tickets will be
deleted at log out.</para>
</listitem>
@@ -1578,106 +1614,45 @@ jdoe at example.org</screen>
</sect2>
<sect2>
- <title>Differences with the <acronym>MIT</acronym>
- Port</title>
-
- <para>The major difference between <acronym>MIT</acronym> and
- Heimdal relates to &man.kadmin.8; which has a different, but
- equivalent, set of commands and uses a different protocol.
- If the <acronym>KDC</acronym> is <acronym>MIT</acronym>, the
- Heimdal version of &man.kadmin.8; cannot be used to administer
- the <acronym>KDC</acronym> remotely, and vice versa.</para>
-
- <para>The client applications may also use slightly different
- command line options to accomplish the same tasks.
- Following the instructions on the <acronym>MIT</acronym>
- <application>Kerberos</application> <link
- xlink:href="http://web.mit.edu/Kerberos/www/">web
- site</link> is recommended. Be careful of path issues: the
- <acronym>MIT</acronym> port installs into
- <filename>/usr/local/</filename> by default, and the
- <quote>normal</quote> system applications run instead of
- <acronym>MIT</acronym> versions if <envar>PATH</envar> lists
- the system directories first.</para>
-
- <note>
- <para>With the &os; <acronym>MIT</acronym>
- <package>security/krb5</package> port, be sure to read
- <filename>/usr/local/share/doc/krb5/README.FreeBSD</filename>
- installed by the port to understand why logins via
- &man.telnetd.8; and <command>klogind</command> behave
- somewhat oddly. Correcting the <quote>incorrect permissions
- on cache file</quote> behavior requires that the
- <command>login.krb5</command> binary be used for
- authentication so that it can properly change ownership for
- the forwarded credentials.</para>
- </note>
-
- <para>The following edits should also be made to
- <filename>rc.conf</filename>:</para>
-
- <programlisting>kerberos5_server="/usr/local/sbin/krb5kdc"
-kadmind5_server="/usr/local/sbin/kadmind"
-kerberos5_server_flags=""
-kerberos5_server_enable="YES"
-kadmind5_server_enable="YES"</programlisting>
-
- <para>This is done because the applications for
- <acronym>MIT</acronym> Kerberos installs binaries in the
- <filename>/usr/local</filename> hierarchy.</para>
- </sect2>
-
- <sect2>
- <title>Mitigating Limitations Found in
- <application>Kerberos</application></title>
+ <title>Mitigating <application>Kerberos</application> Limitations</title>
<indexterm>
<primary>Kerberos5</primary>
<secondary>limitations and shortcomings</secondary>
</indexterm>
- <sect3>
- <title><application>Kerberos</application> is an All or
- Nothing Approach</title>
-
- <para>Every service enabled on the network must be modified
- to work with <application>Kerberos</application>, or be
- otherwise secured against network attacks, or else the
- user's credentials could be stolen and re-used. An example
- of this would be <application>Kerberos</application>
- enabling all remote shells but not converting the
- <acronym>POP3</acronym> mail server which sends passwords in
+ <para>Since <application>Kerberos</application> is an all or
+ nothing approach, every service enabled on the network must either be modified
+ to work with <application>Kerberos</application> or be
+ otherwise secured against network attacks. This is to prevent
+ user credentials from being stolen and re-used. An example is when
+ <application>Kerberos</application> is
+ enabled on all remote shells but the non-Kerberized
+ <acronym>POP3</acronym> mail server sends passwords in
plain text.</para>
- </sect3>
-
- <sect3>
- <title><application>Kerberos</application> is Intended for
- Single-User Workstations</title>
- <para>In a multi-user environment,
- <application>Kerberos</application> is less secure. This is
- because it stores the tickets in <filename>/tmp</filename>,
+ <para><application>Kerberos</application> is intended for
+ single-user workstations. In a multi-user environment,
+ <application>Kerberos</application> is less secure as it
+ stores the tickets in <filename>/tmp</filename>,
which is readable by all users. If a user is sharing a
- computer with other users, it is possible that the user's
+ computer, it is possible that the user's
tickets can be stolen or copied by another user.</para>
- <para>This can be overcome with the <literal>-c</literal>
- command-line option or, preferably, the
+ <para>This can be overcome with <command>kinit -c</command>
+ or, preferably, the
<envar>KRB5CCNAME</envar> environment variable. Storing
the ticket in the user's home directory and using file
permissions are commonly used to mitigate this
problem.</para>
- </sect3>
- <sect3>
- <title>The KDC is a Single Point of Failure</title>
-
- <para>By design, the <acronym>KDC</acronym> must be as secure
+ <para>The <acronym>KDC</acronym> is a single point of failure. By design, the
+ <acronym>KDC</acronym> must be as secure
as its master password database. The <acronym>KDC</acronym>
should have absolutely no other services running on it and
should be physically secure. The danger is high because
<application>Kerberos</application> stores all passwords
- encrypted with the same <quote>master</quote> key which is
+ encrypted with the same master key which is
stored as a file on the <acronym>KDC</acronym>.</para>
<para>A compromised master key is not quite as bad as one
@@ -1687,56 +1662,49 @@ kadmind5_server_enable="YES"</programlis
<acronym>KDC</acronym> is secure, an attacker cannot do much
with the master key.</para>
- <para>Additionally, if the <acronym>KDC</acronym> is
+ <para>If the <acronym>KDC</acronym> is
unavailable, network services are unusable as authentication
cannot be performed. This can be alleviated with a single
master <acronym>KDC</acronym> and one or more slaves, and
with careful implementation of secondary or fall-back
authentication using <acronym>PAM</acronym>.</para>
- </sect3>
-
- <sect3>
- <title><application>Kerberos</application>
- Shortcomings</title>
<para><application>Kerberos</application> allows users, hosts
and services to authenticate between themselves. It does
not have a mechanism to authenticate the
- <acronym>KDC</acronym> to the users, hosts or services.
- This means that a trojanned &man.kinit.1; could record all
+ <acronym>KDC</acronym> to the users, hosts, or services.
+ This means that a trojanned <command>kinit</command> could record all
user names and passwords. File system integrity checking
tools like <package>security/tripwire</package> can
alleviate this.</para>
- </sect3>
</sect2>
<sect2>
- <title>Access Issues with Kerberos and &man.ssh.1;</title>
+ <title>Access Issues with Kerberos and <command>ssh</command></title>
<indexterm><primary>&man.ssh.1;</primary></indexterm>
- <para>There are a few issues with both Kerberos and &man.ssh.1;
- that need to be addressed if they are used. Kerberos is an
+ <para>Kerberos is an
excellent authentication protocol, but there are bugs in the
- kerberized versions of &man.telnet.1; and &man.rlogin.1; that
+ kerberized versions of <command>telnet</command> and <command>rlogin</command> that
make them unsuitable for dealing with binary streams. By
default, Kerberos does not encrypt a session unless
- <option>-x</option> is used whereas &man.ssh.1; encrypts
+ <option>-x</option> is used, whereas <command>ssh</command> encrypts
everything.</para>
- <para>While &man.ssh.1; works well, it forwards encryption keys
+ <para>While <command>ssh</command> works well, it forwards encryption keys
by default. This introduces a security risk to a user who
- uses &man.ssh.1; to access an insecure machine from a secure
+ uses <command>ssh</command> to access an insecure machine from a secure
workstation. The keys themselves are not exposed, but
- &man.ssh.1; installs a forwarding port for the duration of the
+ <command>ssh</command> installs a forwarding port for the duration of the
login. If an attacker has broken
<systemitem class="username">root</systemitem> on
the insecure machine, he can utilize that port to gain access
to any other machine that those keys unlock.</para>
- <para>It is recommended that &man.ssh.1; is used in combination
- with Kerberos whenever possible for staff logins and
- &man.ssh.1; can be compiled with Kerberos support. This
+ <para>It is recommended that <command>ssh</command> is used in combination
+ with Kerberos whenever possible for staff logins as it
+ can be compiled with Kerberos support. This
reduces reliance on potentially exposed <acronym>SSH</acronym>
keys while protecting passwords via Kerberos. Keys should
only be used for automated tasks from secure machines as this
More information about the svn-doc-head
mailing list