当前位置:首页>Linux>Linux 的属组与权限:你真的分清楚了吗?

Linux 的属组与权限:你真的分清楚了吗?

  • 2026-10-09 20:04:29
Linux 的属组与权限:你真的分清楚了吗?

在 Linux 系统中,文件与目录的访问控制由两个核心概念共同决定:权限 和 属组。很多初学者甚至经验丰富的运维人员,都会将它们混为一谈,认为“权限”包含了“属组”。其实,它们分工明确,各司其职。今天我们就来彻底理清这两者的区别,以及它们对系统安全和日常运维的影响。


一、先搞懂三个基本角色

Linux 对每个文件都定义了三种角色:

  • 所有者
    :文件的创建者,拥有最高控制权。
  • 所属组
    :文件关联的一个用户组,组内成员享有组权限。
  • 其他用户
    :既不是所有者,也不在所属组里的所有其他用户。

而我们常说的“权限”,就是为这三个角色分别设置的访问规则。


二、权限(Permission)—— 能做什么?

权限由三个字母表示:**r(读)、w(写)、x(执行)**,分别对应三类角色。

权限
对文件的影响
对目录的影响
r
可查看文件内容(cat、less)
可列出目录内容(ls)
w
可修改、删除文件(需配合目录写权限)
可在目录中创建、删除、重命名文件
x
可执行该文件(脚本或程序)
可进入目录(cd)并访问内部文件

权限的表示方法

  • 符号法
    :-rw-r--r--
    • 第一个 - 表示普通文件(d 为目录)
    • 后面三组 rw-、r--、r-- 分别对应所有者、组、其他
  • 数字法
    :644
    • 每个权限位:r=4, w=2, x=1,相加即可
    • rw-r--r--
       = 4+2=6(所有者),4(组),4(其他)→ 644

影响:权限直接决定了用户能否读、写、执行某个文件。比如配置文件设为 600 只有所有者可读写,敏感数据不会被他人窥探;而可执行脚本必须加上 x 才能运行。


三、属组(Group)—— 谁享有组权限?

属组 是文件所关联的一个用户组,它决定了哪些用户能够享受文件权限中“组”那一栏的权限。

举例:

bash

$ ls -l project.txt
-rw-rw---- 1 alice developers 1024 Mar 25 10:00 project.txt
  • 所有者:alice
  • 属组:developers
  • 组权限:rw-(可读可写)

此时,任何属于 developers 组的用户(如 bob)都可以读写这个文件,而其他用户(如 charlie)则完全无权访问。

属组的影响

  1. 多用户协作
    将团队成员加入同一个组,并把共享目录的属组设为该组,即可轻松实现文件共享,无需为每个用户单独授权。
  2. SGID 位
    如果目录设置了 SGID(chmod g+s),新创建的文件会自动继承该目录的属组,而不是创建者的主组。这在团队项目目录中非常实用。
  3. 可执行文件的 SGID
    当可执行文件设置了 SGID,任何用户运行它时,进程将获得该文件属组的权限,从而可以访问该组拥有的资源。
  4. 日志管理等系统服务
    系统日志文件通常属组为 adm 或 systemd-journal,只有这些组的成员才能读取日志。如果属组被意外修改,可能导致日志轮转失败或监控工具无法读取。

四、属组 vs 权限:核心区别

对比项
权限
属组
定义
规定对文件能做什么(读/写/执行)
规定哪些用户享有组权限
作用对象
三类角色(所有者、组、其他)
仅组角色
表现形式rwx
 字母组合或数字
组名或 GID
查看方式ls -l
 第 1 列
ls -l
 第 4 列
修改命令chmodchgrp
 或 chown
影响范围
访问操作的具体能力
将一组用户赋予相同的组权限

简单来说:权限 定义了“可以做什么”,属组 定义了“谁可以做”。


五、如何查看文件的属组?

1. ls -l 直接查看

bash

$ ls -l myfile
-rw-r--r-- 1 alice developers 1024 Mar 25 10:00 myfile

第 4 列 developers 就是属组。

2. stat 查看详细信息

$ stat myfile

  File: myfile

  Size: 1024          Blocks: 8          IO Block: 4096   regular file

Device: 803h/2051d    Inode: 123456      Links: 1

Access: (0644/-rw-r--r--)  Uid: ( 1000/  alice)   Gid: ( 1001/developers)

Gid 后面的括号里就是属组名称。

3. ls -n 查看数字 GID

bash

$ ls -n myfile
-rw-r--r-- 1 1000 1001 1024 Mar 25 10:00 myfile

第 4 列 1001 是属组的数字 ID,可通过 getent group 1001 反查组名。


六、实战场景:属组与权限如何影响你

场景 1:日志文件无限制增长

系统日志轮转失败,往往是因为日志文件属组被改成了普通用户组,导致 logrotate 无法正常移动、压缩旧日志。属组错误 让日志管理机制失效,即使权限为 644 也无济于事。

场景 2:团队协作项目

项目目录 /data/project,属组设为 dev_team,权限 2770(SGID + 组读写执行)。团队成员加入 dev_team 后,都能在此目录下创建、修改文件,且新文件自动继承 dev_team 属组,实现无缝协作。

场景 3:敏感配置文件

/etc/shadow 权限为 000,属组 root,其他用户根本无法读取。即使某个用户属于 root 组,也无法访问——因为组权限为 ---。这里权限起决定性作用。


七、总结

  • 权限
     决定“能不能做”,属组 决定“谁能做”。
  • 两者相辅相成,共同构成 Linux 的访问控制模型。
  • 理解属组和权限的区别,是解决权限问题、保障系统安全、实现团队协作的基础。
  • 查看属组用 ls -l,修改属组用 chgrp 或 chown。

下次当你遇到“Permission denied”时,不妨先用 ls -l 看看属组对不对,再检查权限是否合理——很多问题都出在这两点的配合上。

最新文章

随机文章