导航:首页 > 编程系统 > linux权限绕过

linux权限绕过

发布时间:2023-03-01 16:40:19

linux下的TMP目录需要改成什么权限才能重命名里面的文件

然后再试着删除。

2.进入“安全模式删除”。

3.在纯DOS命令行下使用DEL,DELTREE和RD命令将其删除。

4.如果是文件夹中有比较多的子目录或文件而导致无法删除,可先删除该文件夹中的子目录和文件,再删除文件夹。

5.在任务管理器中结束Explorer.exe进程,然后在命令提示符窗口删除文件。

6.如果你有安装ACDSee,FlashFXP,Nero,Total这几个软件,可以尝试在这几个软件中删除文件夹。

二、高级解决方案:

1.磁盘错误
运行磁盘扫描,并扫描文件所在分区,扫描前确定已选上修复文件和坏扇区,全面扫描所有选项,扫描后再删除文件。

2.预读机制:
某些媒体播放中断或正在预览时会造成无法删除。在“运行”框中输入:REGSVR32 /U SHMEDIA.DLL,注销掉预读功能。或删除注册表中下面这个键值:[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\\InProcServer32]。

3.防火墙:
由于反病毒软件在查毒时会占用正在检查的文件,从而导致执行删除时提示文件正在使用,这时可试着暂时关闭它的即时监控程序,或许可以解决。

4.OFFice、WPS系列软件:
OFFice的非法关闭也会造成文件无法删除或改名。重新运行该程序,然后正常关闭,再删除文件。

5.借助WinRAR:
右击要删除的文件夹,选择“添加到压缩文件”。在弹出的对话框中选中“压缩后删除源文件,”随便写个压缩包名,点确定。

6.权限问题:
如果是2000和xp系统,请先确定是否有权限删除这个文件或文件夹。

7.可执行文件的删除:
如果可执行文件的映像或程序所调用的DLL动态链接库文件还在内存中未释放,删除时就会提示文件正在使用,解决方法是删除系统的页面文件,Win98中是Win386.SWP,Win2000/XP是pagefile.sys。注意要在DOS下删除。

8.文件粉碎法:
使用文件粉碎机,如File Pulverizer,可以彻底删除一些顽固文件。

三、制作一个无法删除的“文件保险箱”

文件夹无法删除,未必就是不好的事情,如果把一些重要的文件放在这个目录中,不就可以避免误删了吗?一个文件名只包含空格的文件夹在Windows中是不允许创建和删除的,但在DOS下却可以创建文件名包含\的文件夹。

在我们使用Windows的过程中,会遇到各种各样的问题。即使是最简单的删除文件也可能遇到麻烦,要么系统提示“文件正在被另一个人或程序使用”,要么就是报告“访问被拒绝”……如果你也遇到过这种情况,不妨看看本文。

原因一:文件正在使用中
在删除文件时,经常会遇到的一个问题是,文件正在使用,无法删除。如果试图删除以独占访问而不是以共享访问方式打开,并且正在使用中的文件时,系统就会出现错误提示:“无法删除xxx:文件正在被另一个人或程序使用”。而另一种情况则是,能够使用删除命令删除文件,但在打开文件的进程释放该文件之前,文件实际上并未删除。
要解决上述问题,需要确定拥有文件打开句柄的进程,然后关闭此进程。在以前的Windows中,我们可以使用资源工具包的Oh.exe。但在XP中,安装好的Support
Tools却不带Oh.exe。不过,XP提供了一个新的Openfiles.exe命令行工具,它能够报告进程打开的各个文件。与Oh.exe相似,Openfiles.exe也要求打开系统内核监视,这会消耗一些内存,并降低系统操作的性能。打开系统监视的命令是“Openfiles
/local
on”,它会启用系统全局标志“维护对象列表”,需重新启动系统才能生效。重新启动系统后,在命令提示符下执行不带参数的“Openfiles”,即可看到各个进程打开文件的清单。

原因二:文件系统损坏
磁盘上的坏区、其他硬件故障或者软件错误都可能会损坏文件系统,使文件出现问题而无法删除。典型操作失败的方式可能各不相同,当检测到文件系统损坏时,通常会收到一条提示运行Chkdsk的信息。
如果遇到这种情况,可以在磁盘卷上运行Chkdsk实用工具以纠正任何存在的错误。根据损坏的性质,Chkdsk也许能够恢复文件数据,也许无法恢复,但Chkdsk可以使文件系统返回到一种在内部一致的状态。有关Chkdsk实用工具的命令及参数,可以在命令提示符下执行“Chkdsk
/?”查阅。
原因三:文件使用了存取控制列表
如果某个文件使用了存取控制列表(Access Control
List,简称ACL),而操作者又没有相应的权限,那么删除文件时就可能出现“访问被拒绝”的提示。

通常情况下,管理员具有取得任何文件所有权的隐含能力,文件所有者也具有修改文件权限的隐含能力。不过,这些默认的权限是可以被修改的。
要解决因ACL导致文件无法删除的问题,就必须以具有相应权限的用户身份登录,或者是赋予自己删除文件的权限,然后才能删除文件。要注意的是,操作者必须拥有这些文件的所有权才能更改权限。如果是因为文件使用了不规范的ACL而不能使用某些安全工具显示或修改其权限时,可以尝试使用命令行工具Cacls.exe进行修改。

原因四:文件名使用了一个保留名称
众所周知,像AUX、LPT1这样的名称是为旧式DOS设备保留的。为了向后兼容,在Windows中不允许使用这些文件名,也不能使用典型的Win32文件调用来创建它们。反之,如果文件名是Win32命名空间中的一个保留名称,则同样可能无法删除此文件。
要解决此类问题,可以在Linux或其他非Windows的操作系统下重命名或删除该文件。另外,如果能够使用特定的语法指定到该文件的路径,也可以使用一些内置的命令绕过典型的Win32保留名称检查。例如,在Windows
XP中使用以下命令,可以删除名为“lpt1”的文件(Del命令后面加上“?”来避免Windows检查文件名的合法性):
Del [URL=]?c:[/URL]文件路径lpt1

原因五:无效的文件名称
如果文件名中包括一个无效名称,例如文件名有一个尾随空格,或一个尾随句点,或者文件名仅由一个空格组成,同样可能无法删除该文件。值得一提的是,如果使用典型的Win32语法打开名称中有尾随空格或尾随句点的文件,则尾随空格或句点在打开实际文件之前会被去掉。因此,如果在同一个文件夹中有两个分别名为“File.txt”和“File.txt
”的文件(注意第二个文件名后面的空格),当使用标准Win32调用打开第二个文件时,实际上会打开第一个文件。同样,如果文件的名称仅是“
”(一个空格字符),当尝试使用标准Win32调用打开它时,实际上会打开该文件的父文件夹。在此情况下,如果尝试更改这些文件上的安全设置,就有可能会意外更改其他文件上的设置。
与解决文件名使用保留名称的方法类似,可以使用一种适当的内部语法删除此文件。例如要删除包含尾随空格的文件,可以使用如下命令:
Del [URL=]?[/URL] c:文件路径(尾随空格的文件名)

原因六:文件路径太深无法访问
文件位于比最大路径字符数(MAX_PATH)更深的路径中,可能导致文件无法访问,当然,这种情况较为少见。如果路径深的原因是文件夹名称太长,最简便的解决方案是使用自动生成的8.3名称访问该文件。如果8.3路径也太长,可以从根文件夹开始重命名文件夹,缩短它们的名称,以使目标文件的路径深度不超过MAX_PATH。若是文件的深度超过128个文件夹,可以通过创建一个网络共享,使其位于文件夹树中尽可能深的位置,然后通过访问此共享来访问文件。
一般情况下,如果遇到因文件路径太深无法访问的情况,可以通过使用创建文件的软件来管理这些文件。也就是说,如果有一个程序,它可以创建超过MAX_PATH的文件,则我们也可以使用该程序来管理这些文件。此外,对于通过网络共享创建的深层次结构的文件也可以通过使用同一共享来进行删除。
前面介绍了Windows系统中文件或文件夹无法删除的几种原因以及解决的方法。在某些情况下,可能还会遇到上述各种原因的不同组合,使得删除文件的过程更加复杂。这就需要读者能够举一反三,灵活应用微软提供的各种实用工具进行解决了。
Windows XP中删除AVI文件的问题
很多朋友可能会遇到Windows XP中无法删除AVI文件的问题,这主要是由于Windows
XP视频预览功能的Bug所导致的。你可以尝试用以下方法进行删除。

方法一 在运行命令框中输入“Regs-vr32/u
Shmedia.dll”并回车,卸去Windows
XP的视频文件预览功能。当以后想要恢复视频预览功能时,再使用“Regsvr32Shmedia.dll”命令重新注册即可。

方法二
先打开命令提示符窗口,然后在任务管理器中结束Explorer进程,再从命令提示符窗口中切换到保存视频文件的文件夹下,用Del命令删除文件。

方法三
如果安装了双系统,可以从另一个系统,如Win98下进行删除。

Ⅱ SELinux权限

在了解SELinux之前,我们先来了解一下Linux的两种访问控制策略:DAC和MAC

DAC,自主访问控制(Discretionary Access control)。系统只提供基本的验证, 完整的访问控制由开发者自己控制。
 DAC将资源访问者分成三类:Owner、Group、Other 。
 将访问权限也分成三类:read、write、execute
资源针对资源访问者设置不同的访问权限。访问者通常是各个用户的进程,有自己的uid/gid,通过uid/gid 和文件权限匹配, 来确定是否可以访问。DAC机制下,每一个用户进程默认都拥有该用户的所有权限。
DAC 有两个严重问题:
 问题一:
 因为Root用户是拥有所有权限的,所以DAC对Root用户的限制是无效的。并且在Linux Kernel 2.1以后,Linux将Root权限根据不同的应用场景划分成许多的Root Capabilities, 普通用户也可以被设置某个Root Capability。普通用户如果被设置了CAP_DAC_OVERRIDE, 也可以绕过 DAC 限制。
 问题二:
 用户进程拥有该用户的所有权限,可以修改/删除该用户的所有文件资源, 难以防止恶意软件。

可见,DAC 有明显的缺陷,一旦被入侵,取得Root权限的用户进程就可以无法无天,胡作非为,早期android版本就深受其害。

MAC, 强制性访问控制(Mandatory Access control)。 系统针对每一项访问都进行严格的限制, 具体的限制策略由开发者给出。

Linux MAC 针对DAC 的不足, 要求系统对每一项访问, 每访问一个文件资源都需要根据已经定义好了的策略进行针对性的验证。系统可以针对特定的进程与特定的文件资源来进行权限的控制。即使是root用户,它所属的不同的进程,并不一定能取得root权限,而得要看事先为该进程定义的访问限制策略。如果不能通过MAC 验证,一样无法执行相关的操作。

与DAC相比,MAC访问控制的“主体”变成了“进程”而不是用户。这样可以限制了Root 权限的滥用,另外要求对每一项权限进行了更加完整的细化, 可以限制用户对资源的访问行为。

SELinux就是目前最好的MAC机制,也是目前的行业标准。

SELinux,安全增强Linux(Security-Enhanced Linux),是由美国国家安全局(NSA)发起, 多个非营利组织和高校参与开发的强制性安全审查机制(Mandatory Access control,简称MAC)。SELinux最早于2000年12月采用GPL许可发布。目前,Linux Kernel 2.6 及以上的版本都已经集成了SELinux。

SELinux 分成三种模式:

Android 5.x及以上强制开启,因此,disabled(关闭)模式并没有什么用了。 通常在调试时,我们会启用Permissve(宽容模式), 以便尽可能的发现多的问题, 然后一次修正。 在量产时启用Enfocing mode(强制模式)来保护系统。

查看SELinux模式:adb shell getenforce
设置SELinux模式:adb shell setenforce 1 //0是Permissve,1是Enfocing

SELinux 的访问控制示意图:

通常我们开发的过程中,就是配置Subject、Object、Security Policy。

SELinux 给Linux 的所有对象都分配一个安全上下文(Security Context), 描述成一个标准的字符串。

安全上下文的标准格式: user:role:type[:range]

Security Label 用来绑定被访问资源和安全上下文,描述它们的对应关系。标准格式为:resource security_context。即:res user:role:type[:range]。这里也可以使用通配符,例如 net.就可以绑定所有以net.开头的属性,除此之外,还有类似正则表达式的*、?等等通配符。Security Label 都定义在type_contexts当中,例如file的定义在file_contexts中,service定义在service_contexts中,property定义在property_contexts中。
举例:
file_contexts:

service_contexts:

查看进程安全上下文: ps -AZ 。例如,查看Settings进程的安全上下文,ps -AZ | grep settings:
  u:r:system_app:s0 system 1381 585 4234504 201072 0 0 S com.android.settings
查看文件安全上下文: ls -Z 。例如,查看文件build.prop的安全上下文:
  u:object_r:system_file:s0 build.prop

Type Enforcement (TE) 是根据Security Context中的 type 进行权限审查, 审查 subject type 对 object type 的某个class 类型中某种permission 是否具有访问权限,是目前使用最为广泛的MAC 审查机制, 简单易用。

TE控制语句格式 : rule_name source_type target_type : class perm_set

Type Enforcement规则说明:

举个例子,logd.te、tombstoned.te中定义的TE规则:
  allow logd runtime_event_log_tags_file:file rw_file_perms;
  dontaudit domain runtime_event_log_tags_file:file { open read };
  auditallow tombstoned anr_data_file:file { append write };
  neverallow logd { app_data_file system_data_file }:dir_file_class_set write;

SELinux 中每一个进程或者文件都对应一个type, 而每一个type 都对应有一个或几个attribute。所有常见的attribute定义在以下文件中:
  system/sepolicy/public/attributes
  system/sepolicy/prebuilts/api/[build version]/public/attributes
  system/sepolicy/prebuilts/api/[build version]/private/attributes
其中的[build version]即为android版本号,例如android O为28.0。常见的attribute定义:

Type对应一个或者几个attribute,Type的定义格式:
  type type_name, attribute1, attribute2;
Type的定义通常分散在各个te文件中。例如,常用普通文件的type定义在file.te中:

SEAndroid对于不同的资源类型,定义了不同的Class。比如普通的file、socket等等,比如SELinux 使用的security, 比如针对每个process 参数的process 等定义相关的class。这些class,每一个class 都有相对应的permissions。 比如file 就有 read, write, create, getattr, setattr, lock, ioctl 等等. 比如process 就有fork, sigchld, sigkill, ptrace, getpgid, setpgid 等等。这些相关的class, 以及他们具有那些Permissions都定义在以下文件中:
  system/sepolicy/private/access_vectors
  system/sepolicy/reqd_mask/access_vectors
  system/sepolicy/prebuilts/api/版本号/private/access_vectors
例如:

定义完之后,在以下对应的security_classes 文件中声明定义的classes。
  system/sepolicy/private/security_classes
  system/sepolicy/reqd_mask/security_classes
  system/sepolicy/prebuilts/api/版本号/private/security_classes
例如:

注意,Classes 和Permissions的定义与Kernel 中相关API是强相关的,普通用户严禁修改。

在SELinux 中, 我们通常称一个进程是一个domain, 一个进程fork 另外一个进程并执行(exec) 一个执行档时, 我们往往会涉及到domain 的切换. 比如init 进程, SELinux 给予了它很大的权限, 而它拉起的服务, 我们要限制这个服务的权限,于是就涉及到从一个domain 切换到另外一个domain, 不然默认就使用init 进程的domain.

在SELinux 里面有专门的一条语法: type_transition statement.
在准备切换前我们先要确保有相关的权限操作:

如下面的demo, init 拉起apache 并且切换到 apache 的domain.
(1). 首先,你得让init_t域中的进程能够执行type为apache_exec_t的文件
  allow init_t apache_exec_t : file {read getattr execute};
(2). 然后,你还得告诉SELinux,允许init_t做DT切换以进入apache_t域
  allow init_t apache_t : process transition;
(3). 然后,你还得告诉SELinux,切换入口(对应为entrypoint权限)为执行apache_exec_t类型 的文件
  allow apache_t apache_exec_t : file entrypoint;
(4).最后,Domain Transition
  type_transition init_t apache_exec_t : process apache_t;

可以看到,整个domain切换过程写起来非常麻烦。因此,Google 为了使用方便, 在system/sepolicy/public/te_macros 文件中定义了宏:

我们可以使用这些宏来完成domain切换。

举例:
kernel启动init进程切换domain:
  domain_auto_trans(kernel, init_exec, init)
init启动netd、vold、zygote、installd切换domain:
  init_daemon_domain(netd)
  init_daemon_domain(vold)
  init_daemon_domain(zygote)
  init_daemon_domain(installd)

一个进程创建在一个目录下创建文件时, 默认是沿用父目录的Security Context, 如果要设置成特定的Label, 就必须进行Object Transitions.
同样是使用:type_transition statement.
对应的必须有两个前提条件:

下面是一个demo, ext_gateway_t 这个domain 在类型为in_queue_t 的目录下,创建类型为 in_file_t 的文件.

(1). 首先,你得让ext_gateway_t 对in_queue_t 目录具备访问权限
  allow ext_gateway_t in_queue_t : dir { write search add_name };
(2). 然后,你还得告诉SELinux,允许ext_gateway_t 访问in_file_t的文件
  allow ext_gateway_t in_file_t : file { write create getattr };
(3).最后,Object Transition
  type_transition ext_gateway_t in_queue_t : file in_file_t;

同样的,为了方便使用,Google 也在system/sepolicy/public/te_macros 文件中定义了宏:

使用举例:
  file_type_auto_trans(factory, system_data_file, factory_data_file)

android O 以前sepolicy 集中放在boot image 。前面提到SELinux在Android的主要变更历史时,有提到android O 开始,Google将system image 和 vendor image 分离。因此,sepolicy 也相应的被分离存放到system image 以及 vendor image。与system 相关的sepolicy 就存放system image, 与SoC vendor 相关的sepolicy 就存放在vendor image。

对于原生AOSP,Google 设定了不同的存放目录, 以便进行分离, 以Google 默认的sepolicy 为例,sepolicy主目录为 /system/sepolicy,我们主要关注三个子目录:

对于不同的平台,不同平台厂商也设定了不同的存放目录,以MTK平台为例:
首先,根据不同的platform共用sepolicy、platform独有、project独有,分为:

对应的,不同版本会导入不同目录下的sepolicy配置

以mt6763平台为例,导入时:
[common] 路径为:/device/mediatek/sepolicy
[platfrom] 路径为:/device/mediatek/mt6763/sepolicy/
具体的定义在BoardConfig.mk文件中:

然后,basic、bsp、full又可以主要细分为:

Google 在system/sepolicy 中定义了相关的neverallow 规则, 对SELinux Policy 的更新进行了限制, 以防止开发者过度开放权限,从而引发安全问题。并且还会通过CTS测试检测开发者是否有违法相关的规则。

因此,我们需要注意以下几点:

出现SELinux Policy Exception时常见的两种解决方案:

(1). 修改对应节点的SELinux Security Label, 为特定的Subject,如system_app、platform_app、priv_app,例如Settings,SystemUI等内置APP开启权限, 但严禁为untrsted app 开启权限。
(2). 通过system server service 或者 init 启动的service 读写操作, 然后app 通过binder/socket 等方式连接访问. 此类安全可靠, 并且可以在service 中做相关的安全审查, 推荐这种方法.

情景: 定义由 init 进程启动的service, factory, 其对应的执行档是 /vendor/bin/factory。

(1). 在device/mediatek/mt6763/sepolicy/basic/non_plat 目录下创建一个factory.te , 然后将te文件加入编译,如放到这种指定目录下不需要额外配置,sytem/sepolicy/Android.mk中定义的build_policy函数会遍历指定目录导入te文件。

(2). 在factory.te 中定义factory类型,init 启动service 时类型转换,
  type factory, domain;
  type factory_exec, exec_type, file_type, vendor_file_type;
  init_daemon_domain(factory)

(3). 在file_contexts中绑定执行档
  /(system/vendor|vendor)/bin/factory u:object_r:factory_exec:s0

(4). 根据factory需要访问的文件以及设备, 定义其它的权限在factory.te 中.
  #Purpose: For key and touch event
  allow factory input_device:chr_file r_file_perms;
  allow factory input_device:dir rw_dir_perms;

情景: 添加一个自定义的system property: persist.demo,并为platform_app设置读写权限

(1). 在property.te中定义system property类型
  type demo_prop, property_type

(2). 在property_contexts中绑定system property的安全上下文。
  persist.demo u:object_r:demo_prop:s0

(3). 在platform_app.te 中新增写权限,可以使用set_prop宏。
  set_prop(platform_app, demo_prop)

(4). 在platform_app.te 中新增读权限,可以get_prop 宏。
  get_prop(platform_app, demo_prop)

情景: 有一个设备节点/dev/demo,有一个platform_app进程需要读写这个设备节点。

(1). 在device.te中定义device 类型
  type demo_device dev_type;

(2). 在 file_contexts中绑定demo_device
  /dev/demo u:object_r:demo_device:s0

(3). 在platform_app.te中,允许platform_app使用demo device 的权限
  allow platform_app demo_device:chr_file rw_file_perms;

情景: 有一个扩展的系统服务demo_service供APP调用。

(1). 在service.te 中定义service 类型
  type demo_service, app_api_service, system_server_service, service_manager_type;

(2). 在service_contexts 中绑定service
  demo u:object_r:demo_service:s0

(3). 在frameworks/base/core/java/android/content/Context.java中定义服务常量
  public static final String DEMO_SERVICE = "demo";

(4). 在frameworks/base/core/java/android/app/SystemServiceRegistry.java中,参照其它系统服务注册demo_service

(5). 在frameworks/base/services/java/com/android/server/SystemServer.java中,启动DemoService,添加到service_manager进行管理。

(6). 最后一步,参考其它系统服务,实现DemoManager、DemoService,并定义如IDemoService等等的AIDL接口。

情景: 一个native service 通过init 创建一个socket 并绑定在 /dev/socket/demo, 并且允许某些process 访问.

(1). 在file.te中定义socket 的类型
  type demo_socket, file_type;

(2). 在file_contexts中绑定socket 的类型
  /dev/socket/demo_socket u:object_r:demo_socket:s0

(3). 允许所有的process 访问,使用宏unix_socket_connect(clientdomain, socket, serverdomain)
  unix_socket_connect(appdomain, demo, demo)

(1). 在device/mediatek/mt6763/sepolicy/basic/non_plat目录下创建一个demo.te。

(2). 在demo.te 中定义demo 类型,init 启动service 时类型转换。并可以根据demo 需要访问的文件以及设备, 定义其它的权限在demo.te 中。
  type demo, domain;
  type demo_exec, exec_type, file_type;
  init_daemon_domain(demo)

(3). 绑定执行档 file_context 类型
  /vendor/bin/demo u:object_r:demo_exec:s0

(4). 创建demo的入口执行档demo_exec、并配置相应的权限。

(1). 将SELinux 调整到Permissive 模式复测
使用eng/userdebug 版本,adb shell setenforce 0 将SELinux 模式调整到Permissive 模式,然后复测。如果还能复现问题,则与SELinux 无关; 如果原本很容易复现, 而Permissive mode 不能再复现, 那么就可能与SELinux相关。

(2). 查看LOG 中是否有标准的SELinux Policy Exception.
在Kernel LOG / Main Log 中查询关键字 "avc: denied" 看看是否有与目标进程相关的SELinux Policy Exception, 并进一步确认这个异常是否与当时的逻辑相关。

一般情况我们在符合Google sepolicy策略及neverallow策略的前提下,根据LOG中的内容,需要什么权限就加什么权限。例如LOG:
2020-03-27 14:11:02.596 1228-1228/com.android.systemui W/FaceIdThread: type=1400 audit(0.0:481): avc: denied { read } for name="als_ps" dev="tmpfs" ino=10279 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:als_ps_device:s0 tclass=chr_file permissive=0

LOG说明如下:

一般我们需要重点关注的是四个:permission、source type、target type、target class

根据这四个就可以配置出的所需要的selinux权限:
   allow [source type] [target type]: [target class] [permission]
例1:
03-27 03:45:22.632 2958 2958 W Camera: type=1400 audit(0.0:314): avc: denied { read } for name="u:object_r:graphics_debug_prop:s0" dev="tmpfs" ino=2649 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:graphics_debug_prop:s0 tclass=file permissive=0

解决方案:
按正常的套公式,应该是这样修改platform_app.te,增加:
  allow platform_app graphics_debug_prop:file r_file_perms;
这里我们利用system/sepolicy/te_macros中定义的宏get_prop:

更多相关的宏定义请参考:system/sepolicy/public/te_macros。
所以最终简化后,修改platform_app.te,增加:
  get_prop(platform_app, graphics_debug_prop)

例2:
03-27 14:11:02.596 1228-1228/com.android.systemui W/BackThread: type=1400 audit(0.0:481): avc: denied { read } for name="als_ps" dev="tmpfs" ino=10279 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:als_ps_device:s0 tclass=chr_file permissive=0

解决方案:
修改platform_app.te增加:
  allow platform_app als_ps_device:chr_file r_file_perms;

(1). 不符合neverallow规则或者修改了neverallow规则
编译报错:
  neverallow check failed at xxx
CTS测试项failed:
  android.cts.security.SELinuxNeverallowRulesTest#testNeverallowRulesXXX
这类问题在android O vendor和system分离之后,尤其容易出现。基本上这类问题都是因为修改或者增加的te配置不符合neverallow规则,导致编译报错。而为了解决编译报错,又修改了neverallow规则,最终在跑CTS时,没法通过相关的测试项。

解决思路:

(2). init进程fork新进程没有做domain切换
CTS测试项failed:
  android.security.cts.SELinuxDomainTest # testInitDomain

解决思路:
fork进程时,参考3.4节中做domain切换。

本文主要参考了MTK-Online的Quick-start中《SELinux 问题快速分析》的内容,感谢原作者们的辛勤付出。另外,结合源码和自身开发实践,增加了一些自身理解和实践内容。

阅读全文

与linux权限绕过相关的资料

热点内容
游戏策划要学什么编程语言 浏览:600
解压后的文件哪个是你安装包 浏览:540
g2文件是什么 浏览:782
python中修改文件 浏览:198
win10查系统版本号 浏览:861
win10如何更改壁纸 浏览:803
怎么引用另一个表格的数据 浏览:990
杭州哪个网站便宜又好 浏览:511
linuxclibcurl 浏览:434
hadoophdfs删除文件 浏览:752
ios查看软件版本号 浏览:403
搭建商用网站需要学什么 浏览:188
只读文件word怎么复制粘贴 浏览:841
mmd在哪个文件夹 浏览:765
以前各种路由器app怎么没有了 浏览:394
javaweb英文文献 浏览:702
可在线编程isp是什么意思 浏览:34
iphone6s单手模式 浏览:79
vivo怎么找删除的app软件 浏览:852
360装机大师怎么用教程 浏览:168

友情链接