安装完selinux用户空间的lib和程序以后,要使用selinux还需要重新安装几个应用程序。
开始摸着弄得,很麻烦,中间有很多东西是用的时候有问题才发现的。
后来才发现在selinux userspace官网的Userland Packages里面大部分都写了,网址见下:
http://userspace.selinuxproject.org/trac/wiki/Userland
下面还是大概写一下为什么要安装吧,要是遇到问题了也能做个参考。
1、SysVinit 这个是一定要重新编译的。而且要打一个补丁。我用的gentoo里面的补丁。加上这个补丁以后,在init开始运行的前期就会根据selinux的config文件加载相应的policy。并进入相应的模式 (enforcing、permissive、disabled)。
补丁可以在gentoo的各个镜像的 distfiles/sysvinit-xxx-patches.tar.bz2里面找到。补丁文件不一定能直接使用,自己稍作修改就行了。编译的时候我还是按照lfs的弄得,但要 make的时候记着要:
make WITH_SELINUX=yes。
2、coreutils 这个要重新configure、make一下,链接到libselinux。不需要特殊的参数,configure会自动判断libselinux的。
不重新编译这个的话,ls、id那写的 -Z 参数都没用的,都会显示 ? 或者 不正常的东西。chcron也用不了。
3、pam 开始的时候没安装这个库,结果登陆了以后通过id -Z看到的用户的信息一直都是system_u:system_r (semange login 里面都设了还是不对)。开始郁闷了很久,后来看到Harry Ciao的《SELinux 学习笔记》有一个地方提到了PAM,才开始怀疑用户登陆时候脚色的切换是不是依靠pam。然后才装了,结果就对了。安装方法参考blfs,configure的时候加个 --enable-selinux的参数。
另外:安装linux-pam后要重新编译 policycoreutils,否则newrole 的时候会报: cannot find your entry in the shadow passwd file.
4、shadow 编译完一定要重新编译一下这个,blfs里面说了。而且selinux好像也需要重新编译这个。不需要加参数,会自动判断selinux和pam的。
5、utils-linux selinux userspace的Userland Packages里面说了就弄了,configure的时候需要加上 --with-selinux 的参数
6、udev 这个官网里面没说。发现这个问题是在relable系统的时候,/dev/console明明已经relable成console_device_t。但是重启完了以后就变成 device_t了。/dev/tty* 也是。后来就怀疑到这了。感觉像udev重新创建/dev的时候没relable。就试着重装了一下,OK了。configure的时候需要加上 --with-selinux 的参数
另外,当时newrole -r xxx_r 的时候报 Error! Shell is not valid. 的错误。看了下newrole的代码,它会去 /etc/shells 里面判断当前的shell是否合法的?感觉很奇怪。LFS里面没有这个文件。自己建一个吧,内容如下就行:
# /etc/shells: valid login shells
/bin/bash
/bin/sh