Linux 中的 setuid:原理、实践与安全详解

💡 原文中文,约4500字,阅读约需11分钟。
📝

内容提要

本文探讨了 setuid 的原理、应用及安全隐患。setuid 使用户能临时获得程序所有者权限,常用于 passwd 和 sudo 等工具,但存在安全风险。应遵循最小权限原则,避免滥用,并定期审计 setuid 程序,以确保系统安全。

🎯

关键要点

  • 本文探讨了 setuid 的原理、应用及安全隐患。
  • setuid 允许用户临时获得程序所有者的权限,常用于 passwd 和 sudo 等工具。
  • setuid 是 Linux 文件系统权限中的特殊标志位,执行该文件的用户将获得文件所有者的 UID 权限。
  • setuid 的工作原理涉及真实 UID、有效 UID 和保存的设置 UID。
  • setuid 主要用于需要临时提升权限的工具,如 passwd、su、sudo 和 mount。
  • 使用 chmod 命令可以设置和移除 setuid 位。
  • setuid 程序存在安全风险,若存在漏洞,攻击者可获取文件所有者的权限。
  • 常见的安全隐患包括命令注入、路径遍历和未及时放弃特权。
  • 应遵循最小权限原则,仅对必要程序设置 setuid,避免“一刀切”。
  • 应避免在 shell 脚本中使用 setuid,改用编译型语言。
  • 定期审计 setuid 程序,确保无异常文件。
  • setgid 与 setuid 类似,但修改的是进程的有效 GID。
  • capabilities 是 setuid 的替代方案,允许程序仅获取特定权限。
  • 现代系统通过 nosuid 挂载选项和 no_new_privs 标志等机制限制 setuid 风险。
  • 理解 setuid 的原理与安全边界是保障系统安全的关键一步。

延伸问答

setuid 在 Linux 中的作用是什么?

setuid 允许用户在执行程序时临时获得程序所有者的权限,常用于需要提升权限的工具,如 passwd 和 sudo。

setuid 的工作原理是什么?

setuid 修改进程的有效 UID,使其临时获得文件所有者的权限,涉及真实 UID、有效 UID 和保存的设置 UID。

使用 setuid 时需要注意哪些安全隐患?

常见安全隐患包括命令注入、路径遍历和未及时放弃特权,可能导致权限泄露。

如何设置和移除 setuid 权限位?

使用 chmod 命令设置 setuid 位为 'chmod u+s 文件名',移除则为 'chmod u-s 文件名'。

为什么不建议在 shell 脚本中使用 setuid?

大多数 Linux 发行版会忽略 shell 脚本的 setuid 位,存在安全风险,因此应使用编译型语言。

如何定期审计系统中的 setuid 程序?

可以使用 find 命令查找所有 setuid 程序,确保无异常文件,命令为 'find / -perm -4000 2> /dev/null'。

➡️

继续阅读