selinux的规则在用户空间定义、编译和加载。selinux的使能也可在用户空间进行。这样为selinux的管理提供了很大的灵活性。
在用户空间主要安装的程序主要包括:
selinux库和用户空间程序、需要重新编译连接到libselinux或者打补丁的应用程序(例如:sysvinit、coreutils等)和selinux的参考规则。
这里先写一下selinux用户空间程序吧,主页如下:
http://userspace.selinuxproject.org/trac/wiki/WikiStart
用户空间提供下载的主要包括这几个库和程序:
checkpolicy、libselinux、libsemanage、libsepol、policycoreutils、sepolgen
几个的安装都是直接make就行,没有configure的。安装都是make install。
但libselinux和libsemanage最好
make pywrap && make install_pywrap
要不后面python会找不到selinux和semanage的模块的。
其实安装都还简单,都很顺利的成功了,但中间遇到一个极为郁闷的问题。
在后来编译参考规则的时候,一直在报解析规则文件错误。就连最基本的规则
allow bin_t device_t:filesystem associate;
都会报 ":f" 不能识别。
policy/modules/kernel/corecommands.te":18:ERROR 'syntax error' at token ':f' on line 2440:
allow bin_t device_t:filesystem associate;
#line 18
./checkmodule: error(s) encountered while parsing configuration
找了半天才发现是lfs里面的lex导致checkpolicy编译出问题了。
checkpolicy编译的时候会用lex根据policy_scan.l生成y.tab.c。checkpolicy的makefile里面如下:
lex.yy.c: policy_scan.l y.tab.c
$(LEX) policy_scan.l
$(LEX)缺省是lex。
而根据lfs的手册,flex安装的时候把lex弄成如下的脚本了:
cat > /usr/bin/lex << "EOF"
#!/bin/sh
# Begin /usr/bin/lex
exec /usr/bin/flex -l "$@"
# End /usr/bin/lex
而出问题的就是那个 -l 的参数。去了那个参数或者把LEX=flex make就一切都OK了!
今天又发现一个问题,当时安装policycoreutils的时候没有安装PAM,PAM是后来才安装的(讲应用程序安装的时候会提到这个问题)。结果发现使用newrole切换角色的时候提示:
cannot find your entry in the shadow passwd file.
重新配置、编译一下policycoreutils,newrole会链接到libpam进行了。