首页 > 系统相关 >does not have a SELinux domain defined. android 开机启动

does not have a SELinux domain defined. android 开机启动

时间:2023-12-07 17:13:22浏览次数:41  
标签:domain defined SELinux app file 类型 Android 权限

问题:

dmesg

 

[   46.089306] init: Service mysvc2 does not have a SELinux domain defined.

 

service mysvc1 /system/vendor/bin/app1
class main
user root
group root system readproc
disabled
writepid /dev/cpuset/foreground/tasks


service mysvc2 /system/bin/app2
class main
user root
group root system readproc
disabled
writepid /dev/cpuset/foreground/tasks

on property:sys.boot_completed=1
start mysvc1
start mysvc2

 

 

SELinux 概念  |  Android 开源项目  |  Android Open Source Project https://source.android.google.cn/docs/security/selinux/concepts?hl=zh_cn

SELinux 概念

 

请查看此页中的内容,熟悉 SELinux 概念。

强制访问控制

安全增强型 Linux (SELinux) 是适用于 Linux 操作系统的强制访问控制 (MAC) 系统。作为 MAC 系统,它与 Linux 中用户非常熟悉的自主访问控制 (DAC) 系统不同。在 DAC 系统中,存在所有权的概念,即特定资源的所有者可以控制与该资源关联的访问权限。这种系统通常比较粗放,并且容易出现无意中提权的问题。MAC 系统则会在每次收到访问请求时都先咨询核心机构,再做出决定。

SELinux 已作为 Linux 安全模块 (LSM) 框架的一部分实现,该框架可识别各种内核对象以及对这些对象执行的敏感操作。其中每项操作要执行时,系统都会调用 LSM 钩子函数,以便根据不透明安全对象中存储的关于相应操作的信息来确定是否应允许执行相应操作。SELinux 针对这些钩子以及这些安全对象的管理提供了相应的实现,该实现可结合自己的政策来决定是否允许相应访问。

通过结合使用其他 Android 安全措施,Android 的访问权限控制政策能够大大降低遭到入侵的计算机和帐号可能蒙受的损失。Android 的自主访问控制和强制访问控制等工具可为您提供一种结构,确保您的软件仅以最低权限级别运行。这样可降低攻击造成的影响,并降低错误进程重写数据甚至是传输数据的可能性。

在 Android 4.3 及更高版本中,SELinux 开始为传统的自主访问控制 (DAC) 环境提供强制访问控制 (MAC) 保护功能。例如,软件通常情况下必须以 root 用户帐号的身份运行,才能向原始块设备写入数据。在基于 DAC 的传统 Linux 环境中,如果 root 用户遭到入侵,攻击者便可以利用该用户身份向每个原始块设备写入数据。不过,可以使用 SELinux 为这些设备添加标签,以便被分配了 root 权限的进程可以只向相关政策中指定的设备写入数据。这样一来,该进程便无法重写特定原始块设备之外的数据和系统设置。

如需更多安全威胁示例以及使用 SELinux 解决安全威胁的方法,请参阅用例

强制执行级别

SELinux 可以在各种模式下实现:

  • 宽容模式 - 仅记录但不强制执行 SELinux 安全政策。
  • 强制模式 - 强制执行并记录安全政策。如果失败,则显示为 EPERM 错误。

在选择强制执行级别时只能二择其一,您的选择将决定您的政策是采取操作,还是仅允许您收集潜在的失败事件。宽容模式在实现过程中尤其有用。

类型、属性和规则

Android 依靠 SELinux 的类型强制执行 (TE) 组件来实施其政策。这表示所有对象(例如文件、进程或套接字)都具有相关联的类型。例如,默认情况下,应用的类型为 untrusted_app。对于进程而言,其类型也称为域。可以使用一个或多个属性为类型添加注解。属性可用于同时指代多种类型。

对象会映射到(例如文件、目录、符号链接、套接字),并且每个类的不同访问权限类型由权限表示。 例如,file 类存在权限 open。虽然类型和属性作为 Android SELinux 政策的一部分会进行定期更新,但权限和类是静态定义的,并且作为新 Linux 版本的一部分也很少进行更新。

政策规则采用以下格式:allow source target:class permissions;,其中:

  • source - 规则主题的类型(或属性)。谁正在请求访问权限?
  • 目标 - 对象的类型(或属性)。对哪些内容提出了访问权限请求?
  • 类 - 要访问的对象(例如,文件、套接字)的类型。
  • 权限 - 要执行的操作(或一组操作,例如读取、写入)。

规则的一个示例如下:

 
allow untrusted_app app_data_file:file { read write };

这表示应用可以读取和写入带有 app_data_file 标签的文件。还有其他应用类型。例如,isolated_app 用于清单中含有 isolatedProcess=true 的应用服务。Android 对涵盖应用的所有类型使用名为 appdomain 的属性,而不是对这两种类型重复同一规则:

 
# Associate the attribute appdomain with the type untrusted_app.
typeattribute untrusted_app, appdomain;

# Associate the attribute appdomain with the type isolated_app.
typeattribute isolated_app, appdomain;

allow appdomain app_data_file:file { read write };

当编写的规则指定了某个属性名称时,该名称会自动扩展为列出与该属性关联的所有域或类型。一些重要属性包括:

  • domain - 与所有进程类型相关联的属性
  • file_type - 与所有文件类型相关联的属性。

特别是对于文件访问权限,有很多种权限需要考虑。例如,read 权限不足以打开相应文件或对其调用 stat。为了简化规则定义,Android 提供了一组宏来处理最常见的情况。例如,若要添加 open 等缺少的权限,可以将上述规则改写为:

 
allow appdomain app_data_file:file rw_file_perms;

如需查看实用宏的更多示例,请参阅 global_macros 和 te_macros 文件。请尽可能使用宏,以降低因相关权限被拒而导致失败的可能性。

定义类型后,需要将其与所代表的文件或进程相关联。如需详细了解如何实现这种关联,请参阅实现 SELinux。如需详细了解规则,请参阅 SELinux Notebook

安全上下文和类别

调试 SELinux 政策或为文件添加标签时(通过 file_contexts 或运行 ls -Z),您可能会遇到安全上下文(也称为标签)。例如 u:r:untrusted_app:s0:c15,c256,c513,c768。安全上下文的格式为:user:role:type:sensitivity[:categories]。您通常可以忽略上下文的 userrole 和 sensitivity 字段(请参阅明确性)。上一部分介绍了 type 字段。categories 是 SELinux 中多级安全 (MLS) 支持的一部分。从 Android S 开始,类别被用于:

  • 分隔应用数据,使其不被其他应用访问。
  • 分隔不同实际用户的应用数据。

 

明确性

Android 并不会使用 SELinux 提供的所有功能。阅读外部文档时,请记住以下几点:

  • AOSP 中的大部分政策都是使用内核政策语言定义的。在使用通用中间语言 (CIL) 时,会存在一些例外情况。
  • 不使用 SELinux 用户。唯一定义的用户是 u。必要时,系统会使用安全上下文的类别字段表示实际用户。
  • 不使用 SELinux 角色和基于角色的访问权限控制 (RBAC)。定义并使用了两个默认角色:r(适用于主题)和 object_r(适用于对象)。
  • 不使用 SELinux 敏感度。已始终设置好默认的 s0 敏感度。
  • 不使用 SELinux 布尔值。一旦设备政策构建完成,该政策不再取决于设备状态。这简化了政策的审核和调试过程。

 

 

 

 

 

翻译

搜索

复制

标签:domain,defined,SELinux,app,file,类型,Android,权限
From: https://www.cnblogs.com/papering/p/17883410.html

相关文章

  • win上vscode出现undefined reference to `__imp_WSACleanup'
    示例代码#include<iostream>//推荐加上宏定义#defineWIN32_LEAN_AND_MEAN#include<winsock2.h>#include<Windows.h>usingnamespacestd;intmain(){WORDver=MAKEWORD(2,2);WSADATAdat;WSAStartup(ver,&dat);WSACleanup();retur......
  • echarts:ReferenceError: echarts is not defined
    echarts资源引用正常,但却出现定义报错。原因:引入echarts.js位置不正确,导致未引入js时,却使用了echarts。解决:先引入echarts.js再使用建议将引入放在body后,否则可能会出现>TypeError:Cannotreadpropertiesofnull(reading'getAttribute')......
  • 依赖 is already defined in a single-type import
    代码:importorg.apache.commons.lang3.StringUtils;不加依赖显示:Cannotresolvesymbol'lang3',加了依赖又显示:'com.sun.deploy.util.StringUtils'isalreadydefinedinasingle-typeimport这表明在代码或项目的其他地方已经导入了com.sun.deploy.util.StringUtils,并......
  • 本地套接字domain的使用
    socketAPI原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIXDomainSocket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIXDomainSocket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和......
  • TypeError: Cannot read properties of undefined (reading '$modal')
    原代码:handleFinish(row){this.$modal.confirm('确认录取学生编号为"'+row.stuCode+'"的成绩?').then(function(){finishStudentScore({id:row.id}).then((response)=>{if(response.code==......
  • 使用emqttd时执行emqttd console时无反应或者报错Node undefined not responding to p
    1.无反应:  2.报错:Nodeundefinednotrespondingtopings. 解决办法:路径不能有空格,最好用存英文的路径。......
  • Rancher五--在SELinux模式下安装Rancher-RHEL/CentOS
    在SELinux模式下安装Rancher-RHEL/CentOS从1.6+版本后支持为了使Rancher在RHEL/CentOS的SELinux模式下正常工作,您需要在安装有RPM包container-selinux-2.14(或更高的版本)的主机上运行RancherServer容器。同时,全部的agent主机也要安装这个包。如果您安装了较低版本的container-sel......
  • 报错:undefined reference to `WinMain'
    报错:undefinedreferenceto`WinMain'错音是编译器找不到main()函数:可能缺少是main()函数,比如main拼写错误可能是main()函数不再全局命名空间中,注意main()函数必须置于默认命名空间(即全局命名空间)下......
  • 解决ls: relocation error: /lib64/libacl.so.1: symbol getxattr, version ATTR_1.0
    解决ls:relocationerror:/lib64/libacl.so.1:symbolgetxattr,versionATTR_1.0notdefinedinfilelibattr.so.1withlinktimereference参考:https://www.cnblogs.com/biohujun/p/17613372.html 这个问题是在我conda装了一个包之后就出现了,ls等最基础的命令没有办......
  • <Index onVnodeUnmounted=fn<onVnodeUnmounted> ref=Ref< undefined > key=xxxx
    改了一下之前的程序,点开以后就出现了warn,初始加载页面是显示的然后切换到别的页面,就不显示了。 网上查了一下,有说是引用组件要驼峰,后来查了一下,不是这个原因。 想了一下是引入了一个对话框,然后就出现这种问题。究其原因:<template></template>下只能有一个root如果有多个......