繁体   English   中英

Android 6中的SELinux问题

[英]SELinux issue in Android 6

我在允许Android 6中不受信任的应用访问/ dev / HSL1串行接口时遇到问题。 这是我得到的错误:

[  757.742286] type=1400 audit(156811.349:149): avc: denied { write } for pid=6422 comm="port_api.sample" name="ttyHSL1" dev="tmpfs" ino=7287 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:tty_device:s0 tclass=chr_file permissive=0

有问题的文件是/ dev / ttyHSL1:

1|root@msm8909:/dev # ls -alZ ttyHSL1
crwxrwxrwx root     root              u:object_r:tty_device:s0 ttyHSL1

external / sepolicy / untrusted_app.te在文件的末尾具有以下内容:

allow untrusted_app tty_device:chr_file rw_file_perms;
allow untrusted_app device:dir r_dir_perms;
allow untrusted_app tty_device:chr_file write;

我假设rw_file_perms宏使rw可以访问ttyHSL1文件,但是从dmesg输出(上图)中则不能。 另外,应用程序也会失败,并显示“您在串行端口上没有读/写权限”。

另外,来自global_macros的一段代码:

#####################################
# Common groupings of permissions.
#
define(`x_file_perms', `{ getattr execute execute_no_trans }')
define(`r_file_perms', `{ getattr open read ioctl lock }')
define(`w_file_perms', `{ open append write }')
define(`rx_file_perms', `{ r_file_perms x_file_perms }')
define(`ra_file_perms', `{ r_file_perms append }')
define(`rw_file_perms', `{ r_file_perms w_file_perms }')
define(`rwx_file_perms', `{ rw_file_perms x_file_perms }')
define(`create_file_perms', `{ create rename setattr unlink rw_file_perms }')

我在这里错过了很明显的东西吗?

我有一个类似的问题,并且相信我可以解决您的问题。 即使您的问题在此时已经过时了,也可以将其发布在此处,以便其他有相同问题的人也可以得到帮助。

问题是,不受信任的应用程序也有一个MSL标签,显示您的avc错误:

scontext=u:r:untrusted_app:s0:c512,c768

请注意,在“标准” se-linux工作人员之后,您拥有:c512,c768 ,这似乎是MLS的“标签”。 您的untrusted_app.te / tty_device无法处理此问题-与SELinux一样,默认情况下,即使其余规则都可以,该应用也不允许访问对象。 此时,您有三个选择:

  1. 编写规则,允许带有MLS标签的主题进入您的设备
  2. 编写针对您的应用并剥离MLS标签的规则
  3. 编写规则,该规则保留MLS标签,但允许访问设备。 (可能是最安全的)

我去的第一(1)的方式,并添加下设备/ 制造商 / 设备 / sepolicy两个文件:

file_contexts

/ dev / ttyHSL1 u:object_r:arendi_device:s0

serialports.te

类型arendi_device,dev_type,mlstrustedobject;

允许untrusted_app_all arendi_device:chr_file rw_file_perms;

注意mlstrustedobject标签-这告诉SEAndroid,它应该忽略想要访问此标签的主题的MLS标签。 您还可以通过规则将mlstrusted主题添加到您的应用中。

我的BoardConfig.mk告诉Android通过添加以下行来查找这些新文件:

BOARD_SEPOLICY_DIRS + =设备/制造商/设备/政策

现在,这使我可以在Android Oreo 8.1下访问我的串行端口。

这个答案向指出了这一解决方案: android系统似乎忽略了我的自定义selinux策略

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM