Linux 常用命令:用户和组管理

用户&组数据文件

用户清单通常保存在 /etc/passwd 文件内,把哈希编码后的密码保存在 /etc/shadow 文件内。这两个文件都是纯文本档,以简单的格式保存,可以用文本编辑器读取与修改。每个用户占一行,其字段以冒号分隔 (“:”)。

  • /etc/passwd 用户清单,按固定顺序记录字段,并以 : 隔开,如:admin:x:1000:1000::/home/admin:/bin/bash,字段清单:
    • 用户名,例如 admin;
    • 密码: 用 DES, MD5, SHA-256 或 SHA-512 加密过的密码,特殊值 x 表示密码保存在 /etc/shadow 文件;
    • uid:用于辨识用户的不重复数字;
    • gid:用户主要群组 (Debian 的默认值系为每个用户创建一个群组) 的不重复号码;
    • GECOS:用户常规信息,类似于备注,例如其真实姓名和电话号码等;
    • 登入目录,登录后进入该目录,用于保存用户的个人文件 (环境变量 $HOME 通常指向此处);
    • 登录时运行的程序。通常是命令解译器 (shell),若指定为 /bin/false (不做任何事并立即回到控制),则用户无法进入系统;若指定为 /usr/sbin/nologin 则是禁止登录。
  • /etc/shadow 保存用户密码,含以下的字段:
    • 用户名;
    • 加密的密码;
    • 管理密码期限的字段。
  • /etc/group 用户组信息,包括以下的字段:
    • 群组名称;
    • 密码 (可选):只在加入群组时会用到 (使用 newgrp 或 sg 命令,见专栏 基本知识 在多个群组工作);
    • gid:不重复的群组识别码;
    • 成员清单:属于此群组的用户名清单,以逗号分隔。

用户&组管理命令及参数说明

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
## 添加用户
useradd 用户名

参数:
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在, 则同时使用 -m 选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组,多个组用逗号分隔。
-s Shell 文件 指定用户的登录 Shell。
-u 用户号 指定用户的用户号,如果同时有 -o 选项,则可以重复使用其他用户的标识号。


## 修改密码
passwd 用户名

参数:
-l 禁用账号。
-u 账号解锁。
-d 使账号无密码。
-f 强迫用户下次登录时修改密码。

## 修改用户信息
usermod 用户名

参数
-c 备注。
-d 登入目录 指定用户主目录,如果此目录不存在, 则同时使用 -m 选项,可以创建主目录。
-e 有效期限
-f 缓冲天数 修改在密码过期后多少天即关闭该帐号。
-g 用户组 指定用户所属的用户组。
-G 用户组 指定用户所属的附加组,多个组用逗号分隔。
-l 帐号名称 修改用户帐号名称。
-L 锁定用户密码,使密码无效。
-s Shell文件 指定用户的登录 Shell。
-u 用户ID 指定用户的用户的标识号,如果同时有 -o 选项,则可以重复使用其他用户的标识号。
-U 解除密码锁定。

## 删除用户
userdel 用户名

## 创建组
groupadd 组名

参数:
-g GID 指定新用户组的组标识号(GID)。
-o 一般与 -g 选项同时使用,表示新用户组的 GID 可以与系统已有用户组的 GID 相同。

## 修改组信息
groupmod 组名

参数:
-g GID 指定新用户组的组标识号(GID)。
-o 一般与 -g 选项同时使用,表示新用户组的 GID 可以与系统已有用户组的 GID 相同。

## 删除组
groupdel 组名

## 切换登录用户
su 用户名 # 不加载用户的 ~/.profile
su - 用户名 # 加载用户的 ~/.profile

## 将用户附加到 sudo 组
usermod -aG sudo 用户名 # -a 参数表示附加,只和 -G 参数一同使用,表示将用户增加到组中。

## 刷新 sudo 组
newgrp sudo

## 查看 sudo 组全部用户
getent group sudo

## 查看用户是否属于 sudo 组(查看用户所属用户组)
groups 用户名

## 把用户从组中去掉
gpasswd -d 用户名 组名

## 修改帐号和密码的有效期限
chage [options] user
命令参数:
-d 指定密码最后修改日期
-E 密码到期的日期,过了这天,此账号将不可用。0表示马上过期,-1表示永不过期。
-h 显示帮助信息并退出
-I 密码过期后,锁定账号的天数
-l 列出用户以及密码的有效期
-m 密码可以更改的最小天数。为零代表任何时候都可以更改密码。
-M 密码保持有效的最大天数。
-W 密码过期前,提前收到警告信息的天数。

实例

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 创建用户组 users
groupadd users

# 创建用户 yiba,用户组为 users
useradd yiba -g users

# 把 yiba 附加到 sudo 组,用户既属于 users 组,又属于 sudo 组
usermod -aG sudo yiba

# 设置/修改 yiba 密码
passwd yiba

# 禁止 yiba 用密码登录(还能用 key 登录)
passwd -l yiba

# 禁止 yiba 登录(包括不能用 key 登录),把用户有效期限时间戳改为1
chage -E 1 yiba
# 或
usermod -e 1 yiba

# 用户可用管道连接,但不能登入系统
usermod -s /bin/false

创建代理的用户

用户可等过 key 连接系统,用来作为 socks5 代理,但是不能登录到系统终端。

1
2
3
4
5
6
7
8
9
10
11
# 创建代理用户 pxy
useradd pxy -g proxy -s /bin/false
mkdir -p /home/pxy/.ssh
cd /home/pxy/.ssh

# 打开授权公钥保存文件
vim authorized_keys
# 然后输入客户端 shh 公钥

# 修改权限
chown pxy:proxy -R /home/pxy

  • usermod: command not found
    要使用 su - 切换到 root 用户才会加载用户环境变量。

Linux 常用命令:用户和组管理

https://coderpan.com/linux/linux-user-manage.html

作者

CoderPan

发布于

2023-07-11

更新于

2024-02-08

许可协议

评论