不仅是读写:解密 Linux 文件权限与特权提升

· One minute read · 102 字 · 系列:Linux 原理系列

不只是读写:解密 Linux 文件权限与特权提升

在 Linux 中,“一切皆文件”。文件权限不仅定义了数据的可访问性,更是系统安全与特权管理的核心。

权限模型回顾

除了标准的 UGO(User/Group/Others)读、写、执行权限外,Linux 还引入了特殊权限位,它们往往是系统安全防护的边界,也是攻击者眼中的“金矿”。

关键特殊位:SUID/SGID/Sticky Bit

  • SUID (Set User ID):赋予执行文件,进程运行时将以该文件的所有者(通常是 root)身份运行。这是系统程序(如 passwd)实现非特权用户修改密码的关键。
  • SGID (Set Group ID):赋予文件时效果类似 SUID;赋予目录时,在该目录下创建的新文件会自动继承父目录的所属组。
  • Sticky Bit (粘滞位):通常用于共享目录(如 /tmp),确保用户只能删除属于自己的文件。

提权:为何 SUID 是危险的?

如果一个配置不当的程序拥有 SUID 位(且所有者为 root),它就可能成为提权的跳板。

场景分析:利用 SUID 执行任意命令

攻击者可以寻找具备 SUID 权限的、允许执行系统命令的程序。 例如,若程序调用了未定义完整路径的 system() 函数,攻击者可通过修改 PATH 环境变量,让该程序执行恶意的同名可执行文件,从而获得 root 权限。

# 检查系统中所有具备 SUID 权限的文件
find / -perm -4000 -type f 2>/dev/null

生产环境的防御建议

对于构建 Agent 系统的工程师,如何通过权限设计防范此类风险?

  1. 最小权限原则 (PoLP):
    • 限制 SUID:定期扫描系统中不必要的 SUID 文件。
    • 容器化隔离:将 Agent 运行在受限的 Docker 容器中,利用 Namespace 和 cgroups 进行内核级隔离,即便 Agent 被攻破,其权限也仅限于容器内部。
  2. 可观测性增强:
    • 在敏感目录(如 /etc, /usr/bin)部署 auditd 监控,一旦出现异常的 chmod 或 chown 操作立即触发告警。
  3. 防范脚本注入:
    • 在代码层面,永远不要直接执行不可信的 shell 字符串,使用结构化的 API 调用。

总结

权限控制是 Linux 内核安全的第一道防线。作为部署工程师,理解这些特权位的生效机制,不仅能帮助我们更优雅地进行系统运维,更能建立起防御漏洞利用的体系化思维。


本文是 Linux 原理系列第四篇。下篇我们将深入探索“网络命名空间与隔离技术”。

© 2026 CAO ZUOHUA. All rights reserved.