1.命令作用
创建新用户或更新默认的新用户信息(create a new user or update default new user information)
2.命令语法
Usage: useradd [options] LOGIN
useradd -D
useradd -D [options]
3.参数详解
OPTION:
- -b, --base-dir BASE_DIR,新帐户的主目录的基本目录;目录必须存在
- -c, --comment COMMENT,新帐户的注释信息,会显示在/etc/passwd文件中
- -d, --home-dir HOME_DIR,新帐户的主/家目录;必须保证用户上一层目录存在,如/opt/home/user3为user3的家目录,必须保证/opt/home存在才成功
- -D, --defaults,打印或更改默认useradd配置
- -e, --expiredate EXPIRE_DATE,新帐户的截止日期
- -f, --inactive INACTIVE,新帐户密码过期后可登录宽限的时间
- -g, --gid GROUP,新建帐户的用户组名或ID,设置一个主用户组,仅能设置一个,用户组ID可在/etc/group中查看
- -G, --groups GROUPS,新帐户的补充组列表,设置附加用户组,可设置多个,用逗号分隔
- -h, --help,显示此帮助信息并退出
- -k, --skel SKEL_DIR,使用这个备选骨架(skeleton)目录;默认的目录是/etc/skel/,主要包括.bashrc、.bash_profile、.mozilla等目录或文件
- -K, --key KEY=VALUE,覆盖/etc/login.defs默认值
- -l, --no-log-init,不将用户添加到 lastlog 和 faillog 数据库中;文件位于/var/log/目录下
- -m, --create-home,创建用户的主目录(默认参数)
- -M, --no-create-home,不创建用户的主目录
- -N, --no-user-group,不创建与用户同名的组
- -o, --non-unique,允许创建具有重复(非唯一)UID的用户
- -p, --password PASSWORD,创建用户时指定加密后的密码字符串,注意是加密后的字符串
- -r, --system,创建系统帐户,创建的系统用户UID范围是1-999,默认没有家目录,可添加-m参数指定家目录
- -R, --root CHROOT_DIR,指定chroot目录执行命令(参考chroot命令用法)
- -s, --shell SHELL,新帐户的登录shell,一般是'-s /bin/bash',也可以指定'/bin/zsh',默认值可在useradd -D中查看
- -u, --uid UID,新帐户的user ID
- -U, --user-group,创建与用户同名的组,与-N相反,默认参数
- -Z, --selinux-user SEUSER,为SELinux用户映射使用特定的SEUSER
4.常用用例
4.1.查看/修改基目录,指定基目录创建用户
[root@node1 ~]# useradd -D # 创建用户的基本信息(也可在/etc/default/useradd文件查看),其基目录默认是/home目录,可以自定义创建用户的基目录;
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@node1 ~]#
[root@node1 ~]# useradd -D -b /opt # 可以修改其基目录
[root@node1 ~]# useradd -D -s /bin/zsh
[root@node1 ~]# useradd -D
GROUP=100
HOME=/opt
INACTIVE=-1
EXPIRE=
SHELL=/bin/zsh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@node1 ~]# useradd -D -b /home
[root@node1 ~]# useradd -D -s /bin/bash
[root@node1 ~]#
[root@node1 ~]# useradd -b /opt user1 # 可以使用-b指定创建用户的基目录;-b指定/opt时注意不要写成/opt/(这样执行后pwd查看的家目录显示/opt//user1)
Creating mailbox file: File exists
[root@node1 ~]# su - user1 # su - user1 用于Linux用户之间切换
[user1@node1 ~]$ pwd # 打印当前所处的目录
/opt/user1
[user1@node1 ~]$
4.2.创建用户时添加注释
[root@node1 ~]# useradd -c 'this is user2 comment' user2
[root@node1 ~]#
[root@node1 ~]# cat /etc/passwd | grep user2
user2:x:1004:1004:this is user2 comment:/home/user2:/bin/bash
[root@node1 ~]#
[root@node1 ~]# getent passwd user2
user2:x:1004:1004:this is user2 comment:/home/user2:/bin/bash
[root@node1 ~]#
[root@node1 ~]# finger user4 # finger命令需要自己安装,系统默认没有该命令
Login: user2 Name: this is user2 comment
Directory: /home/user4 Shell: /bin/bash
Never logged in.
No mail.
No Plan.
[root@node2 ~]#
4.3创建用户时自定义家目录
[root@node1 ~]# useradd -d /opt/user1 user3 # user1上一层目录存在,执行成功
[root@node1 ~]# su - user3 # su - user1是切换用户的命名
[user3@node1 ~]$ pwd # 切换后的目录就是-d指定的目录
/opt/user3
[user3@node1 ~]$ exit # 退出user3用户,回到之前的root用户
logout
[root@node1 ~]# useradd -d /opt/user2 -m user4 # -m是要创建家目录,指定的目录满足条件,可正常执行
[root@node1 ~]# su - user4
[user4@node1 ~]$ pwd
/opt/user4
[user4@node1 ~]$ exit
logout
[root@node1 ~]# useradd -d /opt/home/user5 user5 # user1上一层目录不存在,用户会创建成功,但是家目录创建失败
useradd: cannot create directory /opt/home/user5
[root@node1 ~]#
[root@node1 ~]# userdel user5 # 上面仅是目录创建失败,但用户是创建成功的,需要删除用户
[root@node1 ~]# useradd -d /opt/home/user5 -m user5 # -m是要创建家目录,指定的目录user3上一层目录不存在,不满足条件,用户会创建成功,但是家目录创建失败
useradd: cannot create directory /opt/home/user5
[root@node1 ~]#
[root@node1 ~]# userdel user5
[root@node1 ~]# useradd -d /opt/home/user5 -M user5 # -M是不要创建家目录,即使user3上一层目录不存在,也会成功,但是su - user3切换用户后,所处的目录是/root,注意与上面的区别
[root@node5 ~]# su - user5
su: warning: cannot change directory to /opt/home/user3: No such file or directory
-bash-4.2$ pwd
/root
-bash-4.2$
4.4.创建用户时指定过期时间
[root@node1 ~]# useradd -e "2025-12-31" user6
[root@node1 ~]# chage -l user6
Last password change : Jun 09, 2025 # 最后一次密码口令修改时间
Password expires : never # 密码口令过期
Password inactive : never # 密码活跃,没设置为never不活跃
Account expires : Dec 31, 2025 # 过期时间
Minimum number of days between password change : 0 # 密码更改之间的最小天数
Maximum number of days between password change : 99999 # 密码更改之间的最大天数
Number of days of warning before password expires : 7 # 密码过期前的警告天数
[root@node1 ~]#
4.5.指定用户组创建用户
[root@node1 ~]# groupadd usergroup # 需要先创建一个用户组
[root@node1 ~]# useradd -g usergroup user7 # 也可以指定GID,形如useradd -g 1003 user7;GID可以在/etc/group中查看;如果不指定-g用户组,会默认创建一个与用户名相同的用户组
[root@node1 ~]# su - user7
[user7@node1 ~]$ ll -a
total 12
drwx------. 5 user7 usergroup 107 Jun 9 14:24 .
drwxr-xr-x. 6 root root 57 Jun 9 14:24 ..
-rw-r--r--. 1 user7 usergroup 18 Oct 31 2018 .bash_logout
-rw-r--r--. 1 user7 usergroup 193 Oct 31 2018 .bash_profile
-rw-r--r--. 1 user7 usergroup 231 Oct 31 2018 .bashrc
drwxr-xr-x. 3 user7 usergroup 18 Jun 9 14:24 .cache
drwxr-xr-x. 3 user7 usergroup 18 Jun 9 14:24 .config
drwxr-xr-x. 4 user7 usergroup 39 Dec 13 00:58 .mozilla
[user7@node1 ~]$ exit
logout
[root@node1 ~]# groupadd usergroup1
[root@node1 ~]# groupadd usergroup2
[root@node1 ~]# useradd -g usergroup -G usergroup1,usergroup2 user8 # 还可以指定附加用户组
[root@node1 ~]#
4.6.创建用户时不创建同名用户组
# 默认情况下未指定-g参数时,创建用户会自动创建一个与用户名称相同的用户组
# 指定-N同时未指定-g参数时,创建的用户会归于100用户组下
# 如指定-N参数时建议也指定-g参数
# 指定-g参数,会按照-g参数指定的名称创建组,就算没有指定-N也不会创建与用户名相同的用户组
[root@node1 ~]# useradd -N user9
[root@node1 ~]# getent passwd user9
user9:x:1005:100::/home/user9:/bin/bash
[root@node1 ~]#
4.7.创建用户时指定UID,且可设置重复的UID
[root@node1 ~]# useradd -u 1000 user10 # 默认情况下不能指定已经存在的UID号
useradd: UID 1000 is not unique
[root@node1 ~]# useradd -o -u 1000 user10 # 指定-o参数可存在重复的UID
[root@node1 ~]# getent passwd user10
user10:x:1000:1006::/home/user10:/bin/bash
[root@node1 ~]#
4.8.创建密码过期设置
[root@node1 ~]# useradd -f 11 user11 # 设置密码过期后多少天后不能登录
[root@node1 ~]# passwd -S user11
user11 LK 2025-06-09 0 99999 7 11 (Password locked.)
[root@node1 ~]# # 解释说明:
user11 LK 2025-06-09 0 99999 7 11 (Password locked.)
用户名 Locked(被锁定,没有设置密码) 最后修改日期 修改密码的最小间隔 密码最大有效期 警告期(提前多少天提示密码过期) 宽限期(密码过期后可宽限登录的天数) 状态注释(密码被锁定)user13 PS 1970-01-01 0 99999 7 10 (Alternate authentication scheme in use.)
不同处解释: Password Set(密码已设置且有效) 用户使用替代认证方案
4.9.删除用户后再次创建说明
[root@node1 ~]# userdel user
[root@node1 ~]# useradd user
useradd: warning: the home directory already exists. # 删除用户是其家目录不会删除,再次创建会提示已经存在
Not copying any file from skel directory into it. # 不从skel目录复制任何内容;正常情况下会创建家目录,然后会复制一些内容到家目录,如.bashrc文件复制到家目录
Creating mailbox file: File exists # mailbox文件存在/var/spool/mail/,每个用户对应一个文件,如果文件存在就会提示该信息
[root@node1 ~]#
4.10.-Z参数
[root@node1 ~]# id -Z # 查看selinux 用户列表
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@node1 ~]# ps -Z $$ # 查看selinux 用户列表
LABEL PID TTY STAT TIME COMMAND
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 15275 pts/5 Ss 0:00 -bash
[root@node1 ~]#
[root@node1 ~]# semanage login -l # 查看selinux用户与系统用户的关联列表
[root@node1 ~]# useradd -Z unconfined_u user10 # selinux用户与系统用户关联
Creating mailbox file: File exists
[root@node1 ~]# semanage login -l # 关联查看Login Name SELinux User MLS/MCS Range Service__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
user10 unconfined_u s0-s0:c0.c1023 *
[root@node1 ~]#