Linux 文件权限的本质:不仅仅是 rwx 的组合

引言

Linux 文件权限系统常被简化为 rwx(读、写、执行)的组合,但其本质远比这复杂。本文将深入探讨文件权限的底层逻辑、扩展机制及实际应用场景。


1. 文件权限基础:rwx 与权限位

1.1 权限位解析

每个文件或目录的权限由 9 位二进制数 表示,分为三组:

  • 用户(User) :文件所有者权限
  • 组(Group) :所属组的权限
  • 其他(Others) :其他用户的权限

示例:-rwxr-xr-- 表示:

  • 所有者:可读、写、执行
  • 组:可读、执行
  • 其他用户:仅可读

1.2 数字权限表示法

权限可转换为 3 位八进制数

  • r=4w=2x=1
  • 例如 755 对应 rwxr-xr-x

2. 超越 rwx:扩展权限机制

2.1 特殊权限位

  • SetUID (SUID)chmod u+s file,执行文件时临时获得所有者权限。
  • SetGID (SGID)chmod g+s directory,新创建的文件继承目录的组权限。
  • 粘滞位 (Sticky Bit)chmod +t directory,限制仅文件所有者可删除目录中的文件(如 /tmp)。

2.2 访问控制列表(ACL)

Linux 支持 ACL 扩展权限,通过 setfaclgetfacl 精细控制权限:

# 给用户 alice 添加读权限

setfacl -m u:alice:r file.txt

3. 能力(Capabilities)

文件可剥离或赋予特定内核能力,例如:

  • CAP_NET_BIND_SERVICE:允许绑定特权端口(如 80)
  • CAP_CHOWN:修改文件所有者
# 查看文件能力

getcap /path/to/file

4. 文件权限的实际应用

4.1 安全场景

  • SUID 的风险 :若可写,可能导致权限提升漏洞。
  • 日志文件权限 :通常设置 640(用户可写,组可读)以防止信息泄露。

4.2 典型配置示例

# 设置目录权限为 755

chmod 755 /var/www

# 禁用 SUID

chmod u-s /usr/bin/vulnerable_program

总结

Linux 文件权限远不止 rwx,其扩展机制如 ACL、能力、特殊位共同构建了灵活且安全的权限体系。理解这些机制是系统管理员和开发者的核心技能。