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

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

 2008-11-12 08:30:08 来源:WEB开发网   
核心提示: 为了测试这个函数,将代码复制到一个文件中并保存为 execwithcaps.c,POSIX 文件能力:分配根用户的能力(5),编译并作为根用户运行它: gcc -o execwithcaps execwithcaps.c -lcap./execwithcaps cap_sys_admin=

为了测试这个函数,将代码复制到一个文件中并保存为 execwithcaps.c,编译并作为根用户运行它:

gcc -o execwithcaps execwithcaps.c -lcap
./execwithcaps cap_sys_admin=eip

文件能力

文件能力特性当前是在 -mm 内核树中实现的,有望在 2.6.24 版中被包含在主线内核中。可以利用文件能力特性将能力分配给程序。例如,ping 程序需要 CAP_NET_RAW。因此,它一直是一个 setuid root 程序。有了文件能力特性之后,就可以减少这个程序的特权数量:

chmod u-s /bin/ping
setfcaps -c cap_net_admin=p -e /bin/ping

这需要从 GoogleCode 获得 libcap 库和相关程序的最新版本(参见 参考资料 中的链接)。以上命令首先从二进制文件上删除 setuid 位,然后给它分配所需的 CAP_NET_RAW 特权。现在,任何用户都可以用 CAP_NET_RAW 特权运行 ping,但是如果 ping 程序被突破了,攻击者也无法掌握其他特权。

问题在于,如何判断一个非特权用户在运行某个程序时需要的最小能力集。如果只考虑一个程序的话,那么可以研究应用程序本身、它的动态链接库和内核源代码。但是,需要对所有 setuid root 程序都重复这个过程。当然,在允许非特权用户作为根用户运行一个应用程序之前,采用这种方法进行检查并不是个坏主意,但是这种方法不切实际。

如果一个程序提供详细的错误输出而且表现正常,那么不使用任何特权来运行这个程序,然后检查错误消息,看看它缺少哪些特权。我们来对 ping 试试这种方法。

chmod u-s /bin/ping
setfcaps -r /bin/ping
su - myuser
ping google.com
  ping: icmp open socket: Operation not permitted

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

Tags:POSIX 文件 能力

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