deviceinfod: type=1400 audit(0.0:864): avc: denied { execute_no_trans } for path="/vendor/bin/sh" dev="dm-1" ino=433 scontext=u:r:deviceinfod:s0 tcontext=u:object_r:vendor_shell_exec:s0 tclass=file permissive=0 如何写selinux规则
时间: 2024-02-03 08:12:21 浏览: 175
首先,您需要找出AVC拒绝消息中的关键信息。在这种情况下,关键信息是:
- 操作:execute_no_trans
- 路径:/vendor/bin/sh
- 上下文:scontext=u:r:deviceinfod:s0 tcontext=u:object_r:vendor_shell_exec:s0 tclass=file
接下来,您可以通过以下步骤编写SELinux规则:
1. 在您的设备上安装SELinux Policy Developer工具包。
2. 使用以下命令生成一个新的基本策略模块(.te文件):
```
$ audit2allow -M mypolicy -l -i /path/to/avc/denied/message
```
这将在当前目录下生成一个名为“mypolicy”的新模块。
3. 使用以下命令将策略模块添加到您的SELinux策略中:
```
$ semodule -i mypolicy.pp
```
这将编译并安装“mypolicy”模块。
4. 如果您想验证是否已成功添加了新策略,请使用以下命令查看策略模块列表:
```
$ semodule -l
```
5. 现在,您应该能够执行/bin/sh了。但是,如果您想限制只有deviceinfod进程才能执行该文件,请使用以下命令在策略模块中添加一个新的规则:
```
$ sudo nano mypolicy.te
```
在打开的文件中添加以下规则:
```
allow deviceinfod vendor_shell_exec:file execute_no_trans;
```
6. 保存并关闭文件,然后重新生成策略模块:
```
$ make -f /usr/share/selinux/devel/Makefile mypolicy.pp
```
7. 最后,使用semodule安装新的策略模块:
```
$ semodule -i mypolicy.pp
```
这样,您就可以为deviceinfod进程设置SELinux规则,以允许它执行/vendor/bin/sh。
阅读全文