接下来将下面的行添加到 file_contexts 文件中:
清单 12. /secret 中的文件内容
/secret user_u:base_r:secret_t /secret/helloworld user_u:base_r:base_t /secret/.* user_u:base_r:secret_t
这告诉系统 /secret 目录及其中的任何文件都是 secret_t类型的,只有 /secret/helloworld 文件例外,它应该是 base_t 类型的。要分配磁盘上的上下文,请使用 setfiles:
setfiles file_contexts /
噢不,有错!SELinux 不认识 secret_t 类型。实际上,我们可以动态重新加载 SELinux 策略。不过现在为了简单起见,我们还是重新启动 QEMU 映像好了。当然,由于我们没有安装引导程序,因此简单地重新启动并不能正常工作。因此,我们需要输入 poweroff 关闭 QEMU 映像。如果窗口在打印 “Power down” 之后就没有显示了,请使用 Ctrl-c 来中断 qemu 命令。重新运行 qemu 命令来重新启动它。然后尝试再次运行上面的 setfiles 命令。
验证策略的重新加载正确工作了:
showctx / /secret /secret/helloworld /secret/dontlook cat /secret/dontlook
不过等一会儿!您可以看到秘密类型了。
这是一个编译时内核选项 CONFIG_SECURITY_SELINUX_DEVELOP 的结果。这个选项默认将 SELinux 设置为非强制状态。要验证这个设置,请输入:
cat /selinux/enforce
这应该会返回 0。要将 SELinux 设置成强制模式,请输入:
echo 1 > /selinux/enforce
如果希望,您可以在系统引导时通过 init 脚本来自动实现这种功能,如清单 13 所示;或者简单地编译一个没有 SELINUX_DEVELOP 支持的内核。
清单 13. 在引导时将 SELinux 设置成强制模式
cat >> /etc/rc.d/selinux-enforce << EOF #!/bin/sh echo 1 > /selinux/enforce EOF chmod ugo+x /etc/rc.d/selinux-enforce rc-update add default selinux-enforce
现在 SELinux 已经处于强制模式了,请再试图浏览 /secret 下面的内容。注意,尽管进程上下文有权读取 /secret/helloworld,但实际上您并不能真正读取它,因为无法通过 /secret。当然,创建一个到这个文件的硬链接可以跳过这个问题。
原文链接:http://www-128.ibm.com/developerworks/cn/linux/l-selinux.html
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一页 1 2 3 4下一页
上一篇:Bash 实例-探讨Gentoo ebuild系统 下一篇:新手安装Xentoo(Xen+Gentoo)的极速体验
|