Linux常用命令-useradd

命令

useradd=adduser

描述

create a new user or update default new user information
新建用户或更改新用户的默认配置

用法

1
2
3
Usage: useradd [options] LOGIN
useradd -D
useradd -D [options]

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Options:
-b BASE_DIR 指定用户家目录的上级目录,默认为/home,比如更改为/data
-c 添加用户注释信息,作为/etc/passwd的第5个字段显示
-d HOME_DIR 指定用户家目录的上一级目录,系统会自动创建用户名子目录并更改权限
-D 显示或更改默认的useradd配置,不加参数为显示,添加参数为更改,文件路径/etc/default/useradd
-e EXPIRE_DATE 指定账户过期时间,格式为YYYY-MM-DD
-f 密码过期几天后禁用账户,默认为-1即永不禁用,如果设为0则密码过期后账户也被禁用
-g GID 指定属组的GID或组名,即添加新用户到已存在的组并作为属组
-G GROUP 指定附加组的GID或组名,即创建同名组并添加附加组,用户属于两个组
-h 帮助
-k SKEL_DIR 指定skel基本目录,即包含有.bashrc等配置文件的目录,该参数必须同-m一起使用
-K KEY=VALUE 指定参数覆盖/etc/login.defs中的默认配置
-m 创建用户家目录,默认参数
-M 不创建用户家目录
-N 不创建同名组,则用户会属于默认的users组
-o 允许创建UID相同的账户,该参数必须同-u一起使用
-r 创建一个系统账户
-s SHELL 指定用户的登录shell
-u UID 指定用户的UID,UID必须唯一
-U 创建一个同名组,默认参数

新用户默认配置如下

1
2
3
4
5
6
7
8
$ useradd -D
GROUP=100
HOME=/home #通过-b选项更改
INACTIVE=-1 #通过-f选项更改
EXPIRE= #通过-e选项更改
SHELL=/bin/bash #通过-s选项更改
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

其他默认配置需要修改/etc/login.defs中的参数,如PASS_MAX_DAYS

注意

1.修改默认配置后仅针对后续新建用户生效,不影响之前已经创建的用户
2.linux系统中关注的是id号,而不是名称,删除用户后,家目录不会同步删除,显示为id号,再创建同id号的账户则自动接管家目录
3.如果之前指定了较大的uid,那后续新增用户会以最大的uid为准,依次加1,即使上一次指定了较小的uid,即和/etc/passwd中的uid排序无关

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 创建普通用户
$ useradd usera
$ grep usera /etc/passwd
usera:x:1004:1004::/home/usera:/bin/bash

# 创建系统用户
$ useradd -r userb
$ grep userb /etc/passwd
userb:x:997:995::/home/userb:/bin/bash

# 指定家目录,账户过期时间和登录shell
$ mkdir /data/sftp #需要先创建家目录的上级目录
$ useradd -d /data/sftp/userc -e 2020-12-31 -s /sbin/nologin userc
$ grep userc /etc/passwd
userc:x:1005:1005::/data/sftp/userc:/sbin/nologin
$ chage -l userc
Last password change : Dec 11, 2020
Password expires : never
Password inactive : never
Account expires : Dec 31, 2020
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
# 家目录权限为userc
$ ll /data/sftp/
drwxr-xr-x 3 root root 19 Dec 11 16:26 ./
drwxr-xr-x 6 root root 54 Dec 11 16:26 ../
drwx------ 2 userc userc 62 Dec 11 16:26 userc/

# 指定属组(指定多个用户属于同一个组,常用于文件共享服务)
$ useradd -g www zhangsan
$ useradd -g www lisi

# 误删除新用户家目录,重新生成家目录的默认配置文件
rm -rf /home/userb
cp -r /etc/skel /home/userb

# uid自增规则以最大的uid为准,依次加1,即使上一次指定了较小的uid.即和uid排序无关
$ tail -3 /etc/passwd
usera:x:1002:1002::/home/usera:/bin/bash
userc:x:1003:1011::/home/userc:/bin/bash
userb:x:1010:1023::/home/userb:/bin/bash
$ useradd -u 1004 userd
$ tail -4 /etc/passwd
usera:x:1002:1002::/home/usera:/bin/bash
userc:x:1003:1011::/home/userc:/bin/bash
userb:x:1010:1023::/home/userb:/bin/bash
userd:x:1004:1024::/home/userd:/bin/bash
$ useradd user1
# 新增的user1用户uid为1011而非1005
$ tail -5 /etc/passwd
usera:x:1002:1002::/home/usera:/bin/bash
userc:x:1003:1011::/home/userc:/bin/bash
userb:x:1010:1023::/home/userb:/bin/bash
userd:x:1004:1024::/home/userd:/bin/bash
user1:x:1011:1025::/home/user1:/bin/bash