diff --git a/en_US.ISO8859-1/books/handbook/basics/chapter.xml b/en_US.ISO8859-1/books/handbook/basics/chapter.xml index dfa2d22d5a..8cfa367f3a 100644 --- a/en_US.ISO8859-1/books/handbook/basics/chapter.xml +++ b/en_US.ISO8859-1/books/handbook/basics/chapter.xml @@ -428,8 +428,8 @@ console none unknown off secure</programlisting> <listitem> <para>The user name is typed at the - <prompt>login:</prompt> prompt. User names must be - unique on the system as no two users can have the same + <prompt>login:</prompt> prompt. Each user must have + a unique user name. There are a number of rules for creating valid user names which are documented in &man.passwd.5;. It is recommended to use user names @@ -443,9 +443,7 @@ console none unknown off secure</programlisting> <term>Password</term> <listitem> - <para>Each user account should have an associated - password. While the password can be blank, this is - highly discouraged.</para> + <para>Each account has an associated password.</para> </listitem> </varlistentry> @@ -496,9 +494,8 @@ console none unknown off secure</programlisting> <term>Password change time</term> <listitem> - <para>By default, &os; does not force users to change - their passwords periodically. Password expiration can - be enforced on a per-user basis using &man.pw.8;, + <para>By default, passwords do not expire. However, + password expiration can be enabled on a per-user basis, forcing some or all users to change their passwords after a certain amount of time has elapsed.</para> </listitem> @@ -586,7 +583,7 @@ console none unknown off secure</programlisting> the superuser, since an extra space or missing character can mean irreparable data loss.</para> - <para>There are several ways to become gain superuser + <para>There are several ways to gain superuser privilege. While one can log in as <systemitem class="username">root</systemitem>, this is highly discouraged.</para> @@ -717,11 +714,12 @@ Password: <filename>/usr/share/skel</filename>, and can optionally mail the new user a welcome message. This utility must be run as the - <systemitem class="username">superuser</systemitem></para> + <systemitem class="username">superuser</systemitem>.</para> <para>The &man.adduser.8; utility is interactive and walks through the steps for creating a new user account. As seen - in Example 4.2, either input the required information or + in <xref linkend="users-modifying-adduser"/>, + either input the required information or press <keycap>Return</keycap> to accept the default value shown in square brackets. In this example, the user has been invited into the @@ -730,7 +728,7 @@ Password: access. When finished, the utility will prompt to either create another user or to exit.</para> - <example> + <example xml:id="users-modifying-adduser"> <title>Adding a User on &os;</title> <screen>&prompt.root; <userinput>adduser</userinput> @@ -868,7 +866,7 @@ Removing user (jru): mailspool home passwd. <para>When passed no options, aside from an optional username, &man.chpass.1; displays an editor containing user - information. When the user exists from the editor, the user + information. When the user exits from the editor, the user database is updated with the new information.</para> <note> @@ -877,15 +875,16 @@ Removing user (jru): mailspool home passwd. superuser.</para> </note> - <para>In Example 4.4, the superuser has typed + <para>In <xref linkend="users-modifying-chpass-su"/>, + the superuser has typed <command>chpass jru</command> and is now viewing the fields that can be changed for this user. If <systemitem class="username">jru</systemitem> runs this command instead, only the last six fields will be displayed - and available for editing. This is shown in Example - 4.5.</para> + and available for editing. This is shown in + <xref linkend="users-modifying-chpass-ru"/>.</para> - <example> + <example xml:id="users-modifying-chpass-su"> <title>Using <command>chpass</command> as Superuser</title> @@ -906,7 +905,7 @@ Home Phone: Other information:</screen> </example> - <example> + <example xml:id="users-modifying-chpass-ru"> <title>Using <command>chpass</command> as Regular User</title> @@ -1165,8 +1164,8 @@ passwd: done</screen> &man.sysctl.8;. Setting this limit too small may hinder a user's productivity as it is often useful to be logged in multiple times or to execute pipelines. Some tasks, - such as compiling a large program, spawn multiple - processes and other intermediate preprocessors.</para> + such as compiling a large program, start lots of + processes.</para> </listitem> </varlistentry> @@ -1241,8 +1240,8 @@ passwd: done</screen> <primary>limiting users</primary> <secondary>sbsize</secondary> </indexterm>, - a user may consume in order to limit network - communications.</para> + a user may consume. This can be generally used to limit + network communications.</para> </listitem> </varlistentry> @@ -1395,7 +1394,7 @@ teamtwo:*:1100:jru,db</screen> <para>In this example, the argument to <option>-m</option> is a comma-delimited list of users who are to be added to the group. Unlike the previous example, these users are appended - to the group list and do not replace the list of existing + to the group and do not replace existing users in the group.</para> <example> diff --git a/en_US.ISO8859-1/books/handbook/users/Makefile b/en_US.ISO8859-1/books/handbook/users/Makefile deleted file mode 100644 index b44bd80628..0000000000 --- a/en_US.ISO8859-1/books/handbook/users/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -# -# Build the Handbook with just the content from this chapter. -# -# $FreeBSD$ -# - -CHAPTERS= users/chapter.xml - -VPATH= .. - -MASTERDOC= ${.CURDIR}/../${DOC}.${DOCBOOKSUFFIX} - -DOC_PREFIX?= ${.CURDIR}/../../../.. - -.include "../Makefile" diff --git a/en_US.ISO8859-1/books/handbook/users/chapter.xml b/en_US.ISO8859-1/books/handbook/users/chapter.xml deleted file mode 100644 index 03f2dcca59..0000000000 --- a/en_US.ISO8859-1/books/handbook/users/chapter.xml +++ /dev/null @@ -1,1026 +0,0 @@ -<?xml version="1.0" encoding="iso-8859-1"?> -<!-- - The FreeBSD Documentation Project - - $FreeBSD$ ---> -<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="users"> - <info><title>Users and Basic Account Management</title> - <authorgroup> - <author><personname><firstname>Neil</firstname><surname>Blakey-Milner</surname></personname><contrib>Contributed by </contrib></author> - </authorgroup> - - </info> - - - - <sect1 xml:id="users-synopsis"> - <title>Synopsis</title> - - <para>&os; allows multiple users to use the computer at the same - time. While only one user can sit in front of the screen and - use the keyboard at any one time, any number of users can log - in to the system through the network. To use the system, every - user must have a user account.</para> - - <para>After reading this chapter, you will know:</para> - - <itemizedlist> - <listitem> - <para>The differences between the various user accounts on a - &os; system.</para> - </listitem> - - <listitem> - <para>How to add and remove user accounts.</para> - </listitem> - - <listitem> - <para>How to change account details, such as the user's full - name or preferred shell.</para> - </listitem> - - <listitem> - <para>How to set limits on a per-account basis to control the - resources, such as memory and CPU time, that accounts and - groups of accounts are allowed to access.</para> - </listitem> - - <listitem> - <para>How to use groups to make account management - easier.</para> - </listitem> - </itemizedlist> - - <para>Before reading this chapter, you should:</para> - - <itemizedlist> - <listitem> - <para>Understand the <link linkend="basics">basics of &unix; - and &os;</link>.</para> - </listitem> - </itemizedlist> - </sect1> - - <sect1 xml:id="users-introduction"> - <title>Introduction</title> - - <para>Since all access to the &os; system is achieved via accounts - and all processes are run by users, user and account management - is important.</para> - - <para>Every account on a &os; system has certain information - associated with it to identify the account.</para> - - <variablelist> - <varlistentry> - <term>User name</term> - - <listitem> - <para>The user name is typed at the <prompt>login:</prompt> - prompt. User names must be unique on the system as no two - users can have the same user name. There are a number of - rules for creating valid user names, documented in - &man.passwd.5;. Typically user names consist of eight or - fewer all lower case characters in order to maintain - backwards compatibility with applications.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term>Password</term> - - <listitem> - <para>Each account has an associated password. While the - password can be blank, this is highly discouraged and - every account should have a password.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term>User ID (<acronym>UID</acronym>)</term> - - <listitem> - <para>The User ID (<acronym>UID</acronym>) is a number, - traditionally from 0 to 65535<footnote xml:id="users-largeuidgid"> - <para>It is possible to use - <acronym>UID</acronym>s/<acronym>GID</acronym>s as - large as 4294967295, but such IDs can cause serious - problems with software that makes assumptions about - the values of IDs.</para> - </footnote>, used to uniquely identify the user to the - system. Internally, &os; uses the - <acronym>UID</acronym> to identify users. Commands that - allow a user name to be specified will first convert it to - the <acronym>UID</acronym>. Though unlikely, it is - possible for several accounts with different user names to - share the same <acronym>UID</acronym>. As far as &os; is - concerned, these accounts are one user.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term>Group ID (<acronym>GID</acronym>)</term> - - <listitem> - <para>The Group ID (<acronym>GID</acronym>) is a number, - traditionally from 0 to 65535<footnoteref linkend="users-largeuidgid"/>, used to uniquely identify - the primary group that the user belongs to. Groups are a - mechanism for controlling access to resources based on a - user's <acronym>GID</acronym> rather than their - <acronym>UID</acronym>. This can significantly reduce the - size of some configuration files. A user may also be a - member of more than one group.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term>Login class</term> - - <listitem> - <para>Login classes are an extension to the group mechanism - that provide additional flexibility when tailoring the - system to different users.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term>Password change time</term> - - <listitem> - <para>By default &os; does not force users to change their - passwords periodically. Password expiration can be - enforced on a per-user basis, forcing some or all users to - change their passwords after a certain amount of time has - elapsed.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term>Account expiry time</term> - - <listitem> - <para>By default &os; does not expire accounts. When - creating accounts that need a limited lifespan, such as - student accounts in a school, specify the account expiry - date. After the expiry time has elapsed, the account - cannot be used to log in to the system, although the - account's directories and files will remain.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term>User's full name</term> - - <listitem> - <para>The user name uniquely identifies the account to &os;, - but does not necessarily reflect the user's real name. - This information can be associated with the - account.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term>Home directory</term> - - <listitem> - <para>The home directory is the full path to a directory on - the system. This is the user's starting directory when - the user logs in. A common convention is to put all user - home directories under <filename>/home/username</filename> - or <filename>/usr/home/username</filename>. - Each user stores their personal files and subdirectories - in their own home directory.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term>User shell</term> - - <listitem> - <para>The shell provides the default environment users use - to interact with the system. There are many different - kinds of shells, and experienced users will have their own - preferences, which can be reflected in their account - settings.</para> - </listitem> - </varlistentry> - </variablelist> - - <para>There are three main types of accounts: the <link linkend="users-superuser">superuser</link>, <link linkend="users-system">system accounts</link>, and <link linkend="users-user">user accounts</link>. The superuser - account, usually called <systemitem class="username">root</systemitem>, is used to - manage the system with no limitations on privileges. System - accounts are used to run services. User accounts are - assigned to real people and are used to log in and use the - system.</para> - - <sect2 xml:id="users-superuser"> - <title>The Superuser Account</title> - - <indexterm> - <primary>accounts</primary> - <secondary>superuser (root)</secondary> - </indexterm> - <para>The superuser account, usually called - <systemitem class="username">root</systemitem>, is used to perform system - administration tasks and should not be used for day-to-day - tasks like sending and receiving mail, general exploration of - the system, or programming.</para> - - <para>This is because the superuser, unlike normal user - accounts, can operate without limits, and misuse of the - superuser account may result in spectacular disasters. User - accounts are unable to destroy the system by mistake, so it is - generally best to use normal user accounts whenever possible, - unless extra privilege is required.</para> - - <para>Always double and triple-check any commands issued as the - superuser, since an extra space or missing character can mean - irreparable data loss.</para> - - <para>Always create a user account for the system administrator - and use this account to log in to the system for general - usage. This applies equally to multi-user or single-user - systems. Later sections will discuss how to create additional - accounts and how to change between the normal user and - superuser.</para> - </sect2> - - <sect2 xml:id="users-system"> - <title>System Accounts</title> - - <indexterm> - <primary>accounts</primary> - <secondary>system</secondary> - </indexterm> - <para>System accounts are used to run services such as DNS, - mail, and web servers. The reason for this is security; if - all services ran as the superuser, they could act without - restriction.</para> - - <indexterm> - <primary>accounts</primary> - <secondary><systemitem class="username">daemon</systemitem></secondary> - </indexterm> - <indexterm> - <primary>accounts</primary> - <secondary><systemitem class="username">operator</systemitem></secondary> - </indexterm> - <para>Examples of system accounts are - <systemitem class="username">daemon</systemitem>, <systemitem class="username">operator</systemitem>, - <systemitem class="username">bind</systemitem>, <systemitem class="username">news</systemitem>, and - <systemitem class="username">www</systemitem>.</para> - - <indexterm> - <primary>accounts</primary> - <secondary><systemitem class="username">nobody</systemitem></secondary> - </indexterm> - <para><systemitem class="username">nobody</systemitem> is the generic unprivileged - system account. However, the more services that use - <systemitem class="username">nobody</systemitem>, the more files and processes that - user will become associated with, and hence the more - privileged that user becomes.</para> - </sect2> - - <sect2 xml:id="users-user"> - <title>User Accounts</title> - - <indexterm> - <primary>accounts</primary> - <secondary>user</secondary> - </indexterm> - <para>User accounts are the primary means of access for real - people to the system. User accounts insulate the user and - the environment, preventing users from damaging the system - or other users, and allowing users to customize their - environment without affecting others.</para> - - <para>Every person accessing the system should have a unique - user account. This allows the administrator to find out who - is doing what, prevents users from clobbering each others' - settings or reading each others' mail, and so forth.</para> - - <para>Each user can set up their own environment to accommodate - their use of the system, by using alternate shells, editors, - key bindings, and language.</para> - </sect2> - </sect1> - - <sect1 xml:id="users-modifying"> - <title>Modifying Accounts</title> - - <indexterm> - <primary>accounts</primary> - <secondary>modifying</secondary> - </indexterm> - - <para>&os; provides a variety of different commands to manage - user accounts. The most common commands are summarized below, - followed by more detailed examples of their usage.</para> - - <informaltable frame="none" pgwide="1"> - <tgroup cols="2"> - <colspec colwidth="1*"/> - <colspec colwidth="2*"/> - - <thead> - <row> - <entry>Command</entry> - <entry>Summary</entry> - </row> - </thead> - <tbody> - <row> - <entry>&man.adduser.8;</entry> - <entry>The recommended command-line application for adding - new users.</entry> - </row> - - <row> - <entry>&man.rmuser.8;</entry> - <entry>The recommended command-line application for - removing users.</entry> - </row> - - <row> - <entry>&man.chpass.1;</entry> - <entry>A flexible tool for changing user database - information.</entry> - </row> - - <row> - <entry>&man.passwd.1;</entry> - <entry>The simple command-line tool to change user - passwords.</entry> - </row> - - <row> - <entry>&man.pw.8;</entry> - <entry>A powerful and flexible tool for modifying all - aspects of user accounts.</entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <sect2 xml:id="users-adduser"> - <title><command>adduser</command></title> - - <indexterm> - <primary>accounts</primary> - <secondary>adding</secondary> - </indexterm> - <indexterm> - <primary><command>adduser</command></primary> - </indexterm> - <indexterm> - <primary><filename>/usr/share/skel</filename></primary> - </indexterm> - <indexterm><primary>skeleton directory</primary></indexterm> - <para>&man.adduser.8; is a simple program for adding new users - When a new user is added, this program automatically updates - <filename>/etc/passwd</filename> and - <filename>/etc/group</filename>. It also creates a home - directory for the new user, copies in the default - configuration files from <filename>/usr/share/skel</filename>, and can - optionally mail the new user a welcome message.</para> - - <example> - <title>Adding a User on &os;</title> - - <screen>&prompt.root; <userinput>adduser</userinput> -Username: <userinput>jru</userinput> -Full name: <userinput>J. Random User</userinput> -Uid (Leave empty for default): -Login group [jru]: -Login group is jru. Invite jru into other groups? []: <userinput>wheel</userinput> -Login class [default]: -Shell (sh csh tcsh zsh nologin) [sh]: <userinput>zsh</userinput> -Home directory [/home/jru]: -Home directory permissions (Leave empty for default): -Use password-based authentication? [yes]: -Use an empty password? (yes/no) [no]: -Use a random password? (yes/no) [no]: -Enter password: -Enter password again: -Lock out the account after creation? [no]: -Username : jru -Password : **** -Full Name : J. Random User -Uid : 1001 -Class : -Groups : jru wheel -Home : /home/jru -Shell : /usr/local/bin/zsh -Locked : no -OK? (yes/no): <userinput>yes</userinput> -adduser: INFO: Successfully added (jru) to the user database. -Add another user? (yes/no): <userinput>no</userinput> -Goodbye! -&prompt.root;</screen> - </example> - - <note> - <para>Since the password is not echoed when typed, be careful - to not mistype the password when creating the user - account.</para> - </note> - </sect2> - - <sect2 xml:id="users-rmuser"> - <title><command>rmuser</command></title> - - <indexterm><primary><command>rmuser</command></primary></indexterm> - <indexterm> - <primary>accounts</primary> - <secondary>removing</secondary> - </indexterm> - - <para>To completely remove a user from the system use - &man.rmuser.8;. This command performs the following - steps:</para> - - <procedure> - <step> - <para>Removes the user's &man.crontab.1; entry if one - exists.</para> - </step> - - <step> - <para>Removes any &man.at.1; jobs belonging to the - user.</para> - </step> - - <step> - <para>Kills all processes owned by the user.</para> - </step> - - <step> - <para>Removes the user from the system's local password - file.</para> - </step> - - <step> - <para>Removes the user's home directory, if it is owned by - the user.</para> - </step> - - <step> - <para>Removes the incoming mail files belonging to the user - from <filename>/var/mail</filename>.</para> - </step> - - <step> - <para>Removes all files owned by the user from temporary - file storage areas such as <filename>/tmp</filename>.</para> - </step> - - <step> - <para>Finally, removes the username from all groups to which - it belongs in <filename>/etc/group</filename>.</para> - - <note> - <para>If a group becomes empty and the group name is the - same as the username, the group is removed. This - complements the per-user unique groups created by - &man.adduser.8;.</para> - </note> - </step> - </procedure> - - <para>&man.rmuser.8; cannot be used to remove superuser - accounts since that is almost always an indication of massive - destruction.</para> - - <para>By default, an interactive mode is used, as shown - in the following example.</para> - - <example> - <title><command>rmuser</command> Interactive Account - Removal</title> - - <screen>&prompt.root; <userinput>rmuser jru</userinput> -Matching password entry: -jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh -Is this the entry you wish to remove? <userinput>y</userinput> -Remove user's home directory (/home/jru)? <userinput>y</userinput> -Updating password file, updating databases, done. -Updating group file: trusted (removing group jru -- personal group is empty) done. -Removing user's incoming mail file /var/mail/jru: done. -Removing files belonging to jru from /tmp: done. -Removing files belonging to jru from /var/tmp: done. -Removing files belonging to jru from /var/tmp/vi.recover: done. -&prompt.root;</screen> - </example> - </sect2> - - <sect2 xml:id="users-chpass"> - <title><command>chpass</command></title> - - <indexterm><primary><command>chpass</command></primary></indexterm> - <para>&man.chpass.1; can be used to change user database - information such as passwords, shells, and personal - information.</para> - - <para>Only the superuser can change other users' information and - passwords with &man.chpass.1;.</para> - - <para>When passed no options, aside from an optional username, - &man.chpass.1; displays an editor containing user information. - When the user exists from the editor, the user database is - updated with the new information.</para> - - <note> - <para>You will be asked for your password after exiting the - editor if you are not the superuser.</para> - </note> - - <example> - <title>Interactive <command>chpass</command> by - Superuser</title> - - <screen>#Changing user database information for jru. -Login: jru -Password: * -Uid [#]: 1001 -Gid [# or name]: 1001 -Change [month day year]: -Expire [month day year]: -Class: -Home directory: /home/jru -Shell: /usr/local/bin/zsh -Full Name: J. Random User -Office Location: -Office Phone: -Home Phone: -Other information:</screen> - </example> - - <para>A user can change only a small subset of this - information, and only for their own user account.</para> - - <example> - <title>Interactive <command>chpass</command> by Normal - User</title> - - <screen>#Changing user database information for jru. -Shell: /usr/local/bin/zsh -Full Name: J. Random User -Office Location: -Office Phone: -Home Phone: -Other information:</screen> - </example> - - <note> - <para>&man.chfn.1; and &man.chsh.1; are links to - &man.chpass.1;, as are &man.ypchpass.1;, &man.ypchfn.1;, and - &man.ypchsh.1;. <acronym>NIS</acronym> support is - automatic, so specifying the <literal>yp</literal> before - the command is not necessary. How to configure NIS is - covered in <xref linkend="network-servers"/>.</para> - </note> - </sect2> - <sect2 xml:id="users-passwd"> - <title><command>passwd</command></title> - - <indexterm><primary><command>passwd</command></primary></indexterm> - <indexterm> - <primary>accounts</primary> - <secondary>changing password</secondary> - </indexterm> - <para>&man.passwd.1; is the usual way to change your own - password as a user, or another user's password as the - superuser.</para> - - <note> - <para>To prevent accidental or unauthorized changes, the user - must enter their original password before a new password can - be set. This is not the case when the superuser changes a - user's password.</para> - </note> - - <example> - <title>Changing Your Password</title> - - <screen>&prompt.user; <userinput>passwd</userinput> -Changing local password for jru. -Old password: -New password: -Retype new password: -passwd: updating the database... -passwd: done</screen> - </example> - - <example> - <title>Changing Another User's Password as the - Superuser</title> - - <screen>&prompt.root; <userinput>passwd jru</userinput> -Changing local password for jru. -New password: -Retype new password: -passwd: updating the database... -passwd: done</screen> - </example> - - <note> - <para>As with &man.chpass.1;, &man.yppasswd.1; is a link to - &man.passwd.1;, so NIS works with either command.</para> - </note> - </sect2> - - - <sect2 xml:id="users-pw"> - <title><command>pw</command></title> - - <indexterm><primary><command>pw</command></primary></indexterm> - - <para>&man.pw.8; is a command line utility to create, remove, - modify, and display users and groups. It functions as a front - end to the system user and group files. &man.pw.8; has a very - powerful set of command line options that make it suitable for - use in shell scripts, but new users may find it more - complicated than the other commands presented in this - section.</para> - </sect2> - - - </sect1> - - <sect1 xml:id="users-limiting"> - <title>Limiting Users</title> - - <indexterm><primary>limiting users</primary></indexterm> - <indexterm> - <primary>accounts</primary> - <secondary>limiting</secondary> - </indexterm> - <para>&os; provides several methods for an administrator to limit - the amount of system resources an individual may use. These - limits are discussed in two sections: disk quotas and other - resource limits.</para> - - <indexterm><primary>quotas</primary></indexterm> - <indexterm> - <primary>limiting users</primary> - <secondary>quotas</secondary> - </indexterm> - <indexterm><primary>disk quotas</primary></indexterm> - <para>Disk quotas limit the amount of disk space available to - users and provide a way to quickly check that usage without - calculating it every time. Quotas are discussed in <xref linkend="quotas"/>.</para> - - <para>The other resource limits include ways to limit the amount - of CPU, memory, and other resources a user may consume. These - are defined using login classes and are discussed here.</para> - - <indexterm> - <primary><filename>/etc/login.conf</filename></primary> - </indexterm> - <para>Login classes are defined in - <filename>/etc/login.conf</filename> and are described in detail - in &man.login.conf.5;. Each user account is assigned to a login - class, <literal>default</literal> by default, and each login - class has a set of login capabilities associated with it. A - login capability is a - <literal>name=value</literal> - pair, where <replaceable>name</replaceable> is a well-known - identifier and <replaceable>value</replaceable> is an arbitrary - string which is processed accordingly depending on the - <replaceable>name</replaceable>. Setting up login classes and - capabilities is rather straightforward and is also described in - &man.login.conf.5;.</para> - - <note> - <para>&os; does not normally read the configuration in - <filename>/etc/login.conf</filename> directly, but instead - reads the <filename>/etc/login.conf.db</filename> database - which provides faster lookups. Whenever - <filename>/etc/login.conf</filename> is edited, the - <filename>/etc/login.conf.db</filename> must be updated by - executing the following command:</para> - - <screen>&prompt.root; <userinput>cap_mkdb /etc/login.conf</userinput></screen> - </note> - - <para>Resource limits differ from the default login capabilities - in two ways. First, for every limit, there is a soft (current) - and hard limit. A soft limit may be adjusted by the user or - application, but may not be set higher than the hard limit. The - hard limit may be lowered by the user, but can only be raised - by the superuser. Second, most resource limits apply per - process to a specific user, not to the user as a whole. These - differences are mandated by the specific handling of the limits, - not by the implementation of the login capability - framework.</para> - - <para>Below are the most commonly used resource limits. The rest - of the limits, along with all the other login capabilities, can - be found in &man.login.conf.5;.</para> - - <variablelist> - <varlistentry> - <term><literal>coredumpsize</literal></term> - - <listitem> - <para>The limit on the size of a core file<indexterm><primary>coredumpsize</primary></indexterm> generated by a - program is subordinate to other limits<indexterm><primary>limiting users</primary><secondary>coredumpsize</secondary></indexterm> on disk usage, such - as <literal>filesize</literal>, or disk quotas. - This limit is often used as a less-severe method of - controlling disk space consumption. Since users do not - generate core files themselves, and often do not delete - them, setting this may save them from running out of disk - space should a large program crash.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><literal>cputime</literal></term> - - <listitem> - <para>The maximum amount of CPU<indexterm><primary>cputime</primary></indexterm><indexterm><primary>limiting users</primary><secondary>cputime</secondary></indexterm> time a user's process may - consume. Offending processes will be killed by the - kernel.</para> - - <note> - <para>This is a limit on CPU <emphasis>time</emphasis> - consumed, not percentage of the CPU as displayed in - some fields by &man.top.1; and &man.ps.1;.</para> - </note> - </listitem> - </varlistentry> - - <varlistentry> - <term><literal>filesize</literal></term> - - <listitem> - <para>The maximum size of a file<indexterm><primary>filesize</primary></indexterm><indexterm><primary>limiting users</primary><secondary>filesize</secondary></indexterm> the user may own. Unlike - <link linkend="quotas">disk quotas</link>, this limit is - enforced on individual files, not the set of all files a - user owns.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><literal>maxproc</literal></term> - - <listitem> - <para>The maximum number of processes<indexterm><primary>maxproc</primary></indexterm><indexterm><primary>limiting users</primary><secondary>maxproc</secondary></indexterm> a user can run. This - includes foreground and background processes. This limit - may not be larger than the system limit specified by the - <varname>kern.maxproc</varname> &man.sysctl.8;. Setting - this limit too small may hinder a user's productivity as - it is often useful to be logged in multiple times or to - execute pipelines. Some tasks, such as compiling a large - program, spawn multiple processes and other intermediate - preprocessors.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><literal>memorylocked</literal></term> - - <listitem> - <para>The maximum amount of memory<indexterm><primary>memorylocked</primary></indexterm><indexterm><primary>limiting users</primary><secondary>memorylocked</secondary></indexterm> a process may request - to be locked into main memory using &man.mlock.2;. Some - system-critical programs, such as &man.amd.8;, lock into - main memory so that if the system begins to swap, they do - not contribute to disk thrashing.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><literal>memoryuse</literal></term> - - <listitem> - <para>The maximum amount of memory<indexterm><primary>memoryuse</primary></indexterm><indexterm><primary>limiting users</primary><secondary>memoryuse</secondary></indexterm> a process may consume at - any given time. It includes both core memory and swap - usage. This is not a catch-all limit for restricting - memory consumption, but is a good start.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><literal>openfiles</literal></term> - - <listitem> - <para>The maximum number of files a process may have open<indexterm><primary>openfiles</primary></indexterm><indexterm><primary>limiting users</primary><secondary>openfiles</secondary></indexterm>. - In &os;, files are used to represent sockets and IPC - channels, so be careful not to set this too low. The - system-wide limit for this is defined by the - <varname>kern.maxfiles</varname> &man.sysctl.8;.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><literal>sbsize</literal></term> - - <listitem> - <para>The limit on the amount of network memory, and - thus mbufs<indexterm><primary>sbsize</primary></indexterm><indexterm><primary>limiting users</primary><secondary>sbsize</secondary></indexterm>, a user may consume in order to limit network - communications.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><literal>stacksize</literal></term> - - <listitem> - <para>The maximum size of a process stack<indexterm><primary>stacksize</primary></indexterm><indexterm><primary>limiting users</primary><secondary>stacksize</secondary></indexterm>. This alone is - not sufficient to limit the amount of memory a program - may use so it should be used in conjunction with other - limits.</para> - </listitem> - </varlistentry> - </variablelist> - - <para>There are a few other things to remember when setting - resource limits. Following are some general tips, suggestions, - and miscellaneous comments.</para> - - <itemizedlist> - <listitem> - <para>Processes started at system startup by - <filename>/etc/rc</filename> are assigned to the - <literal>daemon</literal> login class.</para> - </listitem> - - <listitem> - <para>Although the <filename>/etc/login.conf</filename> that - comes with the system is a good source of reasonable values - for most limits, they may not be appropriate for every - system. Setting a limit too high may open the system up to - abuse, while setting it too low may put a strain on - productivity.</para> - </listitem> - - <listitem> - <para>Users of <application>&xorg;</application> should - probably be granted more resources than other users. - <application>&xorg;</application> by itself takes a lot of - resources, but it also encourages users to run more programs - simultaneously.</para> - </listitem> - - <listitem> - <para>Many limits apply to individual processes, not the user - as a whole. For example, setting - <varname>openfiles</varname> to 50 means that each process - the user runs may open up to 50 files. The total amount - of files a user may open is the value of - <literal>openfiles</literal> multiplied by the value of - <literal>maxproc</literal>. This also applies to memory - consumption.</para> - </listitem> - </itemizedlist> - - <para>For further information on resource limits and login classes - and capabilities in general, refer to &man.cap.mkdb.1;, - &man.getrlimit.2;, and &man.login.conf.5;.</para> - </sect1> - - <sect1 xml:id="users-groups"> - <title>Groups</title> - - <indexterm><primary>groups</primary></indexterm> - <indexterm> - <primary><filename>/etc/groups</filename></primary> - </indexterm> - <indexterm> - <primary>accounts</primary> - <secondary>groups</secondary> - </indexterm> - <para>A group is a list of users. A group is identified by its - group name and <acronym>GID</acronym>. In &os;, the - kernel uses the <acronym>UID</acronym> of a process, and the - list of groups it belongs to, to determine what the process is - allowed to do. Most of the time, the <acronym>GID</acronym> of - a user or process usually means the first group in the - list.</para> - - <para>The group name to <acronym>GID</acronym> mapping is listed - in <filename>/etc/group</filename>. This is a plain text file - with four colon-delimited fields. The first field is the group - name, the second is the encrypted password, the third the - <acronym>GID</acronym>, and the fourth the comma-delimited list - of members. For a more complete description of the syntax, - refer to &man.group.5;.</para> - - <para>The superuser can modify <filename>/etc/group</filename> - using a text editor. Alternatively, &man.pw.8; can be used to - add and edit groups. For example, to add a group called - <systemitem class="groupname">teamtwo</systemitem> and then confirm that it - exists:</para> - - <example> - <title>Adding a Group Using &man.pw.8;</title> - - <screen>&prompt.root; <userinput>pw groupadd teamtwo</userinput> -&prompt.root; <userinput>pw groupshow teamtwo</userinput> -teamtwo:*:1100:</screen> - </example> - - <para>In this example, <literal>1100</literal> is the - <acronym>GID</acronym> of <systemitem class="groupname">teamtwo</systemitem>. Right - now, <systemitem class="groupname">teamtwo</systemitem> has no members. This - command will add <systemitem class="username">jru</systemitem> as a member of - <systemitem class="groupname">teamtwo</systemitem>.</para> - - <example> - <title>Adding User Accounts to a New Group Using - &man.pw.8;</title> - - <screen>&prompt.root; <userinput>pw groupmod teamtwo -M jru</userinput> -&prompt.root; <userinput>pw groupshow teamtwo</userinput> -teamtwo:*:1100:jru</screen> - </example> - - <para>The argument to <option>-M</option> is a comma-delimited - list of users to be added to a new (empty) group or to replace - the members of an existing group. To the user, this group - membership is different from (and in addition to) the user's - primary group listed in the password file. This means that - the user will not show up as a member when using - <option>groupshow</option> with &man.pw.8;, but will show up - when the information is queried via &man.id.1; or a similar - tool. When &man.pw.8; is used to add a user to a group, it only - manipulates <filename>/etc/group</filename> and does not attempt - to read additional data from - <filename>/etc/passwd</filename>.</para> - - <example> - <title>Adding a New Member to a Group Using &man.pw.8;</title> - - <screen>&prompt.root; <userinput>pw groupmod teamtwo -m db</userinput> -&prompt.root; <userinput>pw groupshow teamtwo</userinput> -teamtwo:*:1100:jru,db</screen> - </example> - - <para>In this example, the argument to <option>-m</option> is a - comma-delimited list of users who are to be added to the group. - Unlike the previous example, these users are appended to the - group list and do not replace the list of existing users in the - group.</para> - - <example> - <title>Using &man.id.1; to Determine Group Membership</title> - - <screen>&prompt.user; <userinput>id jru</userinput> -uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)</screen> - </example> - - <para>In this example, <systemitem class="username">jru</systemitem> is a member of the - groups <systemitem class="groupname">jru</systemitem> and - <systemitem class="groupname">teamtwo</systemitem>.</para> - - <para>For more information about this command and the format of - <filename>/etc/group</filename>, refer to &man.pw.8; and - &man.group.5;.</para> - </sect1> - - <sect1 xml:id="users-becomesuper"> - <title>Becoming Superuser</title> - - <para>There are several ways to do things as the superuser. The - worst way is to log in as <systemitem class="username">root</systemitem> directly. - Usually very little activity requires <systemitem class="username">root</systemitem> - so logging off and logging in as <systemitem class="username">root</systemitem>, - performing tasks, then logging off and on again as a normal user - is a waste of time.</para> - - <para>A better way is to use &man.su.1; without providing a login - but using <literal>-</literal> to inherit the root environment. - Not providing a login will imply super user. For this to work - the login that must be in the <systemitem class="groupname">wheel</systemitem> group. - An example of a typical software installation would involve the - administrator unpacking the software as a normal user and then - elevating their privileges for the build and installation of - the software.</para> - - <example> - <title>Install a Program As The Superuser</title> - - <screen>&prompt.user; <userinput>configure</userinput> -&prompt.user; <userinput>make</userinput> -&prompt.user; <userinput>su -</userinput> -Password: -&prompt.root; <userinput>make install</userinput> -&prompt.root; <userinput>exit</userinput> -&prompt.user;</screen> - </example> - - <para>Note in this example the transition to - <systemitem class="username">root</systemitem> is less painful than logging off - and back on twice.</para> - - <para>Using &man.su.1; works well for single systems or small - networks with just one system administrator. For more complex - environments (or even for these simple environments) - <command>sudo</command> should be used. It is provided as a port, - <package>security/sudo</package>. It allows for - things like activity logging, granting users the ability to only - run certain commands as the superuser, and several other - options.</para> - </sect1> -</chapter>