现在让我们建立一个我们自己的用户域, 并把它叫做second_t 。 我们也将会建立一个新的角色叫做second_r 。 要建立second_r 角色首先在前面的部分(刚刚分配了 user_r 角色并且并不真正建立这样的用户) 中一步一步跟着作,但是不要运行第 5.2 节中的make命令。在你已经编辑 /etc/selinux/user之后,回到这里并且继续下一部分,关于编辑使用者领域文件的部分。
关于为什么我不想要你运行make指令的原因,是因为早先的部分刚刚分配了缺省的一个 user_r 的角色。 但是我们将会建立一个新的角色,而且同样地我们需要一个新的域与它搭配。以下部分进行概略说明。
6.1编辑用户的域文件
用户域的配置文件是 /etc/selinux/domains/user.te 。请先看一遍。 添加以下几行:
full_user_role(second)
allow system_r second_r
allow sysadm_r second_r
在文件的什么位置添加是无所谓的,在上面添加注释:
# if adding new user roles make sure you edit the in_user_role macro in
# macros/user_macros.te to match
再来编辑 /etc/selinux/macros/user_macros.te 文件进行匹配。 打开此文件并找到 in_user_role (差不多在文件的结尾)这行。添加 "role second_r types $1;" 现在这部分文件应该像这样:
undefine(`in_user_role')
define(`in_user_role', `
role user_r types $1;
role second_r types $1;
')
回到我们编辑的第一个文件 (full_user_role(second)), 这样我们就建立了second_t域和second_home_dir_t类型以及 second_home_t 类型(用户主目录的类型和主目录里文件的类型)。一个 second_tmp_t类型 ,当在/tmp目录下建立文件时。 类型 second_tmpfs_t是在tmpfs中共享内存文件系统中建立文件的上下文。 最后,second_tty_device_t和 second_devpts_t类型分别被用来标记终端设备(tty)和虚拟终端设备。当然也建立了相应的策略应用于这些标记。
SE Linux内部并不支持任何类型的标定, 以及类型/域的继承,等。当然策略语言的编写也不支持这些特征。 所以我们用M4宏编译器来设置简单的域和类型。
我们现在来建立一个用户在这个新域中使用 (second_t)并访问 second_r 角色。
6.2再次建立一个新的测试用户
使用 useradd, 建立一个新的用户。(让我们假设用户叫做 " spike") 把spike加入 /etc/selinux/users 只给予他对 second_r 角色的访问权和没有其它权限。 然后运行
make -C /etc/selinux load
应用新的策略。
接下来是设置缺省域和新的角色。 我们可以编辑 /etc/security/default_type 文件并添加以下行:
second_r:second_t
我们现在必须手动设定/home/spike 和它的上下文。useradd ,命令不会做这些事情,它只支持重新标记用户的 user_r 角色。 运行下面的命令:
find /home/spike -print0 | xargs -0 chcon -h system_u:object_r:second_home_t ;\
chcon -h system_u:object_r:second_home_dir_t /home/spike
现在试着用spike用户身份登录。