android security te总结

关于android security te文件书写总结

te文件的基本书写规范,就不赘叙了,这里说的是另一种情况下的关于te配置的情况
案例如下:在tp驱动中 实现文件读写操作具体操作/data 分区
在书写驱动后发现在anroid启动前 对该分区的操作应该是无效的,因为此时kernel 还没执行到init.c 即system 分区 等其他分区尚未建立
所以该读写操作只能在android 系统跑完开机动画后,可以响应 tp 触摸事件后。
通常会报如下错误:

[ 37.573986] <0>.(0)[214:logd.auditd]type=1400 audit(1262304237.850:29): avc: denied { write } for pid=167 comm=“mtk-tpd” name="/" dev=“dm-0” ino=2 scontext=u:r:kernel:s0 tcontext=u:object_r:system_data_file:s0 tclass=dir permissive=1
检查的知 当前kernel.te文件并未有权限操作/data 目录,所以加上
allow kernel system_data_file:dir { open write read create add_name remove_name setattr };
allow kernel system_data_file:file { open write read create };

编译后发现报错:allow kernel system_data_file:file { open write read create }; 此项一直不过 不允许有write create
out 目录下的obj/ETC/sepolicy_intermediates/policy.conf文件显示
neverallow {
domain
-system_server
-system_app
-init
-installd # for relabelfrom and unlink, check for this in explicit neverallow
} system_data_file:file { append create link unlink relabelfrom rename setattr write };

do not grant anything greater than r_file_perms and relabelfrom unlink

to installd

neverallow installd system_data_file:file ~{ { getattr open read ioctl lock } relabelfrom unlink };
但很明显如果不加上write create ,运行后还是会有权限问题。所以此处必须还有其他技巧未能掌握,查看其他使用了system_data_file:file 相关权限的te书写发现
file_type_auto_trans(surfaceflinger, system_data_file, sf_bqdump_data_file);
所以加上 file_type_auto_trans(surfaceflinger, system_data_file, sf_bqdump_data_file);
再次编译 发现成功。
其实是想找出
neverallow {
domain
-system_server
-system_app
-init
-installd # for relabelfrom and unlink, check for this in explicit neverallow
} system_data_file:file { append create link unlink relabelfrom rename setattr write };

do not grant anything greater than r_file_perms and relabelfrom unlink

to installd

neverallow installd system_data_file:file ~{ { getattr open read ioctl lock } relabelfrom unlink };

是在哪里编译生成的 ,结果未能找到,希望下次能再深入了解linux sepolicy 。
最后附上代码 以供参考

device/mediatek/common/sepolicy/kernel.te
file_type_auto_trans(kernel, system_data_file, nvdata_file);
allow kernel system_data_file:dir { open write read create add_name remove_name setattr };
allow kernel system_data_file:file { open read };

文件路径改为 /data/misc/

void demo_write_file(void)
{
    struct file *flp = NULL;
    u8 *refp = NULL;
    s32 ret = 0;
    refp = kzalloc(PAGE_SIZE, GFP_KERNEL);
    GTP_INFO("demo_write_file begin");
    if (refp == NULL) {
       GTP_INFO("[demo_write_file] Alloc memory for ref failed.use default ref");
       return;
    }
    flp = filp_open("/data/misc/iqs.txt", O_RDWR | O_CREAT, 0666);
    if (!IS_ERR(flp)){
       GTP_INFO("demo_write_file file success!");
       flp->f_op->llseek(flp, 0, SEEK_SET);
       //iqs_hex_array[238*64 + 32 + 2]
       memset(refp,0,64);
       ret = flp->f_op->read(flp, (char *)refp, 63, &flp->f_pos);
       //refp[63] = 0;
       GTP_INFO("demo_write_file read ret %d ",ret);
       if (ret > 0){
         GTP_INFO("demo_write_file read ret %s ",refp);
       }else {
         snprintf(refp, 64, "iqs Maj verison is:%d Min verison is:%d\r\n",iqs_hex_array[238*64 + 32 + 2],iqs_hex_array[238*64 + 32 + 3]);
         //file_len = sizeof(refp);
         GTP_INFO("demo_write_file refp sizeof is:%d strlen is:%d ",(u32)(sizeof(refp)),(u32)(strlen(refp)));
         flp->f_op->write(flp, (char *)refp, (u32)(strlen(refp)), &flp->f_pos);
         //flp->f_op->write(flp, (char *)refp, ref_len, &flp->f_pos);
       }
      filp_close(flp, NULL);
      kfree(refp);
    }
    GTP_INFO("demo_write_file end");
    return;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值