@dyk
2015-12-17T04:23:11.000000Z
字数 1746
阅读 392
RollBack
由Xen提供的一个安全模块,允许管理员或者开发者对Xen domain进行细粒度的权限控制管理。
XSM的强制控制管理的实现基于一个FLASK(Flux Advanced Security Kernel)安全架构。FLASK的目标是根号的进行安全系统模块的逻辑分离。
SELinux在linux当中相当于Linux安全增强,审计以及策略机制的集合。FLASK Xen Security Module也是在Xen中扮演这样的一个角色。
在Config.mk
XSM_ENABLE = yFLASK_ENABLE = y
之后进行编译Xen,编译完成之后需要在启动项中加入xenpolicy
平常的domu的配置可以在cfg文件中进行一下的配置
seclabel='system_u,system_r:domU_t'
新的模块能够在/tools/flask/policy/policy/modules.conf中进行开启
<module_name> = on
同时需要在相应的目录下tools/flask/policy/policy/modules/文件夹中创建te以及if文件。
声明type new_type_t;给xen_t样式赋予两个attribute——xen_type, mls_privtype xen_t, xen_type, mls_priv;
定于允许dom1对dom2进行的hypercall,例如下面允许dom0_t对security_td调用两个系统调用
allow dom0_t security_t:security check_context;allow <source type> <target type>:<security class> { <hypercall>s };
roles是高于types的一层。可以由多个types定义一个角色。这一层能够限制type,能够阻止将一个错误的type分配给一个VM。
新的角色分配可以使用下面两行的定义语句。
role system_r;role system_r types { xen_type domain_type };或者使用‘-’进行剔除某些types,例如:role vm_r;role vm_r types { domain_type -dom0_t };
在最高层,定义了users。定义在/tools/flask/policy/policy/users中。
例如,FLASK sample中定义了3个用户,system_u, customer1与customer_2。语法如下:
user <user name> roles { <role1> <role2> };
之允许在一定的情况下允许hypercall的调用,例如
constrain grant { map_read map_write copy } ( 这两个hypercall允许,只有当下列的三个条件满足u1 == system_u oru2 == system_u oru1 == u2);
宏定义在Flask policy中被大量的使用了,基本能在.if文件中找到。
定义在xen/xsm/flask/policy/access_vectors。并且将每一个hypercall都进行了分类。每一个类最多可以有32个成员。