如何用文件系统功能替换 setuid

Nil*_*ils 5 linux security setuid capabilities

这个问题的启发,下面是后续内容:

你们中的一些人可能知道 setuid-binaries 是危险的,因为一些漏洞利用这些来将他们的权限升级到 root。

现在似乎有一个有趣的想法用不同的、更安全的方法来替换 setuid。

如何?

jor*_*anm 6

增加了 Linux 中的文件系统功能以允许比单独 setuid 允许的更细粒度的控制。使用 setuid 可以将有效权限完全升级到用户(通常是 root)。capabilities(7) 联机帮助页提供了以下说明:

为了执行权限检查,传统的 Unix 实现区分了两类 pro? cesses:特权进程(其有效用户ID为0,称为超级用户或root),和非特权pro?cesses(其有效 UID 非零)。特权进程绕过所有内核权限检查,而 unprivi? 合法进程会根据进程的凭据(通常:有效 UID、有效 GID 和补充组列表)进行全面的权限检查。

从内核 2.2 开始,Linux 将传统上与超级用户关联的权限划分为不同的单元,称为功能,可以独立启用和禁用。功能是每个线程的属性。

如果应用程序需要调用 chroot() 的能力(通常只允许 root 用户使用),CAP_SYS_CHROOT则可以在二进制文件而不是 setuid 上设置。这可以使用 setcap 命令完成:

setcap CAP_SYS_CHROOT /bin/mybin
Run Code Online (Sandbox Code Playgroud)

RPM 版本 4.7.0 开始,可以使用%caps.

Fedora 15 的发布目标是删除此错误报告中跟踪的所有 setuid 二进制文件。根据错误报告,这个目标已经实现。

任何感兴趣的人都可以阅读维基百科关于基于能力的安全性的文章。