svn commit: r48670 - head/en_US.ISO8859-1/books/handbook/security

Tom Rhodes trhodes at FreeBSD.org
Mon Apr 18 18:10:52 UTC 2016


Author: trhodes
Date: Mon Apr 18 18:10:51 2016
New Revision: 48670
URL: https://svnweb.freebsd.org/changeset/doc/48670

Log:
  Add a section on installing sudo and some basic instruction on the use
  
  Differential Revision:	D5235
  Reviewed by:	wblock, mat

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	Mon Apr 18 17:42:15 2016	(r48669)
+++ head/en_US.ISO8859-1/books/handbook/security/chapter.xml	Mon Apr 18 18:10:51 2016	(r48670)
@@ -201,7 +201,7 @@
 	attempt to login.</para>
     </sect2>
 
-    <sect2 xml:id="security-sudo">
+    <sect2 xml:id="security-accountmgmt">
       <title>Permitted Account Escalation</title>
 
       <para>In some cases, system administration needs to be shared
@@ -3935,4 +3935,185 @@ jail:httpd:memoryuse:deny=2G/jail</progr
 	See &man.rctl.8; to learn about them.</para>
     </sect2>
   </sect1>
+
+  <sect1 xml:id="security-sudo">
+    <info>
+      <title>Shared Administration with Sudo</title>
+
+      <authorgroup>
+	<author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>Contributed
+	  by </contrib></author>
+      </authorgroup>
+    </info>
+
+    <indexterm>
+      <primary>Security</primary>
+      <secondary>Sudo</secondary>
+    </indexterm>
+
+    <para>System administrators often need the ability to grant
+      enhanced permissions to users so they may perform privileged
+      tasks.  The idea that team members are provided access
+      to a &os; system to perform their specific tasks opens up unique
+      challenges to every administrator.  These team members only
+      need a subset of access beyond normal end user levels; however,
+      they almost always tell management they are unable to
+      perform their tasks without superuser access.  Thankfully, there
+      is no reason to provide such access to end users because tools
+      exist to manage this exact requirement.</para>
+
+    <para>Up to this point, the security chapter has covered permitting
+      access to authorized users and attempting to prevent unauthorized
+      access.  Another problem arises once authorized users have access
+      to the system resources.  In many cases, some users may need
+      access to application startup scripts, or a team of
+      administrators need to maintain the system.  Traditionally, the
+      standard users and groups, file permissions, and even the
+      &man.su.1; command would manage this access.  And as applications
+      required more access, as more users needed to use system
+      resources, a better solution was required.  The most used
+      application is currently <application>Sudo</application>.</para>
+
+    <para><application>Sudo</application> allows administrators
+      to configure more rigid access to system commands
+      and provide for some advanced logging features.
+      As a tool, it is available from the Ports Collection as
+      <package role="port">security/sudo</package> or by use of
+      the &man.pkg.8; utility.  To use the &man.pkg.8; tool:</para>
+
+    <screen>&prompt.root; <userinput>pkg install sudo</userinput></screen>
+
+    <para>After the installation is complete, the installed
+      <command>visudo</command> will open the configuration file with
+      a text editor.  Using <command>visudo</command> is highly
+      recommended as it comes with a built in syntax checker to verify
+      there are no errors before the file is saved.</para>
+
+    <para>The configuration file is made up of several small sections
+      which allow for extensive configuration.  In the following
+      example, web application maintainer, user1, needs to start,
+      stop, and restart the web application known as
+      <replaceable>webservice</replaceable>.  To
+      grant this user permission to perform these tasks, add
+      this line to the end of
+      <filename>/usr/local/etc/sudoers</filename>:</para>
+
+    <programlisting>user1   ALL=(ALL)       /usr/sbin/service webservice *</programlisting>
+
+    <para>The user may now start <replaceable>webservice</replaceable>
+      using this command:</para>
+
+    <screen>&prompt.user; <userinput>sudo /usr/sbin/service <replaceable>webservice</replaceable> start</userinput></screen>
+
+    <para>While this configuration allows a single user access to the
+      <application>webservice</application> service; however, in most
+      organizations, there is an entire web team in charge of managing
+      the service.  A single line can also give access to an entire
+      group.  These steps will create a web group, add a user to this
+      group, and allow all members of the group to manage the
+      service:</para>
+
+    <screen>&prompt.root; <userinput>pw groupadd -g 6001 -n webteam</userinput></screen>
+
+    <para>Using the same &man.pw.8; command, the user is added to
+      the webteam group:</para>
+
+    <screen>&prompt.root; <userinput>pw groupmod -m user1 -n webteam</userinput></screen>
+
+    <para>Finally, this line in
+      <filename>/usr/local/etc/sudoers</filename> allows any
+      member of the webteam group to manage
+      <replaceable>webservice</replaceable>:</para>
+
+    <programlisting>%webteam   ALL=(ALL)       /usr/sbin/service webservice *</programlisting>
+
+    <para>Unlike &man.su.1;, <application>Sudo</application>
+      only requires the end user password.  This adds an advantage where
+      users will not need shared passwords, a finding in most security
+      audits and just bad all the way around.</para>
+
+    <para>Users permitted to run applications with
+      <application>Sudo</application> only enter their own passwords.
+      This is more secure and gives better control than &man.su.1;,
+      where the <systemitem class="username">root</systemitem>
+      password is entered and the user acquires all
+      <systemitem class="username">root</systemitem>
+      permissions.</para>
+
+    <tip>
+      <para>Most organizations are moving or have moved toward a two
+	factor authentication model.  In these cases, the user may
+	not have a password to enter.  <application>Sudo</application>
+	provides for these cases with the <literal>NOPASSWORD</literal>
+	variable.  Adding it to the configuration above
+	will allow all members of the <replaceable>webteam</replaceable>
+	group to manage the service without the password
+	requirement:</para>
+
+      <programlisting>%webteam   ALL=(ALL)       NOPASSWORD: /usr/sbin/service webservice *</programlisting>
+    </tip>
+
+    <sect2 xml:id="security-sudo-loggin">
+      <title>Logging Output</title>
+
+      <para>An advantage to implementing
+	<application>Sudo</application> is the ability to enable
+	session logging.  Using the built in log mechanisms
+	and the included <application>sudoreplay</application>
+	command, all commands initiated through
+	<application>Sudo</application> are logged for later
+	verification.  To enable this feature, add a default log
+	directory entry, this example uses a user variable.
+	Several other log filename conventions exist, consult the
+	manual page for <application>sudoreplay</application> for
+	additional information.</para>
+
+      <programlisting>Defaults iolog_dir=/var/log/sudo-io/%{user}</programlisting>
+
+      <tip>
+	<para>This directory will be created automatically after the
+	  logging is configured.  It is best to let the system create
+	  directory with default permissions just to be safe.  In
+	  addition, this entry will also log administrators who use the
+	  <application>sudoreplay</application> command.  To change
+	  this behavior, read and uncomment the logging options inside
+	  <filename>sudoers</filename>.</para>
+      </tip>
+
+      <para>Once this directive has been added to the
+	<filename>sudoers</filename> file, any user configuration
+	can be updated with the request to log access.  In the
+	example shown, the updated <replaceable>webteam</replaceable>
+	entry would have the following additional changes:</para>
+
+      <programlisting>%webteam ALL=(ALL) NOPASSWD: LOG_INPUT: LOG_OUTPUT: /usr/sbin/service webservice *</programlisting>
+
+      <para>From this point on, all <replaceable>webteam</replaceable>
+	members altering the status of the
+	<replaceable>webservice</replaceable> application
+	will be logged.  The list of previous and current sessions
+	can be displayed with:</para>
+
+      <screen>&prompt.root; <userinput>sudoreplay -l</userinput></screen>
+
+      <para>In the output, to replay a specific session, search for the
+	<literal>TSID=</literal> entry, and pass that to
+	<application>sudoreplay</application> with no other options to
+	replay the session at normal speed.  For example:</para>
+
+      <screen>&prompt.root; <userinput>sudoreplay user1/00/00/02</userinput></screen>
+
+      <warning>
+	<para>While sessions are logged, any administrator is
+	  able to remove sessions and leave only a question of why they
+	  had done so.  It is worthwhile to add a daily check
+	  through an intrusion detection system (<acronym>IDS</acronym>)
+	  or similar software so that other administrators are alerted
+	  to manual alterations.</para>
+      </warning>
+
+      <para>The <command>sudoreplay</command> is extremely extendable.
+	Consult the documentation for more information.</para>
+    </sect2>
+  </sect1>
 </chapter>


More information about the svn-doc-all mailing list