linux允许程序创建目录失败,SELinux:允许进程在某个目录中创建任何文件

本文介绍了解决SELinux阻止脚本写入文件的问题的方法。通过详细步骤演示如何通过ausearch和audit2allow命令来调试AVC拒绝,并创建自定义SELinux策略模块以允许脚本创建并写入文件。
摘要由CSDN通过智能技术生成

我有一个脚本,当被调用时,将导致dmesg的内容被写入文件,文件的名称基本上是一个时间戳. SELinux阻止了这一点.根据Fedora的SELinux故障排除应用程序的建议,我试过:

grep dmesg /var/log/audit/audit.log | audit2allow -M mypol

semodule -i mypol.pp

但是,这似乎不起作用,可能是因为它创建的文件的名称每次都不同.那么如何告诉SELinux允许dmesg创建(并写入)某个目录中的任何文件?或者告诉它有问题的脚本(以及它产生的所有进程)可以做到这一点?

解决方法:

您需要了解如何过滤AVC拒绝以及如何编写自定义策略模块以允许访问特定操作(在本例中为脚本).

我首先删除你上面插入的模块,开始一个新的:

# semodule -r mymodule.pp

然后,运行您的脚本:

# date && ./my_script.sh

日期调用对于根据时间戳过滤AVC拒绝很有用.

接下来,使用常用方法调试AVC拒绝,这使用了ausearch(8)命令:

# ausearch -m avc -ts $timestamp | audit2allow

有关可以使用的开关的详细信息,请查看联机帮助页,特别是-ts标志.

有了这些信息,您就可以根据现有政策了解被拒绝的内容.

现在,您应该确定是否授予此访问权限.我们假设您要授予访问权限.您需要创建一个自定义策略模块,用于描述定义您要授予的访问权限的规则.根据脚本的复杂程度,这或多或少都很简单:

# ausearch -m avc -ts 10:40:00 | audit2allow -m my_script > my_script.te

这将产生类型强制描述.

您应该继续检查代码以确保其正确性并将类型强制代码编译到模块中:

# checkmodule -M -m -o my_script.mod my_script.te

必须将该模块打包到策略包中,以便您能够加载它并随意卸载它:

# semodule_package -o my_script.pp -m my_script.mod

现在,您可以使用以下命令加载策略:

# semodule -i my_script.pp

检查它是否正确加载:

# semodule -l | grep my_script

然后,尝试再次触发拒绝,并查看审核日志中是否有更多(不同)警报有关此同一过程.

进一步版本的类型强制执行代码将需要更新版本(1.0),否则加载包将失败.编译和打包后,更新策略包完成后发出:

# semodule -u my_script.pp

从SELinux开始,有很多东西需要学习.一些有用的参考:

>命令的联机帮助页.

>还检查apropos selinux的输出.

来自RHEL文档

Dave Quigley的一个很好的介绍性演讲:

标签:selinux,linux,security,fedora

来源: https://codeday.me/bug/20190813/1649036.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值