Linux 文件权限的本质:不仅仅是 rwx 的组合
引言
Linux 文件权限系统常被简化为 rwx
(读、写、执行)的组合,但其本质远比这复杂。本文将深入探讨文件权限的底层逻辑、扩展机制及实际应用场景。
1. 文件权限基础:rwx 与权限位
1.1 权限位解析
每个文件或目录的权限由 9 位二进制数 表示,分为三组:
- 用户(User) :文件所有者权限
- 组(Group) :所属组的权限
- 其他(Others) :其他用户的权限
示例:-rwxr-xr--
表示:
- 所有者:可读、写、执行
- 组:可读、执行
- 其他用户:仅可读
1.2 数字权限表示法
权限可转换为 3 位八进制数 :
r=4
,w=2
,x=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 扩展权限,通过 setfacl
和 getfacl
精细控制权限:
# 给用户 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、能力、特殊位共同构建了灵活且安全的权限体系。理解这些机制是系统管理员和开发者的核心技能。