专栏首页上善若水S008SELinux的约束操作

S008SELinux的约束操作

约束(constraints),是SELinux很有用的特新,它的使用十分普遍。很多时候,用户觉得约束是一种添加到黑名单上,并使其受限的方法。当然前提是默认允许,约束它告诉人们的是在指定情况下这是不允许的。但是在SELinux中,这种感觉是不准确的。SELinux中,约束更像是过滤器,它遵循白名单的方法。SELinux中的约束(constraints)是在指定的情况下允许某些操作,不匹配要求的操作则被禁止。

但是话又说回来,如果没有针对操作定义约束(constraints),SELinux是允许操作执行的(当然需通过其他检查,比如类型强制规则)。 约束(constraints)和类型强制(TE)的区别

类型强制使用安全上下文中的类型字段(第三部分)。不同于类型强制,约束则在规则中使用整个上下文,比起域(domains)对于操作更加有针对性。比如以下例子:

CODE SELinux object identity change constraint

constrain dir_file_class_set{create relabelto relabelfrom}  
(  
        u1 == u2  
        or t1 ==can_change_object_identity  
);  

上面看到的是一条约束,它描述了如果两个上下文中的SELinux部分一致(u1==u2)或者如果域被分配了can_change_object_identity属性,则域可以创建、重打标签目录和文件。这里的属性可以使用seinfo工具进行查询:

user $seinfo -acan_change_object_identity –x  

如果不满足这些限制,操作将会被拒绝。哪怕通过其他的类型强制规则明确运行此操作。

SELinux中的约束

SELinux使用约束来修整它的策略。它的很多特性都是通过约束(constraints)来实现的,基于用户访问控制(User-based access control)便是其中之一。MLS和MCS很多的规则也是通过约束来实现的。修改约束需要认真斟酌。很多情况下,如果需要修改,它将会放入发布版本的基础策略中一起构建。 罗列约束

可以使用seinfo工具来显示系统中的约束。但是它立刻返回的是完全展开的输出,使用的是数学表达式上的语法。如下所示:

user $seinfo --constrain  
constrain{ file } { create relabelfrom relabelto }  
(  u1 u2 == t1 { logrotate_t policykit_auth_t sysadm_t lvm_t rpm_t xdm_t krb5kdc_tnewrole_t portage_t  
local_login_trpm_script_t sysadm_passwd_t policykit_t portage_sandbox_t groupadd_t kpropd_tpasswd_t  
updpwd_tchfn_t cupsd_t gssd_t httpd_t slapd_t sshd_t udev_t virtd_t puppetmaster_trestorecond_t  
setfiles_tkadmind_t sulogin_t useradd_t } ==  || );  

需要记住

  1. 约束是SELinux策略中完整的部分
  2. 当某些操作被拒绝时,即使有相应的TE规则也被拒绝。此时很有可能是约束的限制
  3. 约束使用白名单方法,满足约束则被允许

参考链接

  1. SELinux/Tutorials/Putting constraints on operations

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • S006SELinux(SEAndroid)是个什么呀

    SEAndroid 是一套安全机制,实现的主要目的是为了是Android系统更安全。 SELinux是被设计为一个灵活的可配置的MAC机制。 SEAndro...

    上善若水.夏
  • S010SEAndroid中相关命令(一)seinfo

    安全上下文是一个简单的、一致的访问控制属性,在SELinux中,类型标识符是安全上下文的主要组成部分,由于历史原因,一个进程的类型通常被称为一个域(domain...

    上善若水.夏
  • 041android初级篇之apk签名key keystore格式转pk8+x509.pem

    常用的android的签名工具有两个即jarsigner 和apksigner。这两种使用的key格式不一样,keystore格式转pk8+x509.pem

    上善若水.夏
  • 说一说虚拟化绕不开的io半虚拟化

    QEMU-KVM作为一个VMM提供了全虚拟化环境,guest不经过任何修改就能运行在KVM环境中。不过KVM在IO虚拟化方面,使用QEMU纯软件的方式来...

    虚拟化云计算
  • 爱摘苹果的小明

    小明家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,小明就会跑去摘苹果。小明有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩...

    书童小二
  • JavaScript中匿名函数的递归(使用arguments和callee属性实现)

    函数的内部调用函数本身的话,可以直接写函数的名字来实现,但是如果是匿名函数的话,这样的做法就行不通了。 解决的办法是有的,使用arguments和callee...

    acoolgiser
  • 如何优雅的绕过杀软获取系统权限

    特征库扫描法:检查文件中是否存在与常见病毒相同的代码。如果匹配,则说明存在病毒。由于该方法较慢,因此现在一般使用通配符扫描法进行代替。

    信安之路
  • 程序员小白入行区块链的六种方式

    区块链大本营
  • 套路-反套路,11类hr面试问题汇总

    经历重重技术面可能会迎来hr的套路面试,有些公司hr也具有一票否决权,下面总结下11类hr面试常用套路和解决办法

    行哥玩Python
  • 【ECharts】数据量差距大

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    奋飛

扫码关注云+社区

领取腾讯云代金券