精华内容
下载资源
问答
  • 强制关闭androidselinux
    万次阅读
    2017-09-06 10:55:06

    有时候需要添加本地服务,但是selinux的机制,导致添加本地服务要添加很多权限。如果我们只是要调试本地服务器的功能,而不想花很多的时间在selinux权限的添加调试上,我们可以关闭selinux。

          请注意,本方法是适用于可以编译android整个工程。

          修改init.rc,文件路径:/system/core/rootdir/init.rc

          打开init.rc文件,如下位置添加红色部分代码:

    on init

          #disnable security enhanced linux

          setenforce 0

         

          sysclktz 0

    更多相关内容
  • Android 5.0以后完全引入了 SEAndroid/SELinux 安全机制,这样即使拥有 root 权限或 chmod 777 ,仍然无法再JNI以上访问内核节点。 其实在 Android 4.4 就有限制的启用此安全机制了。后面内容都按照 5.0 以后介绍,...
  • SELinux的介绍以及几种关闭方式
  • Android临时和永久关闭selinux

    万次阅读 2019-08-02 21:42:35
    当我们想要临时关闭selinux时,如果可以获得root权限,通过adb如下指令可以临时关闭selinux: ...Androidselinux从init开始。在init.cpp中有: static void selinux_initialize(bool in_kernel_domain) { Ti...

    当我们想要临时关闭selinux时,如果可以获得root权限,通过adb如下指令可以临时关闭selinux:

    setenforce 0
    

    如果需要长期关闭,则需要用其他方法,先看slinue启动的位置:

    Android启selinux从init开始。在init.cpp中有:

    static void selinux_initialize(bool in_kernel_domain) {
        Timer t;
    
        selinux_callback cb;
        cb.func_log = selinux_klog_callback;
        selinux_set_callback(SELINUX_CB_LOG, cb);
        cb.func_audit = audit_callback;
        selinux_set_callback(SELINUX_CB_AUDIT, cb);
    
        if (in_kernel_domain) {
            INFO("Loading SELinux policy...\n");
            if (selinux_android_load_policy() < 0) {
                ERROR("failed to load policy: %s\n", strerror(errno));
                security_failure();
            }
    
            bool kernel_enforcing = (security_getenforce() == 1);
            bool is_enforcing = selinux_is_enforcing();
            if (kernel_enforcing != is_enforcing) {
                if (security_setenforce(is_enforcing)) {
                    ERROR("security_setenforce(%s) failed: %s\n",
                          is_enforcing ? "true" : "false", strerror(errno));
                    security_failure();
                }
            }
    
            if (write_file("/sys/fs/selinux/checkreqprot", "0") == -1) {
                security_failure();
            }
    
            NOTICE("(Initializing SELinux %s took %.2fs.)\n",
                   is_enforcing ? "enforcing" : "non-enforcing", t.duration());
        } else {
            selinux_init_all_handles();
        }
    }
    

    这里通过security_setenforce函数去设置是否启动selinux,启动的条件是kernel_enforcing和is_enforcing如果不一致,则设置selinux启动选项为is_enforcing。

    我们看security_getenforce实现,在/external/selinux/libselinux/src/getenforce.c目录下:

    int security_getenforce(void)
    {
        int fd, ret, enforce = 0;
        char path[PATH_MAX];
        
        snprintf(path, sizeof path, "%s/enforce", selinux_mnt);
        fd = open(path, O_RDONLY);
        
        memset(buf, 0, sizeof buf);
        ret = read(fd, buf, sizeof buf - 1);
        close(fd);
        
        if (sscanf(buf, "%d", &enforce) != 1)
            return -1;
        return enforce;
        
    }
    

    所以首先获取一个节点数值,Android改节点路径为/sys/fs/selinux/enforce,这个值表示是否开启selinux。

    另一个判定条件是selinux_is_enforcing()函数。其定义如下:

    enum selinux_enforcing_status { SELINUX_PERMISSIVE, SELINUX_ENFORCING };
    
    static selinux_enforcing_status selinux_status_from_cmdline() {
        selinux_enforcing_status status = SELINUX_ENFORCING;
    
        import_kernel_cmdline(false, [&](const std::string& key, const std::string& value, bool in_qemu) {
            if (key == "androidboot.selinux" && value == "permissive") {
                status = SELINUX_PERMISSIVE;
            }
        });
    
        return status;
    }
    

    此处从cmdline中获取androidboot.selinux的值,如果是permissive,则返回SELINUX_PERMISSIVE,即0,否则返回SELINUX_ENFORCING。

    如果enforce节点和cmdline设置不一致,则调用security_setenforce重新设置selinux的enforce节点值。

    因此想要关闭selinux,我们只需要在cmdline中设置一组参数:

    androidboot.selinux=permissive
    

    对于Android7.1, 设置位置可以是平台的BoardConfig.mk

    BOARD_KERNEL_CMDLINE := console=ttyHSL0,115200,n8 androidboot.console=ttyHSL0 androidboot.hardware=qcom msm_rtb.filter=0x237 ehci-hcd.park=3 androidboot.bootdevice=7824900.sdhci lpm_levels.sleep_disabled=1 earlyprintk androidboot.selinux=permissive
    

    内核启动时会有如下打印:

    <6>[    0.001053] Security Framework initialized
    <6>[    0.001091] SELinux:  Initializing.
    <7>[    0.001185] SELinux:  Starting in permissive mode
    
    <5>[    9.117477] audit: type=1400 audit(1489810287.106:3): avc:  denied  { net_raw } for  pid=368 comm="pm-service" capability=13  scontext=u:r:per_mgr:s0 tcontext=u:r:per_mgr:s0 tclass=capability permissive=1
    
    

    可以看到selinue运行在permissive模式,即不会限制domain/type存取,仅仅打印log,log中也显示permissive=1。

    展开全文
  • android11 关闭 Selinux 的方法

    千次阅读 2021-12-18 17:14:20
    adb shell getenforce 查看当前 Selinux 功能是 permissive(关闭)还是 enforce(打开)的 adb shell setenforce 0 开Selinux:设置成模式permissive adb shell setenforce 1 关Selinux:设置成模式enforce Android...

    adb shell getenforce    查看当前 Selinux 功能是 permissive(关闭)还是 enforce(打开)的    
    adb shell setenforce 0    开Selinux:设置成模式permissive    
    adb shell setenforce 1    关Selinux:设置成模式enforce    

    Android 11

    diff --git a/alps/system/core/init/selinux.cpp b/alps/system/core/init/selinux.cpp
    index ce8348e..1b87d60 100644
    --- a/alps/system/core/init/selinux.cpp
    +++ b/alps/system/core/init/selinux.cpp
    @@ -104,6 +104,8 @@ EnforcingStatus StatusFromCmdline() {
     }
     
     bool IsEnforcing() {
    +       return false;
    +       
         if (ALLOW_PERMISSIVE_SELINUX) {
             return StatusFromCmdline() == SELINUX_ENFORCING;
         }
    

    扩展,其他版本方法:

    Android 10

    bool IsEnforcing() {
        {
            int fd(open("/mboot/selinux", O_RDONLY | O_CLOEXEC | O_BINARY));
            if (fd != -1) {
                char v = 0xff;
                if (read(fd, &v, 1) < 0)
                    PLOG(ERROR) << "Failed to read /mboot/selinux";
                close(fd);
                LOG(WARNING) << "/mboot/selinux is " << v;
                return v == '1';
            }
        }
        + return false; //add to close selinux
        if (ALLOW_PERMISSIVE_SELINUX) {
            return StatusFromCmdline() == SELINUX_ENFORCING;
        }
        return true;
    }
    

    Android 9.0

    /system/core/init/selinux.cpp
    
    bool IsEnforcing() {
    + return false; //add to close selinux
      if (ALLOW_PERMISSIVE_SELINUX) {
        return StatusFromCmdline() == SELINUX_ENFORCING;
       }
      return true;
    }
    

    Android 8.1

    /system/core/init/init.cpp
    
    static bool selinux_is_enforcing(void)
    {
    +  return false; //add to close selinux
       if (ALLOW_PERMISSIVE_SELINUX) {
         return selinux_status_from_cmdline() == SELINUX_ENFORCING;
    }
    

    Andorid 4.4

    /system/core/init/init.c
    
    static bool selinux_is_enforcing(void)
    {
        char tmp[PROP_VALUE_MAX];
    ​
    +   return false;//add to close selinux
        if (property_get("ro.boot.selinux", tmp) == 0) {
            /* Property is not set.  Assume enforcing */
            return true;
        }
    ​
        if (strcmp(tmp, "permissive") == 0) {
            /* SELinux is in the kernel, but we've been told to go into permissive mode */
            return false;
        }
    ​
        if (strcmp(tmp, "enforcing") != 0) {
            ERROR("SELinux: Unknown value of ro.boot.selinux. Got: \"%s\". Assuming enforcing.\n", tmp);
        }
    ​
        return true;
    }
    

    展开全文
  • Android SElinux 权限

    2021-10-22 14:37:29
    有关添加Android SElinux 权限------proc 文件系统 sys文件系统一,SElinux是什么,如何分析此类问题二,添加selinux权限--基于高通平台演示1,基于proc下出现selinux权限问题2,基于sys下出现selinux权限问题三,...

    温馨提示
    此文章参考[Android L]SEAndroid开放设备文件结点权限(读或写)方法(涵盖常用操作:sys/xxx、proc/xxx、SystemProperties)热门干货。有不对的地方请各位指出。

    一,SElinux是什么,如何分析此类问题

    1. 定义:SELinux(Security-Enhanced Linux)是由美国国家安全局(NSA)开发的一种强制访问控制机制。它主要整合在 Linux 内核当中,是针对特定的进程与指定的文件资源进行权限控制的系统。主要是增强传统 Linux 操作系统的安全性,并解决传统 Linux 系统中自主访问控制(DAC)系统中的各种权限问题(如 root 权限过高等)。
    2. 分析此类问题:selinux三种状态 强制模式 宽容模式 关闭模式
      Enforcing:强制模式。代表SELinux在运行中,且已经开始限制domain/type之间的验证关系
      Permissive:宽容模式。代表SELinux在运行中,不过不会限制domain/type之间的验证关系,即使验证不正确,进程仍可以对文件进行操作。不过如果验证不正 确会发出警告。
      Disabled:关闭模式。SELinux并没有实际运行

    基本命令: setenforce 1/0 1 开启强制模式 setenforce 0 宽容模式 getenforce 获取当前selinux状态
    如出现应用层等访问设备节点时出现无法打开时,使用指令setenforce 0 时,能够正常使用。可能出现此问题。

    或者logcat 获取log时出现 : type=1400 audit(0.0:59): avc: denied { write } for name=“xxxx” dev=“proc” ino=4026532642 scontext=u:r:vendor_init:s0 tcontext=u:object_r:sysfs_proc:s0 tclass=file permissive=0 时,则为selinux权限问题。

    二,添加selinux权限–基于高通平台演示

    1,基于proc下出现selinux权限问题

    第一步 在device/qcom/sepolicy/vendor/common/file.te 定义selinux type: proc_xxxx,如下:
    type proc_xxxx, fs_type;

    第二步 device/qcom/sepolicy/vendor/common/genfs_contexts,绑定proc_xxxx到对应的实际节点
    genfscon proc /touchscreen/glove u:object_r:proc_xxxx:s0

    第三步 device/qcom/sepolicy/vendor/common/system_app.te,申请权限system_app的权限
    allow system_app proc_xxxx:file rw_file_perms;

    2,基于sys下出现selinux权限问题

    第一步 在device/qcom/sepolicy/vendor/common/file.te 定义selinux type: proc_xxxx,如下:
    type sys_xxxx, fs_type;

    第二步 device/qcom/sepolicy/vendor/common/file_contexts,绑定sys_到对应的实际节点。 sys/bus/i2c/devices/xxxx/xxx u:object_r:sys_xxxx:s0

    第三步 device/qcom/sepolicy/vendor/common/system_app.te,申请权限system_app的权限
    allow system_app sys_xxxx:file rw_file_perms;

    注:绑定时,需要给予实际路径,可以去find 查找一下具体实际路径。

    三,实际log分析

    LOG: type=1400 audit(0.0:59): avc: denied { write } for name=“xxxx” dev=“proc” ino=4026532642 scontext=u:r:vendor_init:s0 tcontext=u:object_r:sysfs_proc:s0 tclass=file permissive=0

    denied { write } :需要添加写权限。 name=“xxxx” 节点名称为xxxx dev=“proc” 属于proc文件系统

    scontext=u:r:vendor_init 需要添加vendor_init文件内权限(对此文件下去添加权限)

    tcontext=u:object_r:sysfs_proc:s0 file定义的名称为 sysfs_proc。 tclass=file 类型为file

    按照上述log,去vendor_init 文件添加 allow vendor_init:file write

    添加完成之后,权限权限已经添加。

    展开全文
  • 由于应用层访问设备节点的时候,因为selinux权限问题而访问不了,所以就先关闭selinux 代码路径: system/core/init/selinux.cpp 1、在/selinux.cpp文件中SelinuxInitialize()方法初始化selinux权限问题 void ...
  • Android4.4到Android7.0,SELinux策略的构建流程是将所有的策略(平台和非平台)合并在一起,最后将合并生成的文件统一放在root目录下(即boot.img)。但这种方式有悖于Android 8.0的预定设计目标;Android8.0设计的...
  • Android SELinux 权限问题处理

    千次阅读 2021-11-30 16:39:33
    SELinux 是 Google 从android 5.0 开始,强制引入的一种非常严格的管理机制,主要用于增强系统的安全性。SELinux有以下两种模式: enforcing mode: 限制访问 permissive mode: 只审查权限,不限制 1 确定 ...
  • 目标类型”如:在file_contexts中添加:/dev/tfa9890u:object_r:audio_device:s03.4 举例添加权限:在mediaserver.te中添加allow mediaserver device:chr_file { read write open};编译报错:libsepol.check_...
  • Android 各版本关闭 Selinux 的方法

    万次阅读 2020-05-09 16:32:07
    查看当前 Selinux 功能是 permissive(关闭)还是 enforce(打开)的 adb shell setenforce 0 开Selinux:设置成模式permissive adb shell setenforce 1 关Selinux:设置成模式enforce 说明:setenforce 修改的...
  • Android selinux策略配置

    2021-06-28 15:18:38
    android的keystore服务中获取调用者的包名。 代码实现: #include <binder/IPCThreadState.h> //...... pid_t pid = android::IPCThreadState::self()->getCallingPid(); ALOGI("calling pid: %d", ...
  • 1.从android5.x开始,引入严格的selinux权限管理机制,经常会遇到各种avc denied的Log。 # adb shell cat /proc/kmsg | grep avc # adb shell dmesg | grep avc # adb logcat | grep avc 解决原则是:缺什么补...
  • 在开发中,我们经常会遇到由于SELinux造成的各种权限不足,即使拥有“万能的root权限”,也不能获取全部的权限,所以怎么样关闭selinux权限呢 system/core/init/selinux.cpp bool IsEnforcing() { { int fd...
  • 关于 SELinux 的完整注意事项不在本文档的讨论范围之内,现在您必须要了解的是在启动新的 Android 设备时如何编写政策规则。目前有大量关于 SELinux 的信息可供您参考。关于建议的资源,请参阅支持...
  • google官方推出的关于android 8.0selinux权限开发,因相对android n变化较大,值得一读
  • Android SeLinux 权限添加

    2020-09-30 17:04:13
    调试时,可以关闭selinux 权限 setenforce 0 搜索avc,如下: type=1400 audit(0.0:292): avc: denied { read write } for name=“ttyHSL2” dev=“tmpfs” ino=11380 scontext=u:r:system_app:s0 tcontext=u:object...
  • Android selinux权限修改

    千次阅读 2019-12-30 19:14:50
    原文地址:https://skytoby.github.io/2019/selinux%E4%BF%AE%E6%94%B9/ ...Enforcing(已打开) Permissive(已关闭) getenforce //获取当前seLinux状态 setenforce 1 //打开seLinux setenforce 0 //...
  • 简述AndroidSELinux的TE

    2020-08-27 18:54:04
    SELinux使用类型强制来改进强制访问控制。这篇文章给大家介绍了AndroidSELinux的TE的相关知识,感兴趣的朋友一起看看吧
  • SELinux for Android 8.0

    2020-12-10 13:34:51
    This document describes SELinux changes and customizations designed to support modularity and updatability of SELinux policy in Android 8.0. ​The goal of these changes is to enable System on Chip ...
  • Android Selinux 单编后,快速验证

    千次阅读 2021-12-21 09:26:59
    sepolicy修改后 快速验证 编译: makeselinux_policy-j8 // vendor 和system 都修改了 makeselinux_policy_nonsystem -j8 // 只修改 vendor相关的sepolicy .../vendor/etc/selinux/vendor_sepolicy.cil ...
  • Android7关闭selinux(设置为Permissive模式)设置selinux为宽容模式(Permissive)需要修改两个文件:Android/system/core/init/Android.mkAndroid/system/core/init/init.cpp网上有些文章说修改cmdline,如果修改...
  • Android SELinux 添加权限后不生效

    千次阅读 2022-01-26 17:41:28
    Android SELinux 添加权限后不生效 Android 12上需要对一个节点进行写操作,但是添加了Selinux以后还是报错 allow platform_app yft_temperature_file:file { write read getattr open }; 加了权限还是一直报avc ...
  • SELinux for Android SELinux for Android在架构和机制上与SELinux完全一样,考虑到移动设备的特点,所以移植到Android上的只是SELinux的一个子集。SELinux for Android的安全检查几乎覆盖了所有重要的系统资源,...
  •    Android SELinux开发入门指南之SELinux基础知识 前言    SEAndroid是在Android系统中基于SELinux推出的强制访问控制模型,来完善自主访问模型中只要取得root权限就可以为所欲为的情况。 SELinux是一种...
  • Android SELinux安全策略主要使用对象安全上下文的基础进行描述,通过主体和客体的安全上下文去定义主体是否有权限访问客体,称为TypeEnforcement 安全上下文(Security Context) SEAndroid中的安全上下文:共有4个...
  • Android Selinux 权限配置

    2021-12-31 11:49:30
    1.SElinux三种权限: enforcing:强制模式、代表...disabled:关闭模式、SELinux 关闭状态 2.基础权限的配置 比如内核报这样的错: [ 172.554381] type=1400 audit(22611.739:4): avc: denied { getattr } for ...
  • 该资源是Google官方编写的关于Android 8中SeLinux的文档,然后还附加了SELinux 4.0的pdf
  • Android有关selinux详解

    千次阅读 2019-11-26 10:46:08
    SELinux 即Security-Enhanced Linux,由美国国家安全局(NSA)发起,Secure Computing Corporation (SCC) 和 MITRE直接参与开发,以及很多研究机构(如犹他大学)一起参与的强制性安全审查机制,该系统最初是作为一款...
  • 本文将带你了解Android应用开发Android SElinux相关,希望本文对大家学Android有所帮助。"SEAndroid app分类SELinux(或SEAndroid)将app划分为主要三种类型(根据user不同,也有其他的domain类型):untrusted_app 第三...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,295
精华内容 3,318
关键字:

android selinux怎么关闭