(!lids_local_load)))
#else
#define cap_raised(c, flag) (cap_t(c) & CAP_TO_MASK(flag) & cap_bset)
#endif
你会看到这里的cap_bset(一般默认都是1)是很重要的。如果有人在那里把一些位置0,capability就可以会禁止整个系统。如,18 位的CAP_SYS_CHROOT, 如果我们把他置0,表明我们就不能用chroot()了。
如果你看到sys_chroot的源代码,你就发现很多问题了:
if (!capable(CAP_SYS_CHROOT)) {
goto dput_and_out;
}
capable()会返回0,在位18为0,这样chroot就会给用户返回一个错误信息。
2、在LIDS里的capability
LIDS用capability来限制整个动作进程。LIDS用的函数是capable()。在内核代码中已经存在的许多capable()里。我们可以禁止一些当前系统默认的capability并且在用户违反LIDS定义的规则的时候报警。
至于管理员,他们也可以用lidsadm和密码来改变capability。当内核授权用户的时候,capability变量cap_bset 就会改变。
作为管理员一个需要理解的重要东西是每一个capability的意思。然后,在密封内核的时候禁止capability,并用密码来改变它们。
关键词:LIDS精通与进阶(中)