<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY GID_MAX               SYSTEM "login.defs.d/GID_MAX.xml">
<!ENTITY MAIL_DIR              SYSTEM "login.defs.d/MAIL_DIR.xml">
<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
<!ENTITY PASS_MAX_DAYS         SYSTEM "login.defs.d/PASS_MAX_DAYS.xml">
<!ENTITY PASS_MIN_DAYS         SYSTEM "login.defs.d/PASS_MIN_DAYS.xml">
<!ENTITY PASS_WARN_AGE         SYSTEM "login.defs.d/PASS_WARN_AGE.xml">
<!ENTITY UID_MAX               SYSTEM "login.defs.d/UID_MAX.xml">
<!ENTITY UMASK                 SYSTEM "login.defs.d/UMASK.xml">
]>
<refentry id='useradd.8'>
  <!--  $Id$ -->
  <refmeta>
    <refentrytitle>useradd</refentrytitle>
    <manvolnum>8</manvolnum>
    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
  </refmeta>
  <refnamediv id='name'>
    <refname>useradd</refname>
    <refpurpose>create a new user or update default new user information</refpurpose>
  </refnamediv>
  <refsynopsisdiv id='synopsis'>
    <cmdsynopsis>
      <command>useradd</command>
      <arg choice='opt'>
	<replaceable>options</replaceable>
      </arg>
      <arg choice='plain'><replaceable>LOGIN</replaceable></arg>
    </cmdsynopsis>
    <cmdsynopsis>
      <command>useradd</command>
      <arg choice='plain'>-D </arg>
    </cmdsynopsis>
    <cmdsynopsis>
      <command>useradd</command>
      <arg choice='plain'>-D </arg>
      <arg choice='opt'>
	<replaceable>options</replaceable>
      </arg>
    </cmdsynopsis>
  </refsynopsisdiv>

  <refsect1 id='description'>
    <title>DESCRIPTION</title>
      <para>
	When invoked without the <option>-D</option> option, the
	<command>useradd</command> command creates a new user account using
	the values specified on the command line plus the default values from
	the system. Depending on command line options, the
	<command>useradd</command> command
	will update system files and may also create the new user's home
	directory and copy initial files.
      </para>
  </refsect1>

  <refsect1 id='options'>
    <title>OPTIONS</title>
    <para>The options which apply to the <command>useradd</command> command are:
    </para>
    <variablelist remap='IP'>
      <varlistentry>
	<term>
	  <option>-c</option>, <option>--comment</option>
	  <replaceable>COMMENT</replaceable>
	</term>
	<listitem>
	  <para>
	    Any text string. It is generally a short description of the
	    login, and is currently used as the field for the user's full
	    name.
	  </para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term>
	  <option>-b</option>, <option>--base-dir</option>
	  <replaceable>BASE_DIR</replaceable>
	</term>
	<listitem>
	  <para>
	    The default base directory for the system if <option>-d</option>
	    <replaceable>HOME_DIR</replaceable> is not specified.
	    <replaceable>BASE_DIR</replaceable> is
	    concatenated with the account name to define the home directory. 
	    If the <option>-m</option> option is not used,
	    <replaceable>BASE_DIR</replaceable> must exist.
	  </para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term>
	  <option>-D</option>, <option>--defaults</option>
	</term>
	<listitem>
	  <para>
	    See below, the subsection "Changing the default values".
	  </para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term>
	  <option>-d</option>, <option>--home</option>
	  <replaceable>HOME_DIR</replaceable>
	</term>
	<listitem>
	  <para>
	    The new user will be created using
	    <replaceable>HOME_DIR</replaceable> as the value for the user's
	    login directory. The default is to append the
	    <replaceable>LOGIN</replaceable> name to
	    <replaceable>BASE_DIR</replaceable> and use that as the login
	    directory name. The directory <replaceable>HOME_DIR</replaceable>
	    does not have to exist but will not be created if it is missing.
	  </para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term>
	  <option>-e</option>, <option>--expiredate</option>
	  <replaceable>EXPIRE_DATE</replaceable>
	</term>
	<listitem>
	  <para>
	    The date on which the user account will be disabled. The date is
	    specified in the format <emphasis remap='I'>YYYY-MM-DD</emphasis>.
	  </para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term>
	  <option>-f</option>, <option>--inactive</option>
	  <replaceable>INACTIVE</replaceable>
	</term>
	<listitem>
	  <para>
	    The number of days after a password expires until the account is
	    permanently disabled. A value of 0 disables the account as soon
	    as the password has expired, and a value of -1 disables the
	    feature. The default value is -1.
	  </para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term>
	  <option>-g</option>, <option>--gid</option>
	  <replaceable>GROUP</replaceable>
	</term>
	<listitem>
	  <para>
	    The group name or number of the user's initial login group. The
	    group name must exist. A group number must refer to an already
	    existing group. The default group number is 1 or whatever is
	    specified in <filename>/etc/default/useradd</filename>.
	  </para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term>
	  <option>-G</option>, <option>--groups</option>
	  <replaceable>GROUP1</replaceable>[<emphasis remap='I'>,GROUP2,...</emphasis>[<emphasis remap='I'>,GROUPN</emphasis>]]]
	</term>
	<listitem>
	  <para>
	    A list of supplementary groups which the user is also a member
	    of. Each group is separated from the next by a comma, with no
	    intervening whitespace. The groups are subject to the same
	    restrictions as the group given with the <option>-g</option>
	    option. The default is for the user to belong only to the
	    initial group.
	  </para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term><option>-h</option>, <option>--help</option></term>
	<listitem>
	  <para>Display help message and exit.</para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term>
	  <option>-m</option>, <option>--create-home</option>
	</term>
	<listitem>
	  <para>
	    The user's home directory will be created if it does not exist. 
	    The files contained in <replaceable>SKEL_DIR</replaceable> will
	    be copied to the home directory if the <option>-k</option>
	    option is used, otherwise the files contained in
	    <filename>/etc/skel</filename> will be used instead. Any
	    directories contained in <replaceable>SKEL_DIR</replaceable> or
	    <filename>/etc/skel</filename> will be created in the user's
	    home directory as well. The <option>-k</option> option is only
	    valid in conjunction with the <option>-m</option> option. The
	    default is to not create the directory and to not copy any
	    files.
	  </para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term>
	  <option>-K</option>, <option>--key</option>
	  <replaceable>KEY</replaceable>=<replaceable>VALUE</replaceable>
	</term>
	<listitem>
	  <para>
	    Overrides /etc/login.defs defaults (UID_MIN, UID_MAX, UMASK,
	    PASS_MAX_DAYS and others).
	  <para>
	  </para>
	    Example: <option>-K </option><replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-1</replaceable>
	    can be used when creating system account to turn off password
	    ageing, even though system account has no password at all.
	    Multiple <option>-K</option> options can be specified, e.g.:
	    <option>-K </option>
	    <replaceable>UID_MIN</replaceable>=<replaceable>100</replaceable>
	    <option> -K </option>
	    <replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>
	  </para>
	  <para>
	    Note: <option>-K </option>
	    <replaceable>UID_MIN</replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>
	    doesn't work yet.
	  </para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term><option>-l</option></term>
	<listitem>
	  <para>
	    Do not add the user to the lastlog and faillog databases.
	  </para>
	  <para>
	    By default, the user's entries in the lastlog and faillog
	    databases are resetted to avoid reusing the entry from a previously
	    deleted user.
	  </para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term>
	  <option>-o</option>, <option>--non-unique</option>
	</term>
	<listitem>
	  <para>Allow the creation of a user account with a duplicate (non-unique) UID.</para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term>
	  <option>-p</option>, <option>--password</option>
	  <replaceable>PASSWORD</replaceable>
	</term>
	<listitem>
	  <para>
	    The encrypted password, as returned by <citerefentry>
	    <refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum>
	    </citerefentry>. The default is to disable the account.
	  </para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term>
	  <option>-s</option>, <option>--shell</option>
	  <replaceable>SHELL</replaceable>
	</term>
	<listitem>
	  <para>
	    The name of the user's login shell. The default is to leave this
	    field blank, which causes the system to select the default login
	    shell.
	  </para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term>
	  <option>-u</option>, <option>--uid</option>
	  <replaceable>UID</replaceable>
	</term>
	<listitem>
	  <para>
	    The numerical value of the user's ID. This value must be unique,
	    unless the <option>-o</option> option is used. The value must be
	    non-negative. The default is to use the smallest ID value
	    greater than 999 and greater than every other user. Values
	    between 0 and 999 are typically reserved for system accounts.
	  </para>
	</listitem>
      </varlistentry>
    </variablelist>

    <refsect2 id='changing_the_default_values'>
      <title>Changing the default values</title>
      <para>
	When invoked with only the <option>-D</option> option,
	<command>useradd</command> will display the current default values.
	When invoked with <option>-D</option> plus other options,
	<command>useradd</command> will update the default values for the
	specified options. Valid default-changing options are:
      </para>
      <variablelist remap='IP'>
	<varlistentry>
	  <term>
	    <option>-b</option>, <option>--base-dir</option>
	    <replaceable>BASE_DIR</replaceable>
	  </term>
	  <listitem>
	    <para>
	      The path prefix for a new user's home directory. The
	      user's name will be affixed to the end of
	      <replaceable>BASE_DIR</replaceable> to form the new user's
	      home directory name, if the <option>-d</option> option is not used
	      when creating a new account.
	    </para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term>
	    <option>-e</option>, <option>--expiredate</option>
	    <replaceable>EXPIRE_DATE</replaceable>
	  </term>
	  <listitem>
	    <para>The date on which the user account is disabled.</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term>
	    <option>-f</option>, <option>--inactive</option>
	    <replaceable>INACTIVE</replaceable>
	  </term>
	  <listitem>
	    <para>
	      The number of days after a password has expired before the
	      account will be disabled.
	    </para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term>
	    <option>-g</option>, <option>--gid</option>
	    <replaceable>GROUP</replaceable>
	  </term>
	  <listitem>
	    <para>
	      The group name or ID for a new user's initial group. The named
	      group must exist, and a numerical group ID must have an
	      existing entry.
	    </para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term>
	    <option>-s</option>, <option>--shell</option>
	    <replaceable>SHELL</replaceable>
	  </term>
	  <listitem>
	    <para>
	      The name of a new user's login shell.
	    </para>
	  </listitem>
	</varlistentry>
      </variablelist>

    </refsect2>
  </refsect1>

  <refsect1 id='notes'>
    <title>NOTES</title>
    <para>The system administrator is responsible for placing the default
      user files in the <filename>/etc/skel/</filename> directory.
    </para>
  </refsect1>

  <refsect1 id='caveats'>
    <title>CAVEATS</title>
    <para>
      You may not add a user to a NIS or LDAP group. This must be
      performed on the corresponding server.
    </para>

    <para>
      Similarly, if the username already exists in an external user
      database such as NIS or LDAP, <command>useradd</command> will deny
      the user account creation request.
    </para>

    <para>
      Usernames must begin with a lower case letter or an underscore, and
      only lower case letters, underscores, dashes, and dollar signs may
      follow. In regular expression terms: [a-z_][a-z0-9_-]*[$]
    </para>
  </refsect1>

  <refsect1 id='configuration'>
    <title>CONFIGURATION</title>
    <para>
      The following configuration variables in
      <filename>/etc/login.defs</filename> change the behavior of this
      tool:
    </para>
    <variablelist>
      &GID_MAX; <!-- documents also GID_MIN -->
      &MAIL_DIR;
      &MAX_MEMBERS_PER_GROUP;
      &PASS_MAX_DAYS;
      &PASS_MIN_DAYS;
      &PASS_WARN_AGE;
      &UID_MAX; <!-- documents also UID_MIN -->
      &UMASK;
    </variablelist>
  </refsect1>

  <refsect1 id='files'>
    <title>FILES</title>
    <variablelist>
      <varlistentry>
	<term><filename>/etc/passwd</filename></term>
	<listitem>
	  <para>User account information.</para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term><filename>/etc/shadow</filename></term>
	<listitem>
	  <para>Secure user account information.</para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term><filename>/etc/group</filename></term>
	<listitem>
	  <para>Group account information.</para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term><filename>/etc/default/useradd</filename></term>
	<listitem>
	  <para>Default values for account creation.</para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term><filename>/etc/skel/</filename></term>
	<listitem>
	  <para>Directory containing default files.</para>
	</listitem>
      </varlistentry>
      <varlistentry>
	<term><filename>/etc/login.defs</filename></term>
	<listitem>
	  <para>Shadow password suite configuration.</para>
	</listitem>
      </varlistentry>
    </variablelist>
  </refsect1>

  <refsect1 id='exit_values'>
    <title>EXIT VALUES</title>
    <para>
      The <command>useradd</command> command exits with the following values:
      <variablelist>
	<varlistentry>
	  <term><replaceable>0</replaceable></term>
	  <listitem>
	    <para>success</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term><replaceable>1</replaceable></term>
	  <listitem>
	    <para>can't update password file</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term><replaceable>2</replaceable></term>
	  <listitem>
	    <para>invalid command syntax</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term><replaceable>3</replaceable></term>
	  <listitem>
	    <para>invalid argument to option</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term><replaceable>4</replaceable></term>
	  <listitem>
	    <para>UID already in use (and no <option>-o</option>)</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term><replaceable>6</replaceable></term>
	  <listitem>
	    <para>specified group doesn't exist</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term><replaceable>9</replaceable></term>
	  <listitem>
	    <para>username already in use</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term><replaceable>10</replaceable></term>
	  <listitem>
	    <para>can't update group file</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term><replaceable>12</replaceable></term>
	  <listitem>
	    <para>can't create home directory</para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term><replaceable>13</replaceable></term>
	  <listitem>
	    <para>can't create mail spool</para>
	  </listitem>
	</varlistentry>
      </variablelist>
    </para>
  </refsect1>

  <refsect1 id='see_also'>
    <title>SEE ALSO</title>
    <para>
      <citerefentry>
	<refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
      </citerefentry>,
      <citerefentry>
	<refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum>
      </citerefentry>,
      <citerefentry>
	<refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
      </citerefentry>,
      <citerefentry>
	<refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum>
      </citerefentry>,
      <citerefentry>
	<refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum>
      </citerefentry>,
      <citerefentry>
	<refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum>
      </citerefentry>,
      <citerefentry>
	<refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum>
      </citerefentry>,
      <citerefentry>
	<refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
      </citerefentry>,
      <citerefentry>
	<refentrytitle>newusers</refentrytitle><manvolnum>8</manvolnum>
      </citerefentry>,
      <citerefentry>
	<refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
      </citerefentry>,
      <citerefentry>
	<refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
      </citerefentry>.
    </para>
  </refsect1>
</refentry>