您的位置:首页 > 运维架构 > Linux

使用SELinux布尔值

2015-08-03 18:28 561 查看
已经探讨过文件访问时AVC拒绝。当经常使用SELinux会发现,有些活动按理应该被允许,却被拒绝了。当有些原因是依据某些因素(选择),将推荐SELinux策略作者将策略设置为可选的。SELinux中可选意味着访问权限通过SELinux布尔值触发。
SELinux布尔值是一个字符串(可赋予具体含义)来改变SELinux发挥作用。使用getsebool工具可以显示布尔值列表和当前值。
root #getsebool -a
abrt_anon_write--> off
abrt_handle_event--> off
allow_console_login--> on
allow_cvs_read_shadow--> off
...以上输出被过滤了大部分,因为系统中把整个SELinux策略加载以后,不同的布尔值轻松达到200。系统管理员使用布尔值对策略行为进行开关调整。

获得布尔值信息

并不是所有布尔值都命名都能让人轻易读懂。使用semanage boolean –l可以知道布尔值的相关描述。

root #semanage boolean -l | grepabrt_anon_write
abrt_anon_write (off , off) Allow ABRT to modify public files
used for public file transferservices.布尔值的状态也在输出里显示了出来,当然也可以使用getsebool工具或者读取SELinux文件系统中的伪文件(/sys/fs/selinux/booleans)来获取。 

布尔值修改了什么

当切换布尔值的时候,它改变了系统上的活动策略规则。之前使用sesearch工具搜索和显示存在的策略规则。它同时也可以显示SELinux布尔值的效果。

传递布尔值名字(--bool或-b)和—show_cond(或-C)选项,sesearch工具可以显示什么规则被影响了。例如,为了得到abrt_anon_write布尔值改变所触发的allow语句:

root #sesearch -b abrt_anon_write -AC
Found 3semantic av rules:
DT allow abrt_t public_content_rw_t : file { ioctl read write ...} ; [ abrt_anon_write ]
DT allow abrt_t public_content_rw_t : dir { ioctl read write ...} ; [ abrt_anon_write ]
DT allow abrt_t public_content_rw_t : lnk_file { ioctl read write ...} ; [ abrt_anon_write ]命令的输出显示,现在,布尔值是disabled(D规则最前面的字母),但是如果布尔值为true(T是开头第二个字母)规则本身将会变成活动状态。如果布尔值为enabled,会显示ET。如果布尔值为false,语句本身将变为活动状态,则第二个字母将为F
因为布尔值,建议最好加上-C参数来使用sesearch命令,这样如果某些问题是布尔值触发的,很容易被发觉和定位。很多情况下,切换布尔值对于系统继续工作是有效的。

比如,当你发现firefox浏览器不能读取用户文件,发现拒绝日志显示mozilla_t被拒绝读取user_home_t文件,使用sesearch命令帮助我们知道存在叫做mozilla_read_content的布尔值允许浏览器读取用户文件。

user $sesearch -s mozilla_t -t user_home_t-AC
Found 4semantic av rules:
allow application_domain_typeuser_home_t : file { getattr append } ;
DT allowmozilla_t user_home_t : file { ioctl read getattr lock open } ; [mozilla_read_content ]
DT allowmozilla_t user_home_t : dir { ioctl read getattr lock search open } ;[ mozilla_read_content ]
DT allowmozilla_t user_home_t : lnk_file { read getattr } ; [mozilla_read_content ]

改变布尔值状态

改变SELinux布尔值可以通过setsebool(增加需要设置的布尔值,on或者off)或者使用togglesebool(翻转当前布尔值)实现。

root #setsebool abrt_anon_write on
root #togglesebool abrt_anon_write
当你完成这些命令,改变的值将会立刻生效,但是只在当前加载策略的活动期间。也就是说,如果系统重启,之前修改的将失效。或者当你直接地重新加载SELinux策略,之前的设置也会失效。换句话说,就是切换booleans这个方法快捷,它是帮助调试问题用的。
一些布尔值只是在调试时候用的。比如,allow_ptrace布尔值,当设置它时,允许管理的域ptrace进程(比如使用strace命令),管理员做的有些事情就是来调试程序中的bug。

布尔值修改持久生效

使用-P选项可以使,SELinux布尔值的修改持久生效。

root #setsebool -P abrt_anon_write on这个命令要一会儿时间才能完成,因为SELinux策略本身需要重建、保存和布尔值也会被注册。一旦完成,布尔值将会一直为活动状态。
 

需要记住

1.        SELinux 支持布尔值动态更新运行时策略

2.        这些布尔值可被设置为重启后长久生效

3.        可以使用sesearch来显示布尔值的相关策略语句信息

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SELinux boolean