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

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

 2008-11-12 08:30:08 来源:WEB开发网   
核心提示: 当插入这个内核模块时,对 cap_capable() 的任何调用都被替换为对 cr_capable() 函数的调用,POSIX 文件能力:分配根用户的能力(7),这个函数输出需要能力的程序的名称和被核查的能力,然后,在许多 UNIX 变体上很少有改动,发行版有时候会在此之上应用它们自己的补

当插入这个内核模块时,对 cap_capable() 的任何调用都被替换为对 cr_capable() 函数的调用。这个函数输出需要能力的程序的名称和被核查的能力。然后,通过调用 jprobe_return() 继续执行实际的 cap_capable() 调用。

使用清单 4 中的 makefile 编译这个模块:

清单 4. capable_probe 的 makefile

obj-m := capable_probe.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
  $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
  rm -f *.mod.c *.ko *.o

然后作为根用户执行它:

  /sbin/insmod capable_probe.ko

现在在一个窗口中,用以下命令查看系统日志:

  tail -f /var/log/messages

在另一个窗口中,作为非根用户执行没有设置 setuid 位的 ping 二进制程序:

  /bin/ping google.com

系统日志现在包含关于 ping 的几条记录。这些记录指出这个程序试图使用的能力。这些能力并非都是必需的。ping 请求的能力是 21、13 和 7,可以检查 /usr/include/linux/capability.h,将整数转换为能力名称:

21 是 CAP_SYS_ADMIN。不要把这个能力授予任何 程序。

7 是 CAP_SETUID。ping 应该不需要这个能力。

13 是 CAP_NET_RAW。ping 应该需要这个能力。

我们将这个能力授予 ping,看看它是否能够成功执行。

  setfcaps -c cap_net_raw=p -e /bin/ping
  (become non root user)
  ping google.com

不出所料,ping 成功了。

复杂情况

现有的软件常常编写得尽可能可靠,在许多 UNIX 变体上很少有改动。发行版有时候会在此之上应用它们自己的补丁,所以在某些情况下不可能用文件能力替代 setuid 位。

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

Tags:POSIX 文件 能力

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