Android Selinux详解[二]--新增文件标签相关

本文介绍了如何在SELinux中使用file_contexts为文件、目录和节点添加标签,包括dev标签的示例,以及如何通过编译验证和restorecon命令来确保标签生效。还提到了在genfs_contexts中处理设备节点标签的注意事项和file.te中的常用声明类型解释。
摘要由CSDN通过智能技术生成

目录

file_contexts新增标签

在file_contexts中新增标签的验证方式

在file_contexts中新增节点标签可能会遇到的问题

在file.te中一些常用的声明类型解释


在工作过程中,SElinux常用的有以下几个文件可用于新增标签

可用于加标签的文件名含义对应的声明文件名(一般会声明的地方,根本上放哪里都可以)
file_contexts给 文件/目录/节点 新增标签file.te
genfs_contexts给节点新增标签,与上一个不同的是,不用执行restorecon操作file.te
hwservice_contexts给hal服务新增标签hwservice.te
property_contexts给属性新增标签property.te
seapp_contexts给APP新增标签untrusted_app.te app.te...等等
service_contexts给系统服务新增标签service.te

restorecon在Selinux中是一个非常常用的命令,其解释如下 

"restorecon" 是一个用于恢复文件或目录的 SELinux 安全上下文的命令。在使用 SELinux(Security-Enhanced Linux)时,每个文件和目录都有一个安全上下文,它描述了文件或目录的安全属性和访问权限。如果由于某种原因安全上下文发生了改变,例如文件被移动或复制,可能导致安全上下文不一致。"restorecon" 命令可以用来重新设定文件或目录的安全上下文,以确保其符合预期的安全策略。

在通常情况下,你可以在终端中使用 "restorecon" 命令,语法如下:

restorecon (-Rv) /path/to/directory_or_file

其中:

  • -R 选项表示递归操作,将会对指定目录及其下所有子目录和文件进行恢复。
  • -v 选项表示详细模式,将显示恢复过程中的详细信息。
  • /path/to/directory_or_file 是要恢复安全上下文的目录或文件路径。

请注意,在执行 "restorecon" 命令时,确保你具有足够的权限来操作目标文件或目录。此外,SELinux 的相关配置以及系统策略也会影响到 "restorecon" 命令的实际效果。

总之,"restorecon" 命令是用于恢复文件或目录的 SELinux 安全上下文,确保其符合系统的安全策略。

file_contexts新增标签

参考源码:file_contexts - OpenGrok cross reference for /system/sepolicy/private/file_contexts

可以看到dev的标签如下

/dev(/.*)?        u:object_r:device:s0
这个含义代表/dev下所有的文件或者目录的标签都是device

可以通过ls -l -Z命令查看下标签,可以看到标签就是device

drwxr-xr-x  27 root   root      u:object_r:device:s0       3780 2024-02-21 11:21 dev

如果在dev的子目录下,创建一个目录或者文件,并不给它打标签的话,那么这个新创建的文件或者目录会和父目录的标签一致

cd dev

drwxrwxrwx  2 root        root        u:object_r:device:s0     40 2024-02-21 11:43 0

如果有单独打标签,则它的标签会是新打的标签

比如dev/block,它的标签打成这种/dev/block(/.*)?    u:object_r:block_device:s0

那我们再查看它的标签,会发现标签是已经变了的

drwxr-xr-x  6 root        root        u:object_r:block_device:s0          3360 1970-01-01 00:06 block

在file_contexts中新增标签的验证方式

当新增文件标签时,有两种方式可以验证

编译方式验证方法
整编刷机烧录的方式,此方法不用任何别的操作,去你新增的标签下通过ls -l -Z查看即可看到效果
单编

adb push完之后然后执行adb reboot

重启完成后去对应目录下去查看标签,会发现标签并没有生效

需要执行以下restorecon命令才可以

当文件对应路径下使用restorecon +文件名的方式,即可看到打标签后的效果

在file_contexts中新增节点标签可能会遇到的问题

请注意如果是新增的是设备节点,可能会出现标签无法生效的情况

因为在file_contexts中新增设备节点标签,是需要代码或者手动执行restorecon命令才会生效的,否则就是原来的标签,所以建议在genfs_contexts中去新增设备节点相关的标签。在genfs_contexts中新增设备节点的标签时,请注意需要把节点对应的超链接路径也新增上去才可以,这种带->的就是超链接,对于这种情况就需要当前目录/sys/bus/platform/devices/soc:wsa_spkr_en1_pinctrl 以及对应的超链接目录/sys/bus/platform/drivers/msm-cdc-pinctrl都添加上才可以,具体加法,后面出一节关于genfs_contexts再进行分析。

/sys/bus/platform/devices/soc:wsa_spkr_en1_pinctrl # ls -l
total 0
lrwxrwxrwx 1 root root    0 2024-02-21 12:05 driver -> ../../../../bus/platform/drivers/msm-cdc-pinctrl

在file.te中一些常用的声明类型解释

这种代表系统节点声明,一般是驱动加载后创建的系统节点
type sysfs_uio, sysfs_type, fs_type;

这种是可执行文件的type声明,并且这个可执行文件在system侧
type tcpdump_exec, system_file_type, exec_type, file_type;

这种是普通非可执行文件的type声明,并且这个文件在system侧
type mac_perms_file, system_file_type, file_type;

这种不声明它属于system和vendor,就没有system和vendor的neverallow限制
type hostapd_data_file, file_type, data_file_type;

这种是普通非可执行文件的type声明,并且这个文件在vendor侧
type vendor_hal_file, vendor_file_type, file_type;

这种是可执行文件的type声明,并且这个可执行文件在vendor侧
type hal_configstore_default_exec, exec_type, vendor_file_type, file_type;

这种代表是proc节点的声明
type proc_cmdline, fs_type, proc_type;

这种代表是文件类型,并且是core_data_file_type的
type adb_data_file, file_type, data_file_type, core_data_file_type;

还有一些带有mlstrustedobject的type,这种type在充当客体时可以越过MLS检查,

声明的时候带有core_data_file_type,会有很多neverallow限制,这种的domain域的基本上都不能与它通信

  • 24
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android SELinuxAndroid操作系统中的一种安全机制,它可以限制应用程序的访问权限,保护用户数据的安全性。SELinux是一种强制访问控制(MAC)机制,它通过强制规则来限制应用程序的访问权限,即使应用程序本身存在漏洞,也可以保护系统的安全性。Android SELinux的实现基于Linux内核的SELinux模块,它通过定义安全策略来控制应用程序的访问权限,包括文件系统、网络、进程等方面。Android SELinux的实现需要在系统级别进行配置,因此需要一定的技术知识和经验。 ### 回答2: 安卓的SELinux是一项安全功能,做到了不同级别权限间的隔离。它与Linux的SELinux相似,都是基于Mandatary Access Control(MAC)的实现。MAC使用了定义好的安全策略来决定进程访问对象的许可。每个对象有一个或多个安全标签,决定了可访问这些对象的访问者。SELinux实现了一个高度定制化的MAC实现,以达到保护系统免受攻击的效果。 SELinux可以将任何应用程序、库或系统进程在安全上互相隔离。每个进程可以分配一个不同的安全上下文,用于决定该进程可以执行的操作。SELinux允许管理员定义一个策略集,以确保只有那些拥有特定权限的应用程序可以执行特定的操作。SELinux包括以下4个组件。 * Security-enhanced kernel:该内核支持SELinux,并且为应用程序和系统提供安全保护。通常,操作系统上的SELinux是直接编译到内核配置中的。 * SELinux policy:这是一组规则,它定义了哪些进程可以访问哪些资源,以及何时可以访问它们。这是SELinux的“脑”。SELinux策略通过使用安全标签来标识资源和进程,并使用规则来决定它们之间的安全关系。 * SELinux utilities:这些社区提供的工具用于安装、更新和管理SELinux策略。通常情况下,管理员会安装每个Linux发行版自带的安全工具。 * SELinux-aware applications:这是应用程序和守护进程,它们能够在SELinux的约束下运行。这些应用程序还懂得如何处理SELinux策略,以确保它们对系统的安全有积极贡献。 总的来说,SELinux是一项强大而高度定制化的MAC实现,能够确保安卓系统和应用程序免受攻击。它通过一组规则定义了可用资源和进程之间的安全关系,从而在操作系统和应用层上实现了分离和隔离。作为一项优秀的安全保护功能,它能够在各种安卓设备上为用户提供强大的保护措施,从而发挥关键的作用。 ### 回答3: Android操作系统是目前全球手机、平板等终端设备最常用的操作系统之一。Android系统架构中有一个非常重要的安全机制,即SE_LINUX(Security-Enhanced Linux)。SE_LINUX是由美国国家安全局(NSA)和Redhat合作研发的一种新型操作系统,它基于强制性访问控制(Mandatory Access Control)机制,是一种可扩展的安全模型,功能十分强大。 Android系统使用SE_LINUX来保障应用程序的安全。在Android的SE_LINUX中,安全策略旨在为每个进程提供最佳的资源保护。当应用程序尝试访问受限制的资源时,安全策略会检查该应用程序的标记是否具有访问受限制资源的许可权,以确保安全性。如果没有访问权限,访问请求就会被拒绝,在应用程序层面上保证了Android系统的安全。 其中,SE_LINUX的工作原理是在内核上增加了一个“SELinux子系统”,具体实现过程如下:(1)在内核源代码中添加SELinux子系统;(2)在Linux 内核上开发安全模块;(3)编写用户空间程序和共享代码,实现SELinux规则和策略以及管理SELinux权限的机制。Android系统的SE_LINUX是基于SMLS架构,即安全、多层、标签、安全。 同时,SE_LINUX还为Android系统中的进程、文件系统、系统服务进行了标记化管理。每个进程都有一个唯一的SELinux安全上下文标签进行标识,涉及到的对象都会增加一个SELinux标签,当某个进程尝试访问某个对象时,它的SELinux上下文标签需要满足该对象的SELinux上下文标签的安全策略,否则该进程就会被降级或者拒绝访问该对象。 总之,Android SE_LINUX是Android操作系统架构中的重要安全机制,它通过强制性访问控制(Mandatory Access Control)机制来保护应用程序的安全,在访问受限制的资源时会进行检查、获取许可证以保证安全。SE_LINUX的工作原理是标记化管理,确保每个进程、文件系统、系统服务都对应一个唯一的安全标签,实现了权限的有效、高效管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值