Linux-用户和用户组管理

User

用户的唯一标识符是 UID 而不是用户名 (但有些服务是检查用户名).

用户登录 Linux 时是比对 /etc/passwd 中的 UID.

UID 分布

  • 0, root
  • 1-999, 系统用户 (虚拟用户), 不提供密码登录
  • 1000-60000, 普通用户

查看用户类别

1
id [option] [user_name]

常见参数:

  • -u, -user, 只输出有效 UID
  • -n, -name, -un 只输出名字
  • -g, 输出 effective group id, -gn 输出 effective groups name
  • -G, 输出所有 group id, -Gn 输出所有 group name

useradd 创建用户

语法:

1
useradd [options] user_name

常见选项:

  • -g, --gid, 指定 primary group
  • -G, --groups, 指定 supplementary groups
  • -d, --home-dir, 指定家目录
  • -s, --shell, 指定 login shell

指定用于主组以及家目录

1
useradd -g users -d /home/john john

指定附加组

1
useradd -g users -G developers -d /home/jane jane

指定登录的 shell

1
useradd -g users -G developers -d /home/hello -s /bin/bash hello

usermod 修改用户

语法:

1
usermod [options] user_name

常用选项:

  • -u, --uid, 修改用户 UID
  • -g, --gid, 修改用户 primary group
  • -G, --groups, 修改用户 supplementary groups
  • -d, --home-dir, 修改用户家目录
  • -s, --shell, 修改 login shell
  • -l, --login, 修改登录名称

修改用户登录名称

假设有一个用户叫 jane, 将其登录名改为 haha:

1
usermod -l haha jane

注意这里改变后, 家目录名没有改变.

userdel 删除用户

语法:

1
userdel [options] user_name

常见选项:

  • -f, --force, 强制删除用户账号
  • -r, --remove, 删除用户的同时删掉与用户相关的所有文件

passwd 修改用户密码

语法:

1
passwd [options] user_name

常用选项:

  • -n, --mindays, 设置修改密码最短天数, 即用户在这几天内不能修改密码
  • -x, --maxdays, 设置密码有效最长天数, 超过这个天数后, 将会要求用户修改密码
  • -w, --warndays, 设置用户在密码过期前多少天受到警告信息
  • -i, --inactive, 设置密码过期多少天后禁用账户
  • -d, --delete, 删除用户密码
  • -S, --status, 显示用户密码信息

Group

每一个 group 都会被分配一个特有的 id 号 – gid, 用于唯一标识.

同一个 group 下的用户可以共享该组下的文件.

root 用户组的 gid 为 0.

系统会预留一些较前的 GID 给系统用户.

相关概念

Effective group

指与当前进程或会话关联的用于权限检查的组.

Primary group

Primary group, 主组, 通常与用户的用户名对应, 在用户创建时自动分配. 每个账户只有一个主组.

主组只能由 root 来改变.

Supplementary groups

一个用户可以有多个 Supplementary groups, 以此控制访问权限.

用户自己可以改变 Supplementary groups.

groupadd 添加组

语法:

1
groupadd [options] group_name

常用参数:

  • -g, --gid, 指定 GID
  • -r, --system, 创建系统组
  • -f, --force, 强制创建, 即使已经存在
  • -p, --password, 指定用户组的密码

创建一个组, 但是不设置任何内容 (比如指定 gid 等).

1
groupadd test

指定创建组的 gid

1
groupadd -g 1001 admins

强制创建一个系统用户组

1
groupadd -r -f testgroup

groupmod 修改组

语法:

1
groupmod [options] group_name

常用选项;

  • -g, --group, 修改 GID
  • -n, --new-name, 修改 group name
  • -o, --non-unique, 允许使用重复的 GID
  • -p, --password, 更改密码

groupdel 删除组

语法:

1
groupdel [options] group_name

常用选项:

  • -f, --force, 强制删除

gpasswd 关联用户和组

gpasswd 可以添加或删除用户到组中.

语法:

1
gpasswd [options] group_name

常用选项:

  • -a, --add, 添加用户到一个组
  • -d, --delete, 从一个组删除用户
  • -M, --member, 指定一个组的成员列表
  • -A, --administrators, 设置一个组的管理员列表
  • -r, --remove-password, 移除组的密码
  • -R, 向其他成员限制访问组

添加一个用户到指定组

1
gpasswd -a user groupname

相关文件

/etc/passwd

存放账户主要信息. 所有用户可读.

每一行记录一个用户, 有七个字段, 如:

1
2
# 用户名:用户密码:UID:GID:Comment:home-dir:shell
root:x:0:0:root:/root:/bin/bash

/etc/shadow

存放账户密码信息. 只有 root 可读.

每一行记录一个用户, 有九个字段, 如:

1
2
# 用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
user:!:18421:0:99999:7:::

/etc/group

存放所有用户组的信息, 每一行记录一个组.

每一行四个字段:

1
2
# 用户组名:用户组密码:GID:用户列表
root:x:0:root

/etc/gshadow

保存组的加密信息, 如用户组管理密码.

每一行记录一个组, 每一行四个字段:

1
# 用户组名:用户组密码:用户组管理员:附加用户

Linux-用户和用户组管理
http://example.com/2024/03/07/Linux-用户和用户组管理/
作者
Jie
发布于
2024年3月7日
许可协议