POSIX 文件能力:分配根用户的能力
2008-11-12 08:30:08 来源:WEB开发网核心提示:一些程序需要以非特权用户的身份执行特权操作,例如,POSIX 文件能力:分配根用户的能力,passwd 程序经常对 /etc/passwd 和 /etc/shadow 文件执行写操作,在 UNIX® 系统上,然后才能放弃某些根特权,同时保留其他特权,这种控制是通过设置二进制文件上的 setuid 位实现的,这个
一些程序需要以非特权用户的身份执行特权操作。例如,passwd 程序经常对 /etc/passwd 和 /etc/shadow 文件执行写操作。在 UNIX® 系统上,这种控制是通过设置二进制文件上的 setuid 位实现的。这个位告诉系统,在运行这个程序时,无论执行它的用户是谁,都应该把它看作属于拥有这个文件的用户(通常是根用户)。因为用户不能编写 passwd 程序,而且它对允许用户执行的操作有严格限制,所以这个设置常常是安全的。更复杂的程序使用保存的 uid 在根用户和非根用户之间来回切换。
POSIX 能力将根特权划分成更小的特权,所以可以只用根用户特权的一个子集来运行任务。文件能力特性可以给一个程序分配这样的特权,这大大简化了能力的使用。在 Linux 中已经可以使用 POSIX 能力了。与将用户切换为根用户相比,使用能力有几个好处:
可以将能力从有效集(effective set)中删除,但是保留在允许集(permitted set)中,从而防止滥用能力。
可以从允许集中删除所有不需要的能力,这样就无法恢复这些能力。坦率地说,大多数能力是危险的,可能被滥用,减少攻击者可以利用的能力有助于保护系统。
在对常规的可执行文件执行 exec(3) 之后,所有能力都会丢失。(细节比较复杂,而且这种情况可能不久就会改变。本文后面会进一步解释这个问题。)
本文讲解程序如何使用 POSIX 能力,如何确定一个程序需要哪些能力,以及如何为程序分配这些能力。
进程能力
多年以来,POSIX 能力只能分配给进程,而不能分配给文件。因此,程序必须由根用户启动(或者程序属于根用户并设置了它的 setuid 位),然后才能放弃某些根特权,同时保留其他特权。另外,放弃能力的操作次序也非常严格:
更多精彩
赞助商链接