WEB开发网
开发学院操作系统Linux/Unix POSIX 文件能力:分配根用户的能力 阅读

POSIX 文件能力:分配根用户的能力

 2008-11-12 08:30:08 来源:WEB开发网   
核心提示: 如果没有设置 SECURE_NOROOT,那么当进程执行文件时,POSIX 文件能力:分配根用户的能力(3),就按照完全填充的文件能力集计算新的能力集,具体地说: 如果进程的真实 uid 或有效 uid 是 0(根用户),如果攻击者迫使这个程序执行另一个文件,那么所有能力都会撤消,或者文件

如果没有设置 SECURE_NOROOT,那么当进程执行文件时,就按照完全填充的文件能力集计算新的能力集。具体地说:

如果进程的真实 uid 或有效 uid 是 0(根用户),或者文件是 setuid root,那么文件的可继承集和允许集就是满的。

如果进程的有效 uid 是根用户,或者文件是 setuid root,那么文件有效集就是满的。

如果没有设置 SECURE_NO_SETUID_FIXUP,那么当进程将它的真实或有效 uid 切换到 0 或切换回来时,要分几种情况计算能力集:

如果进程将它的有效 uid 从 0 切换到非 0,那么它的有效能力集被清空。

如果进程将它的真实、有效或保存的 uid 从至少一个 0 切换到全部非 0,那么允许能力集和有效能力集都被清空。

如果进程将它的有效 uid 从非 0 切换到 0,那么有效集被设置为与允许集相同。

这套规则让进程可以根据根用户或者通过运行 setuid root 文件拥有能力。但是,SECURE_NO_SETUID_FIXUP 禁止进程在变成非根之后保留任何能力。但是,如果没有设置 SECURE_NOROOT,那么一个已经放弃一些能力的根进程只需执行另一个程序,就能够恢复它的能力。所以为了能够使用能力并保证系统安全,根进程必须能够不可逆转地将它的 uid 切换到非 0,同时保留一些能力。

通过使用 prctl(3),进程可以请求在下一次调用 setuid(2) 时保留它的能力。这意味着进程可以:

通过根用户身份或者执行 setuid root 二进制文件,作为根进程启动。

通过调用 prctl(2) 设置 PR_SET_KEEPCAPS,这请求系统在调用 setuid(2) 时保留它的能力。

调用 setuid(2) 或相关的系统调用来修改 userid。

调用 cap_set_proc(3) 来删除能力。

现在,进程可以一直用根特权的一个子集运行。如果攻击者突破了这个程序,他也只能使用有效集中的能力;即使调用了 cap_set_proc(3),也只能使用允许集中的能力。另外,如果攻击者迫使这个程序执行另一个文件,那么所有能力都会撤消,将作为非特权用户执行这个文件。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:POSIX 文件 能力

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接