USERADD(8)

名称
useradd - 创建一个新用户或更新默认新用户信息

大纲

useradd [选项] 登录

useradd -D

useradd -D [选项]

描述

如果使用时不带 -D 选项，useradd 命令使用命令行上指定的值和系统的默认值创建一个新用户。根据命令行选项，useradd 命令也会更新系统文件和创建新用户的主目录并复制初始文件。

默认上，也会为用户创建组 (察看 -g, -N, -U，和 USERGROUPS_ENAB)。

选项

useradd 可以使用的选项有：

-b, --base-dir BASE_DIR
    如果没有使用 -d HOME_DIR，则使用默认的基目录。BASE_DIR 加上账户名就是主目录。如果没有使用 -m 选项，BASE_DIR 必须已经存在。

    如果选项没有指定，useradd 将使用 /etc/default/useradd 中的 HOME 变量，或者默认的 /home。

-c, --comment COMMENT
    任何字符串。通常是关于登录的简短描述，当前用于用户全名。

-d, --home-dir HOME_DIR
    将创建新用户，并使用 HOME_DIR 作为用户登陆目录的值。默认值是将 LOGIN 名附加到 BASE_DIR 后面，并使用这作为登陆目录。目录不一定必须已经存在 HOME_DIR，但是会在需要时创建。

-D, --defaults
    看下边，“更改默认值”子节。

-e, --expiredate EXPIRE_DATE
    用户账户将被禁用的日期。日期以 YYYY-MM-DD 格式指定。

    如果没有指定，useradd 将使用 /etc/default/useradd 中 EXPIRE 变量指定的默认过期日期，或者一个空字符串(不过期)。

-f, --inactive INACTIVE
    密码过期后，账户被彻底禁用之前的天数。0 表示立即禁用，-1 表示禁用这个功能。

    如果未指定，useradd 将使用 /etc/default/useradd 中的 INACTIVE 指定的默认禁用周期，或者默认为 -1。

-g, --gid GROUP
    用户初始登陆组的组名或号码。组名必须已经存在。组号码必须指代已经存在的组。

    如果没有指定， useradd 的行为将依赖于 /etc/login.defs 文件中的 USERGROUPS_ENAB 参数。如果此参数设置为了 yes (或者在命令行上指定了 -U/--user-group)，将会为用户创建一个组，组名和登录名相同。如果选项设置为了 no (或者在命令行上指定了 -N/--no-user-group)，useradd 会把新用户的主组设置为 /etc/default/useradd 中 GROUP 变量指定的值，再或者默认是 100。

-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]
    用户还属于的附加组列表。每个组都用逗号隔开，没有中间的空格。这里的组受到了 -g 选项给定的组同样的限制。默认上，用户只属于初始组。

-h, --help
    现实帮助信息并退出。

-k, --skel SKEL_DIR
    骨架目录，包含使用 useradd 创建用户时，要复制到用户主目录中的文件和目录。

    这个选项只有在指定 -m (或 --create-home) 选项时才有效。

    如果此项没有设置，骨架目录使用 /etc/default/useradd 中的 SKEL 的变量或默认为 /etc/skel。

    如果可以，也复制 ACL 和扩展属性。

-K, --key KEY=VALUE
    Overrides /etc/login.defs defaults (UID_MIN, UID_MAX, UMASK, PASS_MAX_DAYS and others). Example: -K PASS_MAX_DAYS=-1 can be used when creating system account to turn off password aging, even though system account has no password at all. Multiple -K options can be specified, e.g.: -K UID_MIN=100 -K UID_MAX=499

-l, --no-log-init
    不要将用户添加到最近登录和登录失败数据库。

    By default, the user's entries in the lastlog and faillog databases are reset to avoid reusing the entry from a previously deleted user.

-m, --create-home
    如果不存在，则创建用户主目录。骨架目录中的文件和目录(可以使用 -k 选项指定)，将会复制到主目录。

    默认上，如果没有指定此选项并且 CREATE_HOME 没有启用，不会创建主目录。

-M, --no-create-home
    不创建用户主目录，即使系统在 /etc/login.defs 中的设置 (CREATE_HOME) 为 yes。

-N, --no-user-group
    不要创建同名组，而是将用户添加到 -g 选项指定的组，或根据 /etc/default/useradd 中的 GROUP 变量。

    如果没有指定 -g, -N 和 -U 选项，默认行为由 /etc/login.defs 中的 USERGROUPS_ENAB 变量指定。

-o, --non-unique
    允许使用重复的 UID 创建用户账户。

    此选项只有和 -u 选项组合使用才有效。

-p, --password PASSWORD
    加密了的密码，就像 crypt(3) 的返回值。默认为禁用密码。

    注意：不推荐使用这个选项，因为密码(或加密过的密码)会被用户通过列出这个过程而看到。

    您应该确保密码符合系统的密码政策。

-r, --system
    创建一个系统账户。

    System users will be created with no aging information in /etc/shadow, and their numeric identifiers are chosen in the SYS_UID_MIN-SYS_UID_MAX range, defined in /etc/login.defs, instead of UID_MIN-UID_MAX (and their GID counterparts for the creation of groups).

    Note that useradd will not create a home directory for such a user, regardless of the default setting in /etc/login.defs (CREATE_HOME). You have to specify the -m options if you want a home directory for a system account to be created.

-R, --root CHROOT_DIR
    Apply changes in the CHROOT_DIR directory and use the configuration files from the CHROOT_DIR directory.

-s, --shell SHELL
    用户的登录 shell 名。默认为留空，让系统根据 /etc/default/useradd 中的 SHELL 变量选择默认的登录 shell，默认为空字符串。

-u, --uid UID
    用户 ID 的数字值。此值必须为唯一的，除非使用了 -o 选项。此值必须非负，默认使用大于等于 UID_MIN，且大于任何其他用户 ID 最小值。

    请参考 -r 选项和 UID_MAX 的描述。

-U, --user-group
    创建一个和用户同名的组，并将用户添加到组中。

    如果没有指定 -g, -N 和 -U 选项，默认行为由 /etc/login.defs 中的 USERGROUPS_ENAB 变量指定。

-Z, --selinux-user SEUSER
    用户登陆的 SELinux 用户。默认为留空，这会造成系统选择默认的 SELinux 用户。

  更改默认值

只带 -D 选项使用时，useradd 将显示当前的默认值。-D 和其它选项配合使用时，useradd 将为指定的选项更新默认值。有效的“更改默认值”选项有：

-b, --base-dir BASE_DIR
    新用户主目录的路径前缀。如果创建新账户时，没有使用 -d 选项，用户的名称将会缀在 BASE_DIR 的后边形成新用户的主目录名。

    这个选择在 /etc/default/useradd 中设置 HOME 选项。

-e, --expiredate EXPIRE_DATE
    禁用此用户账户的日期。

    此选项在 /etc/default/useradd 中设置 EXPIRE 变量。

-f, --inactive INACTIVE
    密码过期到账户被禁用之前的天数。

    这个选项在 /etc/default/useradd 中设置 INACTIVE 变量。

-g, --gid GROUP
    新用户初始组的组名或 ID (使用了 -N/--no-user-group 或者 /etc/login.defs 中的变量 USERGROUPS_ENAB 设置为 no 时)。给出的组必须存在，并且数字组 ID 必须有一个已经存在的项。

    这个选项在 /etc/default/useradd 中设置 GROUP 变量。

-s, --shell SHELL
    新用户的登录 shell 名。

    这个选项在 /etc/default/useradd 设置 SHELL 变量。

注意：

系统管理员负责将默认的用户文件放在 /etc/skel/ 目录中(或者命令行上、/etc/default/useradd 中指定的任何其它目录)。

CAVEATS

您可能不能想 NIS 组或 LDAP 组添加用户。这只能在相应服务器上进行。

相似地，如果用户名已经存在于外部用户数据库中，比如 NIS 或 LDAP，useradd 将拒绝创建用户账户的请求。

用户名必须以一个小写字母或下划线开始，跟随小写字符、数字、下划线或连字符的组合。可以以美元符号结束。用正则表达式表示就是：[a-z_][a-z0-9_-]*[$]?

用户名不能超过 32 个字符长。

配置文件

在 /etc/login.defs 中有如下配置变量，可以用来更改此工具的行为：

CREATE_HOME (boolean)
    指示是否应该为新用户默认创建主目录。

    此设置并不应用到系统用户，并且可以使用命令行覆盖。

GID_MAX (number), GID_MIN (number)
    useradd，groupadd 或 newusers 创建的常规组的组 ID 的范围。

    GID_MIN 和 GID_MAX 的默认值分别是 1000 和 60000。

MAIL_DIR (string)
    邮箱目录。修改或删除用户账户时需要处理邮箱，如果没有指定，将使用编译时指定的默认值。

MAIL_FILE (string)
    定义用户邮箱文件的位置(相对于主目录)。

MAIL_DIR and MAIL_FILE 变量由 useradd，usermod 和 userdel 用于创建、移动或删除用户邮箱。

如果 MAIL_CHECK_ENAB 设置为 yes，它们也被用于定义 MAIL 环境变量。

MAX_MEMBERS_PER_GROUP (number)
    每个组条目的最大成员数。达到最大值时，在 /etc/group 开始一个新条目(行)(使用同样的名称，同样的密码，同样的 GID)。

    默认值是 0，意味着组中的成员数没有限制。

    此功能(分割组)允许限制组文件中的行长度。这对于确保 NIS 组的行比长于 1024 字符。

    如果要强制这个限制，可以使用 25。

    注意：分割组可能不受所有工具的支持(甚至在 Shadow 工具集中)。您不应该使用这个变量，除非真的需要。

PASS_MAX_DAYS (number)
    一个密码可以使用的最大天数。如果密码比这旧，将会强迫更改密码。如果不指定，就假定为 -1，这会禁用这个限制。

PASS_MIN_DAYS (number)
    两次更改密码时间的最小间隔。将会拒绝任何早于此的更改密码的尝试。如果不指定，假定为 -1，将会禁用这个限制。

PASS_WARN_AGE (number)
    密码过期之前给出警告的天数。0 表示只有只在过期的当天警告，负值表示不警告。如果没有指定，不会给警告。

SUB_GID_MIN (number), SUB_GID_MAX (number), SUB_GID_COUNT (number)
    If /etc/subuid exists, the commands useradd and newusers (unless the user already have subordinate group IDs) allocate SUB_GID_COUNT unused group IDs from the range SUB_GID_MIN to SUB_GID_MAX for each new user.

    The default values for SUB_GID_MIN, SUB_GID_MAX, SUB_GID_COUNT are respectively 100000, 600100000 and 10000.

SUB_UID_MIN (number), SUB_UID_MAX (number), SUB_UID_COUNT (number)
    If /etc/subuid exists, the commands useradd and newusers (unless the user already have subordinate user IDs) allocate SUB_UID_COUNT unused user IDs from the range SUB_UID_MIN to SUB_UID_MAX for each new user.

    The default values for SUB_UID_MIN, SUB_UID_MAX, SUB_UID_COUNT are respectively 100000, 600100000 and 10000.

SYS_GID_MAX (number), SYS_GID_MIN (number)
    useradd、groupadd 或 newusers 创建的系统组的组 ID 的范围。

    SYS_GID_MIN 和 SYS_GID_MAX 的默认值分别是 101 和 GID_MIN-1。

SYS_UID_MAX (number), SYS_UID_MIN (number)
    useradd 或 newusers 创建的系统用户的用户 ID 的范围。

    SYS_UID_MIN 和 SYS_UID_MAX 的默认值分别是 101 和 UID_MIN-1。

UID_MAX (number), UID_MIN (number)
    useradd 或 newusers 创建的普通用户的用户 ID 的范围。

    UID_MIN 和 UID_MAX 的默认值分别是 1000 和 60000。

UMASK (number)
    文件模式创建掩码初始化为此值。如果没有指定，掩码初始化为 022。

    useradd 和 newusers 使用此掩码设置它们创建的用户主目录的模式。

    也被 login 用于指定用户的初始 umask。注意，此掩码可以被用户的 GECOS 行覆盖(当设置了 QUOTAS_ENAB 时)，也可以被带 K 指示符的 limits(5) 定义的限制值覆盖。

USERGROUPS_ENAB (boolean)
    如果 uid 和 gid 相同，用户名和主用户名也相同，使非 root 组的组掩码位和属主位相同 (如：022 -> 002, 077 -> 007)。

    如果设置为 yes，如果组中没有成员了，userdel 将移除此用户组，useradd 创建用户时，也会创建一个同名的默认组。

文件

/etc/passwd
    用户账户信息。

/etc/shadow
    安全用户账户信息。

/etc/group
    组账户信息。

/etc/gshadow
    安全组账户信息。

/etc/default/useradd
    账户创建的默认值。

/etc/skel/
    包含默认文件的目录。

/etc/subgid
    Per user subordinate group IDs.

/etc/subuid
    Per user subordinate user IDs.

/etc/login.defs
    Shadow 密码套件配置。

退出值

useradd 可以返回如下值：

0
    成功

1
    无法更新密码文件

2
    无效的命令语法

3
    给了选项一个无效的参数

4
    UID 已经使用 (且没有 -o)

6
    指定的组不存在

9
    用户名已被使用

10
    无法更新组文件

12
    无法创建主目录

14
    can't update SELinux user mapping

参见

chfn(1), chsh(1), passwd(1), crypt(3), groupadd(8), groupdel(8), groupmod(8), login.defs(5), newusers(8), subgid(5), subuid(5), userdel(8), usermod(8).