SELinux策略实例--type_transition(二)

11 篇文章 7 订阅
11 篇文章 0 订阅

上一篇博客http://blog.csdn.net/keheinash/article/details/70169705,讲了type_transition的一个实例,成功地让特定类型的进程执行指定可执行文件后,产生的新进程的domain成为策略文件中指定的类型。在上一篇博客的最后,把可执行文件替换为脚本文件后,再去执行脚本文件,策略就不起作用了,

bash脚本:
这里写图片描述

python脚本:
这里写图片描述

出现这个问题,说明策略失效了,那么思考一下我们所写的策略语句:
这里写图片描述
这些allow都是为了让我们的转换成功而开启的权限,应当理解为保证成功转换的条件,那么触发转换的条件是什么?应该是:当sysadm_t类型的进程执行了myapp_exec_t类型的可执行文件后,产生一个新进程,这个新进程运行myapp_exec_t类型文件的代码,新进程的类型是myapp_t。

提取一下上面关于触发条件的描述,简化为以下几个点:
1.sysadm_t类型的进程执行可执行文件;
2.可执行文件类型为myapp_exec_t;
3.产生了一个新的进程

那么当myapp_exec_t的文件为脚本的时候,是触发条件的哪一个环节出错导致策略失效?
第一点,当我们执行这个可执行文件的时候,sysadm_t类型的进程是哪一个?应该是我们当前所处的bash,看起来这个点没有问题。
第二点,可执行文件的类型为myapp_exec_t,用ls -Z查看,也可以确保没有问题。
第三点,产生了一个新进程,难道当可执行文件为脚本的时候,并不会产生新的进程,只是读取了脚本文件的代码,由sysadm_t类型的进程,也就是bash来执行?用ps命令验证:
这里写图片描述
可以看到,当前bash的PID为1915,和我们的myapp进程ID是不同的:
这里写图片描述
myapp的父进程ID正好就是1915,说明了bash确实有创建一个新的进程,看来第三点是没有问题的。

那么到底在执行文件,创建新的进程的过程中,发生了什么问题?根据同事的建议,使用了strace命令查看执行文件的过程:
这里写图片描述
信息很多,但是重点看第一行,execve(执行文件)的作用是在父进程中fork一个子进程后,在子进程中调用exec函数启动新的程序,因为fork子进程后,子进程的代码和父进程一样,当子进程有属于自己的代码时,需要将子进程的代码替换掉父进程的代码。execve函数的第一个参数是要执行的文件的路径,现在我们看到这个可执行文件并不是我们的myapp文件,而是python解释器!而python myapp命令分别作为两个参数传给python解释器。现在终于搞清楚了,原来是可执行文件类型为myapp_exec_t这个条件不满足。同样的,可以用strace查看myapp为bash脚本时的执行过程:
这里写图片描述
可执行文件是bash解释器,并不是myapp。

根据上面的结果,发现原来是和我们执行脚本的方式有关,那么要怎么样让可执行文件为我们的myapp文件呢?关于脚本的执行方式有好几种,除了用上面的解释器+脚本文件名运行,还可以直接指定脚本文件名运行脚本:
这里写图片描述
这次type_transition成功,用strace追踪过程:
这里写图片描述
第一个参数为myapp文件,就是拥有mapp_exec_t类型的可执行文件,所以第二个条件没有被破坏,因此转换得以成功!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值