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 ~]#