Linux用户管理

参考: 一篇读懂 Linux 用户管理与操作 - 知乎 (zhihu.com)

一、用户管理

1.检查用户组信息

Linux用户组相关信息都储存于以下文件中

  • /etc/group —— 管理用户组相关信息
1
2
3
4
5
6
7
8
9
10
11
# 储存内容格式
# 账号名称 : 密码 : UID : GID : 用户信息说明列 : 主文件夹 : shell
# 具体密码转存/etc/passwd
$ sudo cat /etc/group
root:x:0:
daemon:x:1:
sudo:x:27:wilson
users:x:100:
wilson:x:1000:
docker:x:998:wilson
...
  • /etc/gshadow —— 管理用户组管理员相关信息
1
2
3
4
5
# 用户组名 : 密码 : 用户组管理员账号 : 该用户组包含的账号名称
# 一般用户组不使用用户组管理员,相应地也就不需要设置密码
$ sudo cat /etc/gshadow
root : : : root
...
  • /etc/passwd —— 管理用户UID/GID重要参数
  • /etc/shadow —— 管理用户密码

2.用户信息查询命令

1
2
3
4
5
6
7
id <user>         # 展示指定user的UID、GID、用户组信息等,默认为当前有效用户
who am i # 等同于 who -m,仅显示当前登录用户相关信息
whoami # 仅显示当前有效用户的用户名
w # 展示当前正在登录主机的用户信息及正在执行的操作
who # 展示当前正在登录主机的用户信息
last <user> # 展示指定用户的历史登录信息,默认为当前有效用户
lastlog -u <user> # 展示指定用户最近的一次登录信息,默认显示所有用户

3.用户管理命令速查

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
# 切换用户
su [options] [username]
# options:
# -:代表使用 login-shell 的变量文件读取方式来登录系统
# -l:同上
# -m:表示使用当前的环境设置,而不读取新用户的配置文件
# -c:仅进行一次命令,执行完后直接回到目前的用户身份
# 如果 username 为空,则默认切换为 root 用户

# 添加用户
useradd [options] [username]
# useradd 默认不会在 /home 下创建用户同名的主目录
# useradd 创建的用户还没有设置登录密码,需要利用passwd进行密码设置

# 删除用户
userdel [options] [username]
$ userdel -r sam # 常用的选项是 -r,它的作用是把用户sam的主目录一起删除

# 修改密码
passwd [options] [username]

# 修改用户
chage [option] [username]
# 修改与用户密码相关的过期信息,如密码失效日、密码最短保留天数、失效前警告天数等

# 修改用户信息
usermod [options] [username]
$ usermod -G group_name user_name # 添加用户到指定的组,但是以前添加的组就会清空掉
$ usermod -a -G sudo user_name # 添加用户至sudo组
# 通过 options 参数,修改 etc/passwd 内用户信息
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
# 切换用户组
newgrp 用户组
$ newgrp root # 让使用者暂时切换到root用户组
# 前提条件是root用户组是该用户的主组或附加组; 或输入root群组密码
# 切换后建立的文件的 group 属性也会随之改变

# 添加用户组
groupadd 选项 用户组
$ groupadd group1 # 新组的组标识号是在当前已有的最大组标识号的基础上加1
$ groupadd -g 101 group2 # 指定新组的组标识号是101

# 删除用户组
groupdel 用户组
$ groupdel group1 # 删除组group1

# 修改用户组
groupmod 选项 用户组
# -g GID 为用户组指定新的组标识号。
# -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
# -n 新用户组 将用户组的名字改为新名字
$ groupmod -g 102 group2 # group2的组标识号修改为102
$ groupmod –g 10000 -n group3 group2 # group2的标识号改为10000,组名修改为group3

# 向用户组添加用户
gpasswd [可选项] 组名
# -a:添加用户到组;
# -d:从组删除用户;
# -A:指定管理员;
# -M:指定组成员和-A的用途差不多;
# -r:删除密码;
# -R:限制用户登入组,只有组中的成员才可以用newgrp加入该组
$ gpasswd users # 设定 users 群组的密码
$ gpasswd -a $USER users # 添加当前用户至 users 群组
$ gpasswd -A peter users # 指定 peter 是 users 群组的管理员
$ gpasswd -a allen users # 添加 allen 至 users 群组, 保留allen原有群组
$ usermod -G users bob # 添加 bob 至 users 群组, 并移除之前bob所在所有群组

4.sudo权限

在 /etc/sudoers 文件内的用户普通用户可以通过 sudo 命令,使用 root 用户权限来执行命令

1
2
3
4
5
6
7
8
9
10
# 查看sudo权限设置
$ sudo cat /etc/sudoers
...
# User privilege specification
# 用户账号 登录者来源主机名=(可切换身份:身份所在用户组) 可执行命令
root ALL=(ALL:ALL) ALL # 可执行 sudo 的单个用户白名单
# Allow members of group sudo to execute any command
# 用户账号 登录者来源主机名=(可切换身份:身份所在用户组) 可执行命令
%sudo ALL=(ALL:ALL) ALL # 可执行 sudo 的用户组白名单
...

可以修改授权,示例:

1
2
3
4
5
6
# testuser 可以利用 sudo 以任何身份执行任何命令
testuser ALL=(ALL:ALL) ALL
# testuser 仅可以以 root 身份执行任何命令
testuser ALL=(root:root) ALL
# testuser 仅可以以 root 身份执行 passwd 命令
testuser ALL=(root:root) /usr/bin/passwd

示例

1.添加拥有docker权限的新用户

1
2
3
4
5
sudo su # 需要有sudo权限才能管理用户
adduser webapp # 添加用户webapp
passwd webapp # 修改webapp密码
> ...
su webapp # 切换至webapp用户

再将webapp用户加入docker组,使其拥有使用docker命令的权限

1
2
3
4
5
6
7
8
9
# 添加docker用户组
# sudo groupadd docker # 一般已存在,不需要执行

# 将当前登陆的用户加入到docker用户组中
sudo gpasswd -a $USER docker

# 测试docker权限
docker -v
> Docker version 20.10.8, build 3967b7d

参考:

CentOS 7 - 创建新用户-阿里云开发者社区 (aliyun.com)

(18条消息) 把用户添加进Docker用户组_wuyundong123的博客-CSDN博客