「useradd(8)」-

创建新用户或者更新默认新用户的信息

命令语法格式

useradd [options] LOGIN

useradd -D

useradd -D [options]

命令描述

命令useradd是一个用于添加用户的低级实用程序。在Debian上,管理员通常应该使用adduser(8)。

在不使用-D选项调用useradd命令时,命令useradd使用命令行中指定的值以及系统的默认值来创建新用户帐户。根据命令行选项,命令useradd将会更新系统文件,以及创建新用户的主目录并复制初始文件。

默认情况下,还将为新用户创建一个组,该组名通常与用户名相同,请参阅-g、-N、-U、USERGROUPS_ENAB。

命令支持的选项及含义

命令useradd支持如下选项:

-R, –root CHROOT_DIR
在CHROOT_DIR目录中应用更改,并使用CHROOT_DIR目录中的配置文件。

-u, –uid UID
用户ID的数值。除非使用-o选项,否则此值必须是唯一的。该值必须是非负数。默认是使用大于或等于UID_MIN,且大于每个其他用户的最小ID值。

另请参见-r选项和UID_MAX描述。

-o, –non-unique
允许创建具有重复(非唯一)UID的用户帐户。此选项仅与-u选项一起使用时有效。

如果未指定-g、-N、-U选项,默认行为由/etc/login.defs中的USERGROUPS_ENAB变量定义。

-r, –system
创建系统帐户。

将在/etc/shadow中创建没有时效信息的系统用户,并且在/etc/login.defs中定义的SYS_UID_MIN-SYS_UID_MAX范围中选择其ID,而不是UID_MIN-UID_MAX(及其对应的GID用于创建组)。

请注意,无论/etc/login.defs中的CREATE_HOME如何设置,useradd都不会为此类用户创建主目录。如果需要系统帐户的主目录,则必须指定-m选项进行创建。

-Z, –selinux-user SEUSER
用户登录的SELinux用户。默认设置是将此字段留空,这会导致系统选择默认的SELinux用户。

密码相关

-p, –password PASSWORD
加密密码,由crypt(3)返回。默认设置是禁用密码。

注意:建议不要使用此选项,因为列出进程的用户可以看到密码(或加密密码)。

你应该确保密码符合系统的密码策略。

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

如果未指定,则useradd将使用/etc/default/useradd中EXPIRE变量指定的默认到期日期,或默认使用空字符串(不过期)。

-f, –inactive INACTIVE
密码过期后的天数,直到帐户被永久禁用。当值为0时,一旦密码过期将禁用该帐户;值为-1时,表示将禁用该功能。

如果未指定,则useradd将使用/etc/default/useradd中INACTIVE变量指定的默认非活动时间段,或默认为-1。

与用户属性相关

-s, –shell SHELL
用户登录Shell的名称。将此字段留空,则会使用/etc/default/useradd中SHELL变量指定的默认登录Shell,或者默认使用空字符串。

-c, –comment COMMENT
任何文本字符串。它通常是对LOGIN的简短描述,目前用作用户全名的字段。

-l, –no-log-init
不要将用户添加到最后登录日志和失败登录日志数据库,参考lastlog(8)与faillog(8)命令。

默认情况下,重置lastlog和faillog数据库中的用户条目,以避免重用以前删除的用户的条目。

为了与旧的Debian的useradd兼容,还支持-O选项。

-K, –key KEY=VALUE
覆盖/etc/login.defs默认值,UID_MIN,UID_MAX,UMASK,PASS_MAX_DAYS等。

示例:-K PASS_MAX_DAYS=-1可在创建系统帐户时关闭密码时效功能,即使系统帐户根本没有密码也是如此。可以指定多个-K选项,例如:-K UID_MIN=100 -K UID_MAX=499

设置用户组信息

-U, –user-group
创建一个与用户同名的组,并将用户添加到该组。

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

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

-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选项指定的组一样,这些组也受到相同的限制。默认值是用户仅属于初始组。

创建用户主目录

-m, –create-home
如果用户的主目录不存在,则创建该目录。骨架目录中包含的文件和目录将被复制到该主目录,也可以使用-k选项指定骨架目录。

默认情况下,如果未指定此选项,且未启用CREATE_HOME,则不会创建主目录。

-M, –no-create-home
即使在/etc/login.defs中的系统范围变量CREATE_HOME设置设置为yes,也不要创建用户的主目录。

-d, –home-dir HOME_DIR
创建新用户时,使用HOME_DIR的值作为用户登录的主目录。该HOME_DIR必须是绝对路径。

默认情况是将LOGIN名附加到BASE_DIR后面,由此组成的路径作为登录目录名,即主目录。

目录HOME_DIR不必是一个已经存在的目录,但如果缺少则不会创建。

-b, –base-dir BASE_DIR
如果未指定-d HOME_DIR选项,则使用系统默认的用户主目录所在的目录。将BASE_DIR与LOGIN连接起来,由此组成的路径作为用户的主目录。如果未使用-m选项,则BASE_DIR必须存在。

如果未指定此选项,则useradd将使用/etc/default/useradd中的HOME变量或默认情况下/home作为的基本目录。

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

仅当指定了-m(或–create-home)选项时,此选项才有效。

如果未设置此选项,则骨架目录由/etc/default/useradd中的SKEL变量定义,或者默认情况下为/etc/skel。

如果可能,将复制ACL和扩展属性。

修改配置文件中的默认值

-D, –defaults
调用命令useradd时:

  • 仅使用-D选项,命令useradd将显示当前的默认值。
  • 使用-D选项,并使用以下其他选项时,命令useradd将更新所指定选项相关的默认值。

这些默认值保存在/etc/default/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
使用-N/–no-user-group时,或在/etc/login.defs中将USERGROUPS_ENAB变量设置为no时,创建新用户的初始组的组名称或ID。组名必须是已经存在的组名,数字类型的组ID也是如此(必须存在)。

此选项修改在/etc/default/useradd中的GROUP变量。

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

此选项修改在/etc/default/useradd中的SHELL变量。

其他选项

-h, –help
显示帮助信息并退出。

注意事项

系统管理员负责将用户的默认文件放在/etc/skel/目录,或是由/etc/default/useradd或命令行选项指定的任何其他骨架目录中。

你可能无法将用户添加到NIS或LDAP组。这必须在相应的服务器上执行。同样,如果用户名已存在于外部用户数据库(如NIS或LDAP)中,则命令useradd将拒绝创建用户帐户。

通常建议用户名以小写字母或下划线开头,后跟小写字母、数字、下划线、短划线。他们可以以美元符号结束。相应的正则表达式为:[a-z_][a-z0-9_-]*[$]?

在Debian上,唯一的限制是用户名不能以短划线(’- )、加号(’+’)、波浪号(’~’)开头,并且也不能包含冒号(’:’)、逗号(’,’) )、空白(空格’ ‘、行尾’\n’、制表’\t’等)。请注意,用户名中使用斜杠(’/’)可能会破坏用户主目录定义的默认算法。

用户名最长可达32个字符。

配置文件

在/etc/login.defs中的以下配置变量会改变useradd命令的行为:

CREATE_HOME (boolean)
指示是否应为新用户默认创建主目录。此设置不适用于系统用户的创建,可以在命令行上使用选项进行覆盖。

GID_MAX (number), GID_MIN (number)
限制由useradd、groupadd、newusers命令创建普通组时所使用的GID范围。其中,GID_MIN的默认值为1000;相应的GID_MAX为60000。

MAIL_DIR (string)
邮件目录。修改或删除相应的用户帐户时,需要该变量值来操作邮箱。如果未指定,则使用编译时默认值。

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

命令useradd、usermod、userdel会使用MAIL_DIR和MAIL_FILE变量来创建、移动、删除用户的邮件文件和目录。

MAX_MEMBERS_PER_GROUP (number)
每组条目的最大成员数。达到最大值时,将在/etc/group中创建新的组条目(行),并具有相同的名称、相同的密码、相同的GID值。

该属性默认值为0,表示组中的成员数没有限制。

此功能(拆分组)允许限制group文件中的行长度。这有助于确保NIS组的行不超过1024个字符。

如果你需要强制执行此类限制,则可以使用25。

注意:并不是所有工具都支持拆分组,即使在Shadow软件包中也有些工具不支持。除非确实有必要,否则不应使用此变量。

PASS_MAX_DAYS (number)
密码可以使用的最大天数。如果密码早于此天数,则将强制更改密码。如果未指定,则假定为-1(禁用天数限制)。

PASS_MIN_DAYS (number)
两次密码更改之间的最少天数。任何小于该天数的密码更改都将被拒绝。如果未指定,则假定为-1(禁用天数限制)。

PASS_WARN_AGE (number)
密码到期前发出的警告天数。为零表示警告仅在到期日给出,否定表示不给出警告。如果未指定,则不会提供警告。

SUB_GID_MIN (number), SUB_GID_MAX (number), SUB_GID_COUNT (number)
如果/etc/subuid存在,则命令useradd、newusers(除非用户已具有从属GID)为每个新用户分配从SUB_GID_MIN到SUB_GID_MAX范围的SUB_GID_COUNT个未使用的GID。

其中,SUB_GID_MIN,SUB_GID_MAX,SUB_GID_COUNT的默认值分别为100000,600100000和10000。

SUB_UID_MIN (number), SUB_UID_MAX (number), SUB_UID_COUNT (number)
如果/etc/subuid存在,则命令useradd、newusers(除非用户已具有从属UID)为每个新用户分配SUB_UID_COUNT个从范围SUB_UID_MIN到SUB_UID_MAX的未使用的UID。

其中,SUB_UID_MIN,SUB_UID_MAX,SUB_UID_COUNT的默认值分别为100000,600100000和10000。

SYS_GID_MAX (number), SYS_GID_MIN (number)
限制由useradd、groupadd、newusers创建的系统组的GID范围。

其中,SYS_GID_MIN的默认值为101;相应的SYS_GID_MAX为GID_MIN-1。

SYS_UID_MAX (number), SYS_UID_MIN (number)
命令useradd、newusers创建的系统用户的UID范围。其中,SYS_UID_MIN的默认值为101;相应的SYS_UID_MAX为UID_MIN-1。

UID_MAX (number), UID_MIN (number)
限制命令useradd、newusers创建的普通用户的UID范围。其中,UID_MIN的默认值为1000;相应的UID_MAX为60000。

UMASK (number)
创建文件时的权限掩码初始化为此值。如果未指定,则掩码将初始化为022。命令useradd、newusers使用此掩码来设置它们创建的主目录的默认权限。它也被pam_umask用作默认的umask值。

USERGROUPS_ENAB (boolean)
如果设置为yes,命令userdel将删除与用户同名的组(如果该组不包含更多成员),然后useradd将默认创建一个与用户名相同的组。

相关文件

/etc/passwd
用户帐户信息。

/etc/shadow
安全的用户帐户信息。

/etc/group
组帐户信息。

/etc/gshadow
安全的组帐户信息。

/etc/default/useradd
帐户创建时的一些默认值。

/etc/skel/
包含了创建用户家目录时的默认文件。

/etc/login.defs
软件包Shadow中各个命令的配置文件。

/etc/subgid
每个用户的从属GID。

/etc/subuid
每个用户的从属UID。

退出状态

命令useradd会以下列状态值退出:

0 成功

1 无法更新passwd文件

2 命令语法无效

3 选项的参数无效

4 指定的UID已经在使用(并且没有-o)

6 指定的组不存在

9 用户名已在使用中

10 无法更新group文件

12 无法创建主目录

14 无法更新SELinux用户映射

相关手册

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)

参考文献

  • man 8 useradd, Version shadow-utils 4.5

更新日志

  • 07/19/2018 创建文章