White space fix only. Translators can ignore.
Sponsored by: iXsystems
This commit is contained in:
		
							parent
							
								
									bf62664294
								
							
						
					
					
						commit
						bb698042d3
					
				
				
				Notes:
				
					svn2git
				
				2020-12-08 03:00:23 +00:00 
				
			
			svn path=/head/; revision=44404
					 1 changed files with 307 additions and 312 deletions
				
			
		|  | @ -2514,12 +2514,12 @@ racoon_enable="yes"</programlisting> | |||
|       compatible with both <acronym>SSH</acronym> version 1 and 2 | ||||
|       protocols.</para> | ||||
| 
 | ||||
|       <para>When data is sent over the network in an unencrypted form, | ||||
| 	network sniffers anywhere in between the client and server | ||||
| 	can steal user/password information or data transferred | ||||
| 	during the session.  <application>OpenSSH</application> offers | ||||
| 	a variety of authentication and encryption methods to prevent | ||||
| 	this from happening.</para> | ||||
|     <para>When data is sent over the network in an unencrypted form, | ||||
|       network sniffers anywhere in between the client and server can | ||||
|       steal user/password information or data transferred during the | ||||
|       session.  <application>OpenSSH</application> offers a variety of | ||||
|       authentication and encryption methods to prevent this from | ||||
|       happening.</para> | ||||
| 
 | ||||
|     <sect2> | ||||
|       <title>Using the SSH Client Utilities</title> | ||||
|  | @ -2587,14 +2587,14 @@ COPYRIGHT            100% |*****************************|  4735 | |||
| 	arguments takes the form | ||||
| 	<option>user@host:<path_to_remote_file></option>.</para> | ||||
| 
 | ||||
|     <sect3 xml:id="security-ssh-keygen"> | ||||
|       <title>Key-based Authentication</title> | ||||
|       <sect3 xml:id="security-ssh-keygen"> | ||||
| 	<title>Key-based Authentication</title> | ||||
| 
 | ||||
|       <para>Instead of using passwords, &man.ssh-keygen.1; can be used | ||||
| 	to generate <acronym>DSA</acronym> or <acronym>RSA</acronym> | ||||
| 	keys to authenticate a user:</para> | ||||
| 	<para>Instead of using passwords, &man.ssh-keygen.1; can be | ||||
| 	  used to generate <acronym>DSA</acronym> or | ||||
| 	  <acronym>RSA</acronym> keys to authenticate a user:</para> | ||||
| 
 | ||||
|       <screen>&prompt.user; <userinput>ssh-keygen -t <replaceable>dsa</replaceable></userinput> | ||||
| 	<screen>&prompt.user; <userinput>ssh-keygen -t <replaceable>dsa</replaceable></userinput> | ||||
| Generating public/private dsa key pair. | ||||
| Enter file in which to save the key (/home/user/.ssh/id_dsa): | ||||
| Created directory '/home/user/.ssh'. | ||||
|  | @ -2605,179 +2605,182 @@ Your public key has been saved in /home/user/.ssh/id_dsa.pub. | |||
| The key fingerprint is: | ||||
| bb:48:db:f2:93:57:80:b6:aa:bc:f5:d5:ba:8f:79:17 user@host.example.com</screen> | ||||
| 
 | ||||
|       <para>&man.ssh-keygen.1; will create a public and private key | ||||
| 	pair for use in authentication.  The private key is stored | ||||
| 	in <filename>~/.ssh/id_dsa</filename> or | ||||
| 	<filename>~/.ssh/id_rsa</filename>, whereas the public key | ||||
| 	is stored in <filename>~/.ssh/id_dsa.pub</filename> or | ||||
| 	<filename>~/.ssh/id_rsa.pub</filename>, respectively for the | ||||
| 	<acronym>DSA</acronym> and <acronym>RSA</acronym> key types. | ||||
| 	The public key must be placed in | ||||
| 	<filename>~/.ssh/authorized_keys</filename> on the | ||||
| 	remote machine for both <acronym>RSA</acronym> or | ||||
| 	<acronym>DSA</acronym> keys in order for the setup to | ||||
| 	work.</para> | ||||
| 	<para>&man.ssh-keygen.1; will create a public and private key | ||||
| 	  pair for use in authentication.  The private key is stored | ||||
| 	  in <filename>~/.ssh/id_dsa</filename> or | ||||
| 	  <filename>~/.ssh/id_rsa</filename>, whereas the public key | ||||
| 	  is stored in <filename>~/.ssh/id_dsa.pub</filename> or | ||||
| 	  <filename>~/.ssh/id_rsa.pub</filename>, respectively for the | ||||
| 	  <acronym>DSA</acronym> and <acronym>RSA</acronym> key types. | ||||
| 	  The public key must be placed in | ||||
| 	  <filename>~/.ssh/authorized_keys</filename> on the remote | ||||
| 	  machine for both <acronym>RSA</acronym> or | ||||
| 	  <acronym>DSA</acronym> keys in order for the setup to | ||||
| 	  work.</para> | ||||
| 
 | ||||
|       <para>This setup allows connections to the remote machine based | ||||
| 	upon <acronym>SSH</acronym> keys instead of passwords.</para> | ||||
| 	<para>This setup allows connections to the remote machine | ||||
| 	  based upon <acronym>SSH</acronym> keys instead of | ||||
| 	  passwords.</para> | ||||
| 
 | ||||
|       <warning> | ||||
| 	<para>Many users believe that keys are secure by design and | ||||
| 	  will use a key without a passphrase.  This is | ||||
| 	  <emphasis>dangerous</emphasis> behavior and the method | ||||
| 	  an administrator may use to verify keys have a passphrase | ||||
| 	  is to view the key manually.  If the private key file | ||||
| 	  contains the word <literal>ENCRYPTED</literal> the key | ||||
| 	  owner is using a passphrase.  While it may still be a weak | ||||
| 	  passphrase, at least if the system is compromised, access | ||||
| 	  to other sites will still require some level of password | ||||
| 	  guessing.  In addition, to better secure end users, the | ||||
| 	  <literal>from</literal> may be placed in the public key | ||||
| 	  file.  For example, adding | ||||
| 	  <literal>from="192.168.10.5</literal> in the front of | ||||
| 	  <literal>ssh-rsa</literal> or <literal>rsa-dsa</literal> | ||||
| 	  prefix will only allow that specific user to login from | ||||
| 	  that host <acronym>IP</acronym>.</para> | ||||
|       </warning> | ||||
| 	<warning> | ||||
| 	  <para>Many users believe that keys are secure by design and | ||||
| 	    will use a key without a passphrase.  This is | ||||
| 	    <emphasis>dangerous</emphasis> behavior and the method an | ||||
| 	    administrator may use to verify keys have a passphrase is | ||||
| 	    to view the key manually.  If the private key file | ||||
| 	    contains the word <literal>ENCRYPTED</literal> the key | ||||
| 	    owner is using a passphrase.  While it may still be a weak | ||||
| 	    passphrase, at least if the system is compromised, access | ||||
| 	    to other sites will still require some level of password | ||||
| 	    guessing.  In addition, to better secure end users, the | ||||
| 	    <literal>from</literal> may be placed in the public key | ||||
| 	    file.  For example, adding | ||||
| 	    <literal>from="192.168.10.5</literal> in the front of | ||||
| 	    <literal>ssh-rsa</literal> or <literal>rsa-dsa</literal> | ||||
| 	    prefix will only allow that specific user to login from | ||||
| 	    that host <acronym>IP</acronym>.</para> | ||||
| 	</warning> | ||||
| 
 | ||||
|       <warning> | ||||
| 	<para>The various options and files can be different according | ||||
| 	  to the <application>OpenSSH</application> version.  To avoid | ||||
| 	  problems, consult &man.ssh-keygen.1;.</para> | ||||
|       </warning> | ||||
| 	<warning> | ||||
| 	  <para>The various options and files can be different | ||||
| 	    according to the <application>OpenSSH</application> | ||||
| 	    version.  To avoid problems, consult | ||||
| 	    &man.ssh-keygen.1;.</para> | ||||
| 	</warning> | ||||
| 
 | ||||
|       <para>If a passphrase is used in &man.ssh-keygen.1;, the user | ||||
| 	will be prompted for the passphrase each time in order to use | ||||
| 	the private key.  To load <acronym>SSH</acronym> keys into memory for use, | ||||
| 	without needing to type the passphrase each time, use | ||||
| 	&man.ssh-agent.1; and &man.ssh-add.1;.</para> | ||||
| 	<para>If a passphrase is used in &man.ssh-keygen.1;, the user | ||||
| 	  will be prompted for the passphrase each time in order to | ||||
| 	  use the private key.  To load <acronym>SSH</acronym> keys | ||||
| 	  into memory for use, without needing to type the passphrase | ||||
| 	  each time, use &man.ssh-agent.1; and &man.ssh-add.1;.</para> | ||||
| 
 | ||||
|       <para>Authentication is handled by &man.ssh-agent.1;, using the | ||||
| 	private key(s) that are loaded into it.  Then, | ||||
| 	&man.ssh-agent.1; should be used to launch another | ||||
| 	application.  At the most basic level, it could spawn a shell | ||||
| 	or a window manager.</para> | ||||
| 	<para>Authentication is handled by &man.ssh-agent.1;, using | ||||
| 	  the private key(s) that are loaded into it.  Then, | ||||
| 	  &man.ssh-agent.1; should be used to launch another | ||||
| 	  application.  At the most basic level, it could spawn a | ||||
| 	  shell or a window manager.</para> | ||||
| 
 | ||||
|       <para>To use &man.ssh-agent.1; in a shell, start it with a shell | ||||
| 	as an argument.  Next, add the identity by running | ||||
| 	&man.ssh-add.1; and providing it the passphrase for the | ||||
| 	private key.  Once these steps have been completed, the user | ||||
| 	will be able to &man.ssh.1; to any host that has the | ||||
| 	corresponding public key installed.  For example:</para> | ||||
| 	<para>To use &man.ssh-agent.1; in a shell, start it with a | ||||
| 	  shell as an argument.  Next, add the identity by running | ||||
| 	  &man.ssh-add.1; and providing it the passphrase for the | ||||
| 	  private key.  Once these steps have been completed, the user | ||||
| 	  will be able to &man.ssh.1; to any host that has the | ||||
| 	  corresponding public key installed.  For example:</para> | ||||
| 
 | ||||
|       <screen>&prompt.user; ssh-agent <replaceable>csh</replaceable> | ||||
| 	<screen>&prompt.user; ssh-agent <replaceable>csh</replaceable> | ||||
| &prompt.user; ssh-add | ||||
| Enter passphrase for /home/user/.ssh/id_dsa: | ||||
| Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa) | ||||
| &prompt.user;</screen> | ||||
| 
 | ||||
|       <para>To use &man.ssh-agent.1; in | ||||
| 	<application>&xorg;</application>, a call to &man.ssh-agent.1; | ||||
| 	needs to be placed in <filename>~/.xinitrc</filename>.  This | ||||
| 	provides the &man.ssh-agent.1; services to all programs | ||||
| 	launched in <application>&xorg;</application>.  An example | ||||
| 	<filename>~/.xinitrc</filename> might look like | ||||
| 	this:</para> | ||||
| 	<para>To use &man.ssh-agent.1; in | ||||
| 	  <application>&xorg;</application>, a call to | ||||
| 	  &man.ssh-agent.1; needs to be placed in | ||||
| 	  <filename>~/.xinitrc</filename>.  This provides the | ||||
| 	  &man.ssh-agent.1; services to all programs launched in | ||||
| 	  <application>&xorg;</application>.  An example | ||||
| 	  <filename>~/.xinitrc</filename> might look like this:</para> | ||||
| 
 | ||||
|       <programlisting>exec ssh-agent <replaceable>startxfce4</replaceable></programlisting> | ||||
| 	<programlisting>exec ssh-agent <replaceable>startxfce4</replaceable></programlisting> | ||||
| 
 | ||||
|       <para>This launches &man.ssh-agent.1;, which in turn launches | ||||
| 	<application>XFCE</application>, every time | ||||
| 	<application>&xorg;</application> starts.  Once | ||||
| 	<application>&xorg;</application> has been restarted so that | ||||
| 	the changes can take effect, run &man.ssh-add.1; to load all | ||||
| 	of the <acronym>SSH</acronym> keys.</para> | ||||
|     </sect3> | ||||
| 	<para>This launches &man.ssh-agent.1;, which in turn launches | ||||
| 	  <application>XFCE</application>, every time | ||||
| 	  <application>&xorg;</application> starts.  Once | ||||
| 	  <application>&xorg;</application> has been restarted so that | ||||
| 	  the changes can take effect, run &man.ssh-add.1; to load all | ||||
| 	  of the <acronym>SSH</acronym> keys.</para> | ||||
|       </sect3> | ||||
| 
 | ||||
|     <sect3 xml:id="security-ssh-tunneling"> | ||||
|       <title><acronym>SSH</acronym> Tunneling</title> | ||||
|       <sect3 xml:id="security-ssh-tunneling"> | ||||
| 	<title><acronym>SSH</acronym> Tunneling</title> | ||||
| 
 | ||||
|       <indexterm> | ||||
| 	<primary>OpenSSH</primary> | ||||
| 	<secondary>tunneling</secondary> | ||||
|       </indexterm> | ||||
| 	<indexterm> | ||||
| 	  <primary>OpenSSH</primary> | ||||
| 	  <secondary>tunneling</secondary> | ||||
| 	</indexterm> | ||||
| 
 | ||||
|       <para><application>OpenSSH</application> has the ability to | ||||
| 	create a tunnel to encapsulate another protocol in an | ||||
| 	encrypted session.</para> | ||||
| 	<para><application>OpenSSH</application> has the ability to | ||||
| 	  create a tunnel to encapsulate another protocol in an | ||||
| 	  encrypted session.</para> | ||||
| 
 | ||||
|       <para>The following command tells &man.ssh.1; to create a | ||||
| 	tunnel for &man.telnet.1;:</para> | ||||
| 	<para>The following command tells &man.ssh.1; to create a | ||||
| 	  tunnel for &man.telnet.1;:</para> | ||||
| 
 | ||||
|       <screen>&prompt.user; <userinput>ssh -2 -N -f -L <replaceable>5023:localhost:23 user@foo.example.com</replaceable></userinput> | ||||
| 	<screen>&prompt.user; <userinput>ssh -2 -N -f -L <replaceable>5023:localhost:23 user@foo.example.com</replaceable></userinput> | ||||
| &prompt.user;</screen> | ||||
| 
 | ||||
|       <para>This example uses the following options:</para> | ||||
| 	<para>This example uses the following options:</para> | ||||
| 
 | ||||
|       <variablelist> | ||||
| 	<varlistentry> | ||||
| 	  <term><option>-2</option></term> | ||||
| 	<variablelist> | ||||
| 	  <varlistentry> | ||||
| 	    <term><option>-2</option></term> | ||||
| 
 | ||||
| 	  <listitem> | ||||
| 	    <para>Forces &man.ssh.1; to use version 2 to connect to | ||||
| 	      the server.</para> | ||||
| 	  </listitem> | ||||
| 	</varlistentry> | ||||
| 	    <listitem> | ||||
| 	      <para>Forces &man.ssh.1; to use version 2 to connect to | ||||
| 		the server.</para> | ||||
| 	    </listitem> | ||||
| 	  </varlistentry> | ||||
| 
 | ||||
| 	<varlistentry> | ||||
| 	  <term><option>-N</option></term> | ||||
| 	  <varlistentry> | ||||
| 	    <term><option>-N</option></term> | ||||
| 
 | ||||
| 	  <listitem> | ||||
| 	    <para>Indicates no command, or tunnel only.  If omitted, | ||||
| 	      &man.ssh.1; initiates a normal session.</para> | ||||
| 	  </listitem> | ||||
| 	</varlistentry> | ||||
| 	    <listitem> | ||||
| 	      <para>Indicates no command, or tunnel only.  If omitted, | ||||
| 		&man.ssh.1; initiates a normal session.</para> | ||||
| 	    </listitem> | ||||
| 	  </varlistentry> | ||||
| 
 | ||||
| 	<varlistentry> | ||||
| 	  <term><option>-f</option></term> | ||||
| 	  <varlistentry> | ||||
| 	    <term><option>-f</option></term> | ||||
| 
 | ||||
| 	  <listitem> | ||||
| 	    <para>Forces &man.ssh.1; to run in the background.</para> | ||||
| 	  </listitem> | ||||
| 	</varlistentry> | ||||
| 	    <listitem> | ||||
| 	      <para>Forces &man.ssh.1; to run in the | ||||
| 		background.</para> | ||||
| 	    </listitem> | ||||
| 	  </varlistentry> | ||||
| 
 | ||||
| 	<varlistentry> | ||||
| 	  <term><option>-L</option></term> | ||||
| 	  <varlistentry> | ||||
| 	    <term><option>-L</option></term> | ||||
| 
 | ||||
| 	  <listitem> | ||||
| 	    <para>Indicates a local tunnel in | ||||
| 	      <replaceable>localport:remotehost:remoteport</replaceable> | ||||
| 	      format.</para> | ||||
| 	  </listitem> | ||||
| 	</varlistentry> | ||||
| 	    <listitem> | ||||
| 	      <para>Indicates a local tunnel in | ||||
| 		<replaceable>localport:remotehost:remoteport</replaceable> | ||||
| 		format.</para> | ||||
| 	    </listitem> | ||||
| 	  </varlistentry> | ||||
| 
 | ||||
| 	<varlistentry> | ||||
| 	  <term><option>user@foo.example.com</option></term> | ||||
| 	  <varlistentry> | ||||
| 	    <term><option>user@foo.example.com</option></term> | ||||
| 
 | ||||
| 	  <listitem> | ||||
| 	    <para>The login name to use on the specified remote | ||||
| 	      <acronym>SSH</acronym> server.</para> | ||||
| 	  </listitem> | ||||
| 	</varlistentry> | ||||
|       </variablelist> | ||||
| 	    <listitem> | ||||
| 	      <para>The login name to use on the specified remote | ||||
| 		<acronym>SSH</acronym> server.</para> | ||||
| 	    </listitem> | ||||
| 	  </varlistentry> | ||||
| 	</variablelist> | ||||
| 
 | ||||
|       <para>An <acronym>SSH</acronym> tunnel works by creating a | ||||
| 	listen socket on <systemitem>localhost</systemitem> on the | ||||
| 	specified port.  It then forwards any connections received on | ||||
| 	the local host/port via the <acronym>SSH</acronym> connection | ||||
| 	to the specified remote host and port.</para> | ||||
| 	<para>An <acronym>SSH</acronym> tunnel works by creating a | ||||
| 	  listen socket on <systemitem>localhost</systemitem> on the | ||||
| 	  specified port.  It then forwards any connections received | ||||
| 	  on the local host/port via the <acronym>SSH</acronym> | ||||
| 	  connection to the specified remote host and port.</para> | ||||
| 
 | ||||
|       <para>In the example, port <replaceable>5023</replaceable> on | ||||
| 	<systemitem>localhost</systemitem> is forwarded to port | ||||
| 	<replaceable>23</replaceable> on | ||||
| 	<systemitem>localhost</systemitem> of the remote machine. | ||||
| 	Since <replaceable>23</replaceable> is used by &man.telnet.1;, | ||||
| 	this creates an encrypted &man.telnet.1; session through an | ||||
| 	<acronym>SSH</acronym> tunnel.</para> | ||||
| 	<para>In the example, port <replaceable>5023</replaceable> on | ||||
| 	  <systemitem>localhost</systemitem> is forwarded to port | ||||
| 	  <replaceable>23</replaceable> on | ||||
| 	  <systemitem>localhost</systemitem> of the remote machine. | ||||
| 	  Since <replaceable>23</replaceable> is used by | ||||
| 	  &man.telnet.1;, this creates an encrypted &man.telnet.1; | ||||
| 	  session through an <acronym>SSH</acronym> tunnel.</para> | ||||
| 
 | ||||
|       <para>This can be used to wrap any number of insecure TCP | ||||
| 	protocols such as SMTP, POP3, and FTP.</para> | ||||
| 	<para>This can be used to wrap any number of insecure TCP | ||||
| 	  protocols such as SMTP, POP3, and FTP.</para> | ||||
| 
 | ||||
|       <example> | ||||
| 	<title>Using &man.ssh.1; to Create a Secure Tunnel for | ||||
| 	  SMTP</title> | ||||
| 	<example> | ||||
| 	  <title>Using &man.ssh.1; to Create a Secure Tunnel for | ||||
| 	    SMTP</title> | ||||
| 
 | ||||
| 	<screen>&prompt.user; <userinput>ssh -2 -N -f -L <replaceable>5025:localhost:25 user@mailserver.example.com</replaceable></userinput> | ||||
| 	  <screen>&prompt.user; <userinput>ssh -2 -N -f -L <replaceable>5025:localhost:25 user@mailserver.example.com</replaceable></userinput> | ||||
| user@mailserver.example.com's password: <userinput>*****</userinput> | ||||
| &prompt.user; <userinput>telnet localhost 5025</userinput> | ||||
| Trying 127.0.0.1... | ||||
|  | @ -2785,14 +2788,15 @@ Connected to localhost. | |||
| Escape character is '^]'. | ||||
| 220 mailserver.example.com ESMTP</screen> | ||||
| 
 | ||||
| 	<para>This can be used in conjunction with &man.ssh-keygen.1; | ||||
| 	  and additional user accounts to create a more seamless | ||||
| 	  <acronym>SSH</acronym> tunneling environment.  Keys can be | ||||
| 	  used in place of typing a password, and the tunnels can be | ||||
| 	  run as a separate user.</para> | ||||
|       </example> | ||||
| 	  <para>This can be used in conjunction with | ||||
| 	    &man.ssh-keygen.1; and additional user accounts to create | ||||
| 	    a more seamless <acronym>SSH</acronym> tunneling | ||||
| 	    environment.  Keys can be used in place of typing a | ||||
| 	    password, and the tunnels can be run as a separate | ||||
| 	    user.</para> | ||||
| 	</example> | ||||
| 
 | ||||
|       <example> | ||||
| 	<example> | ||||
| 	  <title>Secure Access of a POP3 Server</title> | ||||
| 
 | ||||
| 	  <para>In this example, there is an <acronym>SSH</acronym> | ||||
|  | @ -2939,11 +2943,10 @@ user@unfirewalled-system.example.org's password: <userinput>*******</userinput>< | |||
|       <primary>ACL</primary> | ||||
|     </indexterm> | ||||
| 
 | ||||
|     <para>Access Control Lists (<acronym>ACL</acronym>s) | ||||
|       extend the standard &unix; permission model in a &posix;.1e | ||||
|       compatible way.  This permits an administrator to | ||||
|       take advantage of a more fine-grained permissions | ||||
|       model.</para> | ||||
|     <para>Access Control Lists (<acronym>ACL</acronym>s) extend the | ||||
|       standard &unix; permission model in a &posix;.1e compatible way. | ||||
|       This permits an administrator to take advantage of a more | ||||
|       fine-grained permissions model.</para> | ||||
| 
 | ||||
|     <para>The &os; <filename>GENERIC</filename> kernel provides | ||||
|       <acronym>ACL</acronym> support for <acronym>UFS</acronym> file | ||||
|  | @ -2956,78 +2959,76 @@ user@unfirewalled-system.example.org's password: <userinput>*******</userinput>< | |||
|     <para>If this option is not compiled in, a warning message will be | ||||
|       displayed when attempting to mount a file system with | ||||
|       <acronym>ACL</acronym> support.  <acronym>ACL</acronym>s rely on | ||||
|       extended attributes which | ||||
|       are natively supported in | ||||
|       extended attributes which are natively supported in | ||||
|       <acronym>UFS2</acronym>.</para> | ||||
| 
 | ||||
|     <para>This chapter describes how to enable | ||||
|       <acronym>ACL</acronym> support and provides some usage | ||||
|       examples.</para> | ||||
| 
 | ||||
|    <sect2> | ||||
|      <title>Enabling <acronym>ACL</acronym> Support</title> | ||||
|     <sect2> | ||||
|       <title>Enabling <acronym>ACL</acronym> Support</title> | ||||
| 
 | ||||
|     <para><acronym>ACL</acronym>s are enabled by the mount-time | ||||
|       administrative flag, <option>acls</option>, which may be added | ||||
|       to <filename>/etc/fstab</filename>.  The mount-time flag can | ||||
|       also be automatically set in a persistent manner using | ||||
|       &man.tunefs.8; to modify a superblock <acronym>ACL</acronym>s | ||||
|       flag in the file system header.  In general, it is preferred | ||||
|       to use the superblock flag for several reasons:</para> | ||||
|       <para><acronym>ACL</acronym>s are enabled by the mount-time | ||||
| 	administrative flag, <option>acls</option>, which may be added | ||||
| 	to <filename>/etc/fstab</filename>.  The mount-time flag can | ||||
| 	also be automatically set in a persistent manner using | ||||
| 	&man.tunefs.8; to modify a superblock <acronym>ACL</acronym>s | ||||
| 	flag in the file system header.  In general, it is preferred | ||||
| 	to use the superblock flag for several reasons:</para> | ||||
| 
 | ||||
|     <itemizedlist> | ||||
|       <listitem> | ||||
| 	<para>The superblock flag cannot be | ||||
| 	  changed by a remount using <option>mount -u</option> as it | ||||
| 	  requires a complete <command>umount</command> and fresh <command>mount</command>. | ||||
| 	  This means that <acronym>ACL</acronym>s cannot be enabled on | ||||
| 	  the root file system after boot.  It also means that | ||||
| 	  <acronym>ACL</acronym> support on | ||||
| 	  a file system cannot be changed while the system is in | ||||
| 	  use.</para> | ||||
|       </listitem> | ||||
|       <itemizedlist> | ||||
| 	<listitem> | ||||
| 	  <para>The superblock flag cannot be changed by a remount | ||||
| 	    using <option>mount -u</option> as it requires a complete | ||||
| 	    <command>umount</command> and fresh | ||||
| 	    <command>mount</command>.  This means that | ||||
| 	    <acronym>ACL</acronym>s cannot be enabled on the root file | ||||
| 	    system after boot.  It also means that | ||||
| 	    <acronym>ACL</acronym> support on a file system cannot be | ||||
| 	    changed while the system is in use.</para> | ||||
| 	</listitem> | ||||
| 
 | ||||
|       <listitem> | ||||
| 	<para>Setting the superblock flag causes the file system | ||||
| 	  to always be mounted with <acronym>ACL</acronym>s enabled, | ||||
| 	  even if there is not an <filename>fstab</filename> entry | ||||
| 	  or if the devices re-order.  This prevents accidental | ||||
| 	  mounting of the file system without <acronym>ACL</acronym> | ||||
| 	  support.</para> | ||||
|       </listitem> | ||||
|     </itemizedlist> | ||||
| 	<listitem> | ||||
| 	  <para>Setting the superblock flag causes the file system to | ||||
| 	    always be mounted with <acronym>ACL</acronym>s enabled, | ||||
| 	    even if there is not an <filename>fstab</filename> entry | ||||
| 	    or if the devices re-order.  This prevents accidental | ||||
| 	    mounting of the file system without <acronym>ACL</acronym> | ||||
| 	    support.</para> | ||||
| 	</listitem> | ||||
|       </itemizedlist> | ||||
| 
 | ||||
|     <note> | ||||
|       <para>It is desirable to discourage accidental mounting without | ||||
| 	<acronym>ACL</acronym>s enabled because nasty things can | ||||
| 	happen if <acronym>ACL</acronym>s are enabled, then disabled, | ||||
| 	then re-enabled without flushing the extended attributes.  In | ||||
| 	general, once <acronym>ACL</acronym>s are enabled on a | ||||
| 	file system, they should not be disabled, as the resulting file | ||||
| 	protections may not be compatible with those intended by the | ||||
| 	users of the system, and re-enabling <acronym>ACL</acronym>s | ||||
| 	may re-attach the previous <acronym>ACL</acronym>s to files | ||||
| 	that have since had their permissions changed, resulting in | ||||
| 	unpredictable behavior.</para> | ||||
|     </note> | ||||
|       <note> | ||||
| 	<para>It is desirable to discourage accidental mounting | ||||
| 	  without <acronym>ACL</acronym>s enabled because nasty things | ||||
| 	  can happen if <acronym>ACL</acronym>s are enabled, then | ||||
| 	  disabled, then re-enabled without flushing the extended | ||||
| 	  attributes.  In general, once <acronym>ACL</acronym>s are | ||||
| 	  enabled on a file system, they should not be disabled, as | ||||
| 	  the resulting file protections may not be compatible with | ||||
| 	  those intended by the users of the system, and re-enabling | ||||
| 	  <acronym>ACL</acronym>s may re-attach the previous | ||||
| 	  <acronym>ACL</acronym>s to files that have since had their | ||||
| 	  permissions changed, resulting in unpredictable | ||||
| 	  behavior.</para> | ||||
|       </note> | ||||
| 
 | ||||
|     <para>File systems with <acronym>ACL</acronym>s enabled will | ||||
|       show a plus (<literal>+</literal>) sign in their permission | ||||
|       settings:</para> | ||||
|       <para>File systems with <acronym>ACL</acronym>s enabled will | ||||
| 	show a plus (<literal>+</literal>) sign in their permission | ||||
| 	settings:</para> | ||||
| 
 | ||||
|     <programlisting>drwx------  2 robert  robert  512 Dec 27 11:54 private | ||||
|       <programlisting>drwx------  2 robert  robert  512 Dec 27 11:54 private | ||||
| drwxrwx---+ 2 robert  robert  512 Dec 23 10:57 directory1 | ||||
| drwxrwx---+ 2 robert  robert  512 Dec 22 10:20 directory2 | ||||
| drwxrwx---+ 2 robert  robert  512 Dec 27 11:57 directory3 | ||||
| drwxr-xr-x  2 robert  robert  512 Nov 10 11:54 public_html</programlisting> | ||||
| 
 | ||||
|     <para>In this example, | ||||
|       <filename>directory1</filename>, | ||||
|       <filename>directory2</filename>, and | ||||
|       <filename>directory3</filename> | ||||
|       are all taking advantage of <acronym>ACL</acronym>s, whereas | ||||
|       <filename>public_html</filename> | ||||
|       is not.</para> | ||||
|       <para>In this example, <filename>directory1</filename>, | ||||
| 	<filename>directory2</filename>, and | ||||
| 	<filename>directory3</filename> are all taking advantage of | ||||
| 	<acronym>ACL</acronym>s, whereas | ||||
| 	<filename>public_html</filename> is not.</para> | ||||
|     </sect2> | ||||
| 
 | ||||
|     <sect2> | ||||
|  | @ -3047,11 +3048,11 @@ drwxr-xr-x  2 robert  robert  512 Nov 10 11:54 public_html</programlisting> | |||
| 	other::r--</screen> | ||||
| 
 | ||||
|       <para>To change the <acronym>ACL</acronym> settings on this | ||||
| 	file, use <command>setfacl</command>.  To remove all of the currently defined | ||||
| 	<acronym>ACL</acronym>s from a file or file system, include | ||||
| 	<option>-k</option>.  However, the preferred method is to use | ||||
| 	<option>-b</option> as it leaves the basic fields required | ||||
| 	for <acronym>ACL</acronym>s to work.</para> | ||||
| 	file, use <command>setfacl</command>.  To remove all of the | ||||
| 	currently defined <acronym>ACL</acronym>s from a file or file | ||||
| 	system, include <option>-k</option>.  However, the preferred | ||||
| 	method is to use <option>-b</option> as it leaves the basic | ||||
| 	fields required for <acronym>ACL</acronym>s to work.</para> | ||||
| 
 | ||||
|       <screen>&prompt.user; <userinput>setfacl -k test</userinput></screen> | ||||
| 
 | ||||
|  | @ -3060,12 +3061,12 @@ drwxr-xr-x  2 robert  robert  512 Nov 10 11:54 public_html</programlisting> | |||
| 
 | ||||
|       <screen>&prompt.user; <userinput>setfacl -m u:trhodes:rwx,group:web:r--,o::--- test</userinput></screen> | ||||
| 
 | ||||
|       <para>In this example, there were no | ||||
| 	pre-defined entries, as they were removed by the previous | ||||
| 	command.  This command restores the default options and assigns the | ||||
| 	options listed.  If a user or group is added which does not | ||||
| 	exist on the system, an <errorname>Invalid | ||||
| 	  argument</errorname> error will be displayed.</para> | ||||
|       <para>In this example, there were no pre-defined entries, as | ||||
| 	they were removed by the previous command.  This command | ||||
| 	restores the default options and assigns the options listed. | ||||
| 	If a user or group is added which does not exist on the | ||||
| 	system, an <errorname>Invalid argument</errorname> error will | ||||
| 	be displayed.</para> | ||||
| 
 | ||||
|       <para>Refer to &man.getfacl.1; and &man.setfacl.1; for more | ||||
| 	information about the options available for these | ||||
|  | @ -3494,13 +3495,13 @@ UWWemqWuz3lAZuORQ9KX | |||
|       their allocation among users, provide for system monitoring, | ||||
|       and minimally track a user's commands.</para> | ||||
| 
 | ||||
|     <para>Process accounting has both positive and negative points.  One | ||||
|       of the positives is that an intrusion may be narrowed down to | ||||
|       the point of entry.  A negative is the amount of logs | ||||
|     <para>Process accounting has both positive and negative points. | ||||
|       One of the positives is that an intrusion may be narrowed down | ||||
|       to the point of entry.  A negative is the amount of logs | ||||
|       generated by process accounting, and the disk space they may | ||||
|       require.  This section walks an administrator through the | ||||
|       basics of process accounting.</para> | ||||
|        | ||||
|       require.  This section walks an administrator through the basics | ||||
|       of process accounting.</para> | ||||
| 
 | ||||
|     <note> | ||||
|       <para>If more fine-grained accounting is needed, refer to | ||||
| 	<xref linkend="audit"/>.</para> | ||||
|  | @ -3520,16 +3521,16 @@ UWWemqWuz3lAZuORQ9KX | |||
|       <para>Once enabled, accounting will begin to track information | ||||
| 	such as <acronym>CPU</acronym> statistics and executed | ||||
| 	commands.  All accounting logs are in a non-human readable | ||||
| 	format which can be viewed using <command>sa</command>.  If issued | ||||
| 	without any options, <command>sa</command> prints information relating to | ||||
| 	the number of per-user calls, the total elapsed time in | ||||
| 	minutes, total <acronym>CPU</acronym> and user time in | ||||
| 	minutes, and the average number of <acronym>I/O</acronym> operations.  Refer to | ||||
| 	&man.sa.8; for the list of available options which control the | ||||
| 	output.</para> | ||||
| 	format which can be viewed using <command>sa</command>.  If | ||||
| 	issued without any options, <command>sa</command> prints | ||||
| 	information relating to the number of per-user calls, the | ||||
| 	total elapsed time in minutes, total <acronym>CPU</acronym> | ||||
| 	and user time in minutes, and the average number of | ||||
| 	<acronym>I/O</acronym> operations.  Refer to &man.sa.8; for | ||||
| 	the list of available options which control the output.</para> | ||||
| 
 | ||||
|       <para>To display the commands issued | ||||
| 	by users, use <command>lastcomm</command>.  For example, this command | ||||
|       <para>To display the commands issued by users, use | ||||
| 	<command>lastcomm</command>.  For example, this command | ||||
| 	prints out all usage of <command>ls</command> by <systemitem | ||||
| 	  class="username">trhodes</systemitem> on the | ||||
| 	<literal>ttyp1</literal> terminal:</para> | ||||
|  | @ -3559,102 +3560,96 @@ UWWemqWuz3lAZuORQ9KX | |||
|       controlled through a flat file, | ||||
|       <filename>/etc/login.conf</filename>.  While this method | ||||
|       is still supported, any changes require a multi-step process of | ||||
|       editing this file in order to divide users into various group labels known as classes, | ||||
|       rebuilding the resource database using | ||||
|       <command>cap_mkdb</command>, making necessary changes | ||||
|       to <filename>/etc/master.passwd</filename>, and rebuilding | ||||
|       the password database using | ||||
|       <command>pwd_mkdb</command>.  This  could be | ||||
|       time consuming, depending upon the number of users to | ||||
|       editing this file in order to divide users into various group | ||||
|       labels known as classes, rebuilding the resource database using | ||||
|       <command>cap_mkdb</command>, making necessary changes to | ||||
|       <filename>/etc/master.passwd</filename>, and rebuilding the | ||||
|       password database using <command>pwd_mkdb</command>.  This | ||||
|       could be time consuming, depending upon the number of users to | ||||
|       configure.</para> | ||||
| 
 | ||||
|     <para>Beginning with &os; 9.0-RELEASE, | ||||
|       <command>rctl</command> can be used to provide a more fine-grained | ||||
|       method of controlling resources limits for users.  This | ||||
|       command supports much more than users as it can be used to set | ||||
|       resource constraints on processes, jails, and the original login | ||||
|       class.  These advanced features provide administrators and users | ||||
|       with methods to control resources through the command line and | ||||
|       to set rules on system initialization using a configuration | ||||
|       <command>rctl</command> can be used to provide a more | ||||
|       fine-grained method of controlling resources limits for users. | ||||
|       This command supports much more than users as it can be used to | ||||
|       set resource constraints on processes, jails, and the original | ||||
|       login class.  These advanced features provide administrators and | ||||
|       users with methods to control resources through the command line | ||||
|       and to set rules on system initialization using a configuration | ||||
|       file.</para> | ||||
| 
 | ||||
|    <sect2> | ||||
|      <title>Enabling and Configuring Resource Limits</title> | ||||
|     <sect2> | ||||
|       <title>Enabling and Configuring Resource Limits</title> | ||||
| 
 | ||||
|      <para>By default, kernel support for <command>rctl</command> is | ||||
|        not built-in, meaning that the kernel will first need to be | ||||
|        recompiled using the instructions in <xref | ||||
| 	linkend="kernelconfig"/>.  Add these lines to either | ||||
|       <filename>GENERIC</filename> or a custom kernel | ||||
|       configuration file, then rebuild the kernel:</para> | ||||
|       <para>By default, kernel support for <command>rctl</command> is | ||||
| 	not built-in, meaning that the kernel will first need to be | ||||
| 	recompiled using the instructions in <xref | ||||
| 	  linkend="kernelconfig"/>.  Add these lines to either | ||||
| 	<filename>GENERIC</filename> or a custom kernel configuration | ||||
| 	file, then rebuild the kernel:</para> | ||||
| 
 | ||||
|     <programlisting>options         RACCT | ||||
|       <programlisting>options         RACCT | ||||
| options         RCTL</programlisting> | ||||
| 
 | ||||
|     <para>Once the system has rebooted into the new kernel, | ||||
|       <command>rctl</command> may be used to set rules for the | ||||
|       system.</para> | ||||
|       <para>Once the system has rebooted into the new kernel, | ||||
| 	<command>rctl</command> may be used to set rules for the | ||||
| 	system.</para> | ||||
| 
 | ||||
|     <para>Rule syntax is controlled through the use of | ||||
|       a subject, | ||||
|       subject-id, resource, | ||||
|       and action, as seen in this example | ||||
|       rule:</para> | ||||
|       <para>Rule syntax is controlled through the use of a subject, | ||||
| 	subject-id, resource, and action, as seen in this example | ||||
| 	rule:</para> | ||||
| 
 | ||||
|     <programlisting>user:trhodes:maxproc:deny=10/user</programlisting> | ||||
|       <programlisting>user:trhodes:maxproc:deny=10/user</programlisting> | ||||
| 
 | ||||
|     <para>In this rule, the subject | ||||
|       is <literal>user</literal>, the subject-id is | ||||
|       <literal>trhodes</literal>, the resource, | ||||
|       <literal>maxproc</literal>, is the maximum | ||||
|       number of processes, and the | ||||
|       action is <literal>deny</literal>, which blocks any | ||||
|       new processes from being created.  This means that the | ||||
|       user, <literal>trhodes</literal>, will be constrained to no greater than | ||||
|       <literal>10</literal> processes.  Other possible | ||||
|       actions include logging to the console, passing a | ||||
|       notification to &man.devd.8;, or sending a sigterm to the | ||||
|       process.</para> | ||||
|       <para>In this rule, the subject is <literal>user</literal>, the | ||||
| 	subject-id is <literal>trhodes</literal>, the resource, | ||||
| 	<literal>maxproc</literal>, is the maximum number of | ||||
| 	processes, and the action is <literal>deny</literal>, which | ||||
| 	blocks any new processes from being created.  This means that | ||||
| 	the user, <literal>trhodes</literal>, will be constrained to | ||||
| 	no greater than <literal>10</literal> processes.  Other | ||||
| 	possible actions include logging to the console, passing a | ||||
| 	notification to &man.devd.8;, or sending a sigterm to the | ||||
| 	process.</para> | ||||
| 
 | ||||
|     <para>Some care must be taken when adding rules.  Since this user | ||||
|       is constrained to <literal>10</literal> processes, this example | ||||
|       will prevent the user from performing other | ||||
|       tasks after logging in and executing a | ||||
|       <command>screen</command> session.  Once a resource limit has | ||||
|       been hit, an error will be printed, as in this example:</para> | ||||
|       <para>Some care must be taken when adding rules.  Since this | ||||
| 	user is constrained to <literal>10</literal> processes, this | ||||
| 	example will prevent the user from performing other tasks | ||||
| 	after logging in and executing a | ||||
| 	<command>screen</command> session.  Once a resource limit has | ||||
| 	been hit, an error will be printed, as in this example:</para> | ||||
| 
 | ||||
|     <screen>&prompt.user; <userinput>man test</userinput> | ||||
|       <screen>&prompt.user; <userinput>man test</userinput> | ||||
|     /usr/bin/man: Cannot fork: Resource temporarily unavailable | ||||
| eval: Cannot fork: Resource temporarily unavailable</screen> | ||||
| 
 | ||||
|     <para>As another example, | ||||
|       a jail can be prevented from exceeding a memory limit.  This rule could be | ||||
|       written as:</para> | ||||
|       <para>As another example, a jail can be prevented from exceeding | ||||
| 	a memory limit.  This rule could be written as:</para> | ||||
| 
 | ||||
|     <screen>&prompt.root; <userinput>rctl -a jail:httpd:memoryuse:deny=2G/jail</userinput></screen> | ||||
|       <screen>&prompt.root; <userinput>rctl -a jail:httpd:memoryuse:deny=2G/jail</userinput></screen> | ||||
| 
 | ||||
|     <para>Rules will persist across reboots if they have been | ||||
|       added to <filename>/etc/rctl.conf</filename>.  The format is a | ||||
|       rule, without the preceding command.  For example, the previous | ||||
|       rule could be added as:</para> | ||||
|       <para>Rules will persist across reboots if they have been added | ||||
| 	to <filename>/etc/rctl.conf</filename>.  The format is a rule, | ||||
| 	without the preceding command.  For example, the previous rule | ||||
| 	could be added as:</para> | ||||
| 
 | ||||
|     <programlisting># Block jail from using more than 2G memory: | ||||
|       <programlisting># Block jail from using more than 2G memory: | ||||
| jail:httpd:memoryuse:deny=2G/jail</programlisting> | ||||
| 
 | ||||
|     <para>To remove a rule, use <command>rctl</command> to | ||||
|       remove it from the list:</para> | ||||
|       <para>To remove a rule, use <command>rctl</command> to remove it | ||||
| 	from the list:</para> | ||||
| 
 | ||||
|     <screen>&prompt.root; <userinput>rctl -r user:trhodes:maxproc:deny=10/user</userinput></screen> | ||||
|       <screen>&prompt.root; <userinput>rctl -r user:trhodes:maxproc:deny=10/user</userinput></screen> | ||||
| 
 | ||||
|     <para>A method for removing all rules is documented in &man.rctl.8;. | ||||
|       However, if removing all rules for a single user is required, | ||||
|       this command may be issued:</para> | ||||
|       <para>A method for removing all rules is documented in | ||||
| 	&man.rctl.8;.  However, if removing all rules for a single | ||||
| 	user is required, this command may be issued:</para> | ||||
| 
 | ||||
|     <screen>&prompt.root; <userinput>rctl -r user:trhodes</userinput></screen> | ||||
|       <screen>&prompt.root; <userinput>rctl -r user:trhodes</userinput></screen> | ||||
| 
 | ||||
|     <para>Many other resources exist which can be used to exert | ||||
|       additional control over various <literal>subjects</literal>. | ||||
|       See &man.rctl.8; to learn about them.</para> | ||||
|       <para>Many other resources exist which can be used to exert | ||||
| 	additional control over various <literal>subjects</literal>. | ||||
| 	See &man.rctl.8; to learn about them.</para> | ||||
|     </sect2> | ||||
|   </sect1> | ||||
| </chapter> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue