Linux的用户与用户组

发布于:2025-06-25 ⋅ 阅读:(20) ⋅ 点赞:(0)

Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员(root)申请一个账号,然后以这个账号的身份进入系统。

用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

用户和用户组相关的指令都需要 root 权限

用户标识符

用户

  • 定义: 用户是系统中的一个实体,代表一个使用或登录系统的个体(人或程序)。
  • 特点: 每个用户有唯一的用户名(用户名)和用户ID(UID)。
  • 用户类型:
    • 普通用户(Regular User): 一般用户,用于日常操作。
    • 超级用户(Root): 系统管理员,拥有全部权限。UID为0。

用户组

  • 定义: 用户组是多个用户的集合,用于批量管理权限和访问控制。
  • 特点: 每个组有唯一的组名(Groupname)和组ID(GID)。

作用:

  • 将多个用户归入同一组
  • 赋予整个组的权限(如访问某个目录或文件)

每个用户都有用户 ID(User ID,UID)和群组 ID (Group ID,GID),每个用户在创建时都有一个用户主组(默认和用户同名,只能有一个),用户创建后可以添加任意个附加组。

用户信息

  • 存用户相关信息的文件:
    • 存储用户信息:/etc/passwd
用户名:密码:UID:GID:注释:家目录:解释器shell

这是 Linux 系统存放所有用户账号信息的文本文件,每一行代表一个用户账户。(有很多是系统账号)

  • 密码(Password):

    • 传统上存储用户的加密密码,但在现代系统中,实际密码的hash存储在 /etc/shadow 文件中,/etc/passwd 一般显示为“x”。
  • UID(User ID,用户编号):

    • 系统为每个用户分配的唯一数字识别码。
    • 意义:
      • UID为0:这是超级用户(root),具有全部权限。
      • UID为1~999:是系统账号或系统保留账号,用于操作系统的内部用途。
      • UID为1000及以上:一般用户的 UID(普通用户账号)GID 是用
        户主组的 ID
  • GID(Group ID,用户主组编号):

    • 用户的主组ID,代表用户所属的主要用户组。
    • GID对应的组信息存放在 /etc/group 文件中。
  • 注释(Comment):

    • 通常是描述用户的备注,例如:用户的全名、部门等。
  • 家目录(Home Directory):

    • 用户登录后所在的目录,比如 /home/john。
  • 解释器shell(Shell):

    • 登录后使用的命令行解释器(终端),比如 /bin/bash。

在这里插入图片描述

  • 例如第一行:

    • 用户名:dnsmasq
    • 密码:x
    • 用户编号:112
    • 用户组编号:65534
    • 注释:,,,(这里没写,比如用户全名、电话等,这里为空)
    • 家目录:/var/lib/misc
    • 解释器:/bin/false
  • 存储用户组信息:/etc/group

    • 组名:用户组密码:GID:属于用户组的成员账号

在这里插入图片描述

  • 存储用户密码信息:/etc/shadow
账号名称:密码:密码更新日期:密码不可被更改的天数:密码需要被更改的天数:密码需要更改期限前的警告天数:密码失效日:账号失效日期:保留字段

例:

purr:$6$abc123...:18304:0:90:7:::
字段 内容或说明
账号名称 purr(用户名)
密码 $6$abc123...(表示用SHA-512算法加密的密码)
密码最后更新时间(天数) 18304(自 1970-01-01 以来到目前为止的天数)
密码不可更改的天数 0(从密码设置起,到可以更改的期限,没有限制)
密码需要更改的天数 90(密码有效期为90天)
密码过期前的警告天数 7(到期前7天开始提醒用户更改密码)
密码失效日 空(用空表示没有设定具体密码失效日)
账号失效日期 空(用空表示账户没有到期时间限制)
保留字段 空(暂无特殊用途)

用户管理

1.whoami指令

查看当前用户

2.adduser指令

添加用户

  • 用法:#adduser 选项 用户名

常用选项:

  • gid:表示指定用户的用户主组,选项的值可以是用户组id,也可以是组名(默认创建同名的用户组)
  • uid:用户的 id(用户的标识符),系统默认会从1000之后按顺序分配 uid,如果不想使用系统分配的,可以通过该选项自定义在这里插入图片描述
  • 验证是否成功:
    • 验证 /etc/passwd 的最后一行,查看是否有 pointer 的信息
tail -n 1 /etc/passwd

加入最后一行输出:

pointer:x:1001:1001::/home/pointer:/bin/bash

说明这个用户 pointer 确实存在于 /etc/passwd 文件中。

  • 验证是否存在家目录(自动创建家目录)
ls -ld /home/pointer

或者

test -d /home/pointer && echo "目录存在" || echo "目录不存在"
  • 如果输出中显示目录信息,说明家目录存在。
  • 如果提示“目录不存在”,说明家目录没有被自动创建或被删除了。

3.usermod指令

修改用户

  • 用法:#usermod 选项 用户名

常用选项:

  • g:指定用户主组
  • u:指定 UID
  • l:修改用户名
  • G:指定附加组
  • a:与 -G 合用(-a -G),增加附加组(保留原组)

附加组:

假设:

  • 用户 john 的主要组是 users。
  • john 还被加入了 developers 和 docker 这两个附加组。

这样:

  • john 的主要组是 users,但他还可以访问 developers 和 docker 组所拥有的权限和资源(比如:访问某些文件或运行某些程序)。

  • 它帮助用户获得额外的权限,方便权限管理和控制。

  • 修改用户主组:
    在这里插入图片描述

  • 修改用户UID:
    在这里插入图片描述

  • 修改用户名:
    在这里插入图片描述
    注意:修改用户名不会同步修改家目录下的目录名。如果想让家目录名和用户名一致,需要自己手动改动

4.passwd指令

设置/更改密码

  • 用法:#passwd 用户名
    默认修改 root 的密码
    在这里插入图片描述

5.su指令

切换用户

  • 用法:#su 用户名
    如果用户名不指定则表示切换到 root 用户
    在这里插入图片描述

  • sudo su pointer2:实际上是以管理员权限(root)切换到用户pointer2。

  • 如果你是普通用户,有权限直接用 su pointer2 也可以切换,不用sudo。

  • 注意事项:

    • 从 root 往普通用户切换不需要密码,反之则需要 root 密码
    • 切换用户之后前后的工作路径是不变的
    • 普通用户没有办法访问 root 用户家目录,反之则可以

6.deluser指令

删除用户

  • 用法:#deluser --remove-home 用户名
    删除用户的同时,删除其家目录

在这里插入图片描述
注意:已经登录的用户删除的时候提示删除失败,没有登录的用户可以正常删除

用户组管理

1.addgroup指令

用户组添加

  • 用法:#addgroup 选项 用户组名

常用选项:

  • gid:设置 GID,默认从 1000 之后递增
    在这里插入图片描述

2.groupmod指令

用户组编辑

  • 用法:#groupmod 选项 用户组名

常用选项:

  • -g:设置 GID
  • -n:修改用户组名
    在这里插入图片描述

3.delgroup指令

用户组删除

  • 用法:#delgroup 用户组名
    在这里插入图片描述
    注意:不允许删除某个用户的主组,需要从组内移出所有用户才能删除。

四、文件的拥有者和所属用户组

1.chown指令

change owner,改变文件拥有者(属主)

  • 用法1:chown 新用户名 待修改文件
    在这里插入图片描述

  • 用法2:chown -R 新用户名 待修改文件
    含义:递归修改,连同目录下所有文件都变更
    在这里插入图片描述

  • 用法3:chown 新用户名:新用户组名 待修改文件
    含义:修改拥有者和所属用户组
    在这里插入图片描述

2.chgrp指令

change group,改变文件所属用户组

  • 用法:chgrp 新用户组名 待修改文件

常用选项:

  • R,递归
    在这里插入图片描述
chgrp -R mygroup /path/to/directory

作用:将 /path/to/directory 这个目录及其所有子文件、子目录的所属用户组都变成 mygroup。

区别

命令 作用 能修改哪些信息 是否需要超级用户权限
chgrp 改变文件或目录的所属用户组 仅修改用户组 非超级用户可以(前提有权限)
chown 改变文件或目录的所有者(用户)用户组 改变所有者(用户),也可以连同组修改 需要超级用户权限(root)或文件拥有者权限

区分附加组和主组

主组(Primary Group)

  • 用户登录系统后,默认归属的组。
  • 这是用户在创建文件时,文件的默认组。
  • 一个用户只能有一个主组。

附加组(Secondary or Supplementary Groups)

  • 用户除了主组外,还可以加入的其他组。
  • 主要用来给用户授予额外的权限。
  • 一个用户可以属于多个附加组。

进行区分

  • 使用id命令查看用户的所有组
id 用户名

输出:

uid=1001(purr) gid=1001(purr) groups=1001(purr), 1002(wheel), 1003(sudo)
  • gid=1001(purr):这是用户的主组(purr)。

  • groups=…:后面列出的是包括主组和所有附加组。

  • 用 ls -l 查看文件的主组

ls -l 文件

输出:

-rw-r--r-- 1 user group 1234 Jun 22 10:00 filename
  • group:这是文件的主组。
  • 用户如果属于该组,通常会有相关权限。

管理方法

  • 主组:由 usermod -g或在用户创建时用 -g 设定。
  • 附加组:用 usermod -aG 添加,比如:
sudo usermod -aG 组名 用户名
项目 主组 附加组
数量 只有一个 多个可以加入
查看方式 id 用户名ls -l 看到的文件组 id 用户名 中列出,或用 groups
作用 文件默认的“主要”所属组 用户额外的权限组

网站公告

今日签到

点亮在社区的每一天
去签到