讲Selinux的原理的文章太多了,讲实际使用也是有一些,但是都不够完整,这里举一个在Android7.1下的服务的例子。

服务第一步,我们会在init.rc下增加服务。
因为我的设备是freesale sabresd 所以路径是:
device/fsl/sabresd_6dq/init.rc

service crondd /system/bin/crondd
    class late_start
    user root

接着我把重新编译过boot.img镜像烧录进设备,我使用命令
start crondd 毫无疑问系统提示
init: Service crondd does not have a SELinux domain defined.

接着我们需要给我们的crondd 增加一下domain:

这里我的增加的目录为:
device/fsl/imx6/sepolicy/crondd.te
或者这里也行:
system/sepolicy/
通用的目录是,另外包含的路径可以参考一下system/sepolicy/Android.mk

具体什么意思就不解释了。

type crondd, domain, domain_deprecated;
type crondd_exec, exec_type, file_type;
type crondd_device, dev_type;
type crondd_data_file, file_type, data_file_type;
init_daemon_domain(crondd)
allow crondd crondd_data_file:dir rw_dir_perms;
allow crondd crondd_data_file:file create_file_perms;

然后重新编译boot.img 我们再将服务启动起来,这时候我们能看到一些selinux打印出来的信息。

现在我们关闭掉selinux:
setenforce 0

然后把所有的selinux收集起来:
dmesg | grep avc > /data/avc_log.txt

这些信息我们可以用工具翻译出来,如果一句句自己翻译估计要崩溃了。
ubuntu下:
sudo apt install policycoreutils

然后:
audit2allow -i avc_log.txt

#============= crondd ==============
allow crondd busybox_exec:file { read getattr open execute execute_no_trans };
allow crondd dex2oat:dir { getattr search };
allow crondd dex2oat:file { read open };
allow crondd platform_app:dir { getattr search };
allow crondd platform_app:file read;
allow crondd priv_app:dir { getattr search };
allow crondd priv_app:file read;
allow crondd untrusted_app:dir { getattr search };
allow crondd untrusted_app:file read;

很简单,把这些全部拷贝进去就可以了。
这个工作很有可能重复很多次,因为有些命令是因为selinux 或者权限的问题执行失败,要一步一步的加。

其中有一种情况,用selinux的工具似乎是没法生成,这个只好自己了解一下生成的规则自己凑一下了。
allow surfaceflinger system_prop:property_service set;

还有一种:
type=1400 audit(1420226774.850:4466): avc: denied { read } for pid=3978 comm=”busybox”
scontext=u:r:logdumpd:s0 tcontext=u:r:platform_app:s0:c512,c768 tclass=file permissive=0

需要把.te的第一行修改成:mlstrustedsubject。
type logdumpd , domain,mlstrustedsubject

关于规则和一些说明可以参考如下网址:
http://blog.csdn.net/Innost/article/details/19299937
http://blog.csdn.net/xbalien29/article/details/19505575

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐