首页 > 系统相关 >Android SELinux——allow语句参数(五)

Android SELinux——allow语句参数(五)

时间:2024-10-11 08:49:32浏览次数:10  
标签:httpd Netlink file SELinux 用于 allow 类别 Android 接字

        通过上一篇文章我们知道,TE(Type Enforcement,类型强制)的 allow 语句中主要包括主体(source)、对象(target)、类别(class)和权限(permissions),这里我们就来看一下其中的参数信息。

一、参数详解

1、主体

        在 SELinux 的上下文中,主体类型 source 是指发起访问请求的安全上下文或主体(Subject)。主体通常指的是进程、用户或者其他需要访问系统资源的实体。

        在 SELinux 策略中,主体类型(source_type)是指发起访问请求的进程所属的安全类型。在 SELinux 策略文件中,source_type 通常是定义好的类型,它描述了进程的性质或功能。例如,在 Android 系统中,不同的应用和服务会运行在不同的安全上下文中,每个上下文对应着不同的类型。

        在实际应用中,source 的类型会根据具体的应用场景和系统的安全需求来设定。为了确保系统的安全性,通常会对不同类型的主体设置严格的访问控制规则。 

2、客体

        在 SELinux 中,对象类型(target)通常指的是客体(如文件、目录、套接字等)的安全标签。与主体类型类似,一个客体也可以具有多个类型。这可以通过在安全上下文中指定多个类型来实现。

        具体来说,一个客体可以在其安全上下文中被赋予多个类型,这些类型之间用逗号分隔。这意味着一个客体可以同时属于多个类型,从而可以被不同类型的主体访问。

allow httpd var_t:file read;
allow httpd httpd_sys_content_t:file read;

        这里同一主体(httpd)同时允许访问不同客体 var_t 和 httpd_sys_content_t。也可以写成如下方式:

allow httpd {var_t, httpd_sys_content_t}:file read;

        httpd 是主体类型,表示发起访问的进程。{var_t, httpd_sys_content_t} 表示一组对象类型,即客体可以是 var_t 类型或 httpd_sys_content_t 类型。read 表示允许读取操作。这种方式使得你能够在一条语句中定义针对多个对象类型的规则,提高了配置文件的可读性和简洁性。

多类别

        上面的代码列出了多个对象时的简化写法,那如果同时又有多个对象类型时是否可以简化?

allow httpd {var_t, httpd_sys_content_t}:{file, dir} read;

        httpd 是主体类型,表示发起访问的进程。{var_t, httpd_sys_content_t} 表示一组对象类型,即客体可以是 var_t 类型或 httpd_sys_content_t 类型。{file, dir} 表示一组对象类别,即客体可以是文件 (file) 或目录 (dir)。read 表示允许读取操作。这段代码等价于:

allow httpd var_t:file read;
allow httpd var_t:dir read;
allow httpd httpd_sys_content_t:file read;
allow httpd httpd_sys_content_t:dir read;

        通过这种方式,你可以更简洁地定义针对多个对象类型和多个对象类别的规则,提高 SELinux 策略文件的可读性和简洁性。

3、类别

        上面 :file 就是一个 Class。简单说就是将某些被访问对象归为一种 Class,比如说被访问的是文件,Class 一般就是 file;如果是目录,Class 就是 dir;如果是 socket,Class 就是 socket 等等。Class 是 AOSP 内定义好的,一般不需要自定义。

源码位置:/system/sepolicy/private/security_classes

#
# Define the security object classes
#

# Classes marked as userspace are classes
# for userspace object managers
class security
class process
class system
class capability

# file-related classes
class filesystem
class file
……

         security_classes 中的定义格式如上代码所示,我们主要来看一下系统中主要设置了哪些 Class。

通用类别

Class名称含义作用
security安全相关的类别用于定义与安全相关的操作
process进程类别用于定义对进程的访问控制
system系统级别的类别通常涉及系统级别的操作
capability权限类别用于定义与 Linux capabilities 相关的操作

文件相关类别 

Class名称含义作用
filesystem文件系统类别用于定义对整个文件系统的访问控制
file文件类别用于定义对普通文件的访问控制
anon_inode匿名 inode 类别用于定义对匿名 inode 的访问控制
dir目录类别用于定义对目录的访问控制
fd文件描述符类别用于定义对文件描述符的操作
lnk_file符号链接类别用于定义对符号链接的访问控制
chr_file字符设备文件类别用于定义对字符设备文件的访问控制
blk_file块设备文件类别用于定义对块设备文件的访问控制
sock_file套接字文件类别用于定义对套接字文件的访问控制
fifo_file命名管道文件类别用于定义对命名管道文件的访问控制

网络相关类别

Class名称含义作用
socket套接字类别用于定义对套接字的一般操作
tcp_socketTCP 套接字类别专门用于 TCP 协议的套接字操作
udp_socketUDP 套接字类别专门用于 TCP 协议的套接字操作
rawip_socket原始 IP 套接字类别用于原始 IP 数据包的套接字操作
node网络节点类别用于定义对网络节点的操作
netif网络接口类别用于定义对网络接口的操作
netlink_socketNetlink 套接字类别用于定义对 Netlink 套接字的操作
packet_socket数据包套接字类别用于定义对数据包套接字的操作
key_socket密钥套接字类别用于处理密钥交换协议相关的套接字操作
unix_stream_socketUnix 流套接字类别用于处理 Unix 流套接字
unix_dgram_socketUnix 数据报套接字类别用于处理 Unix 数据报套接字

SysV IPC 相关类别

Class名称含义作用
sem信号量类别用于定义对信号量的访问控制
msg消息队列类别用于定义对消息队列的访问控制
msgq消息队列类别与 msg 类似,用于消息队列
shm共享内存类别用于定义对共享内存段的访问控制
ipcIPC 类别用于定义对 IPC(进程间通信)资源的一般操作

扩展Netlink套接字类别

Class名称含义作用
netlink_route_socket路由 Netlink 套接字类别用于路由相关的 Netlink 操作
netlink_tcpdiag_socketTCP 诊断 Netlink 套接字类别用于 TCP 诊断相关的 Netlink 操作
netlink_nflog_socket网络过滤日志 Netlink 套接字类别用于网络过滤日志相关的 Netlink 操作
netlink_xfrm_socketXFRM Netlink 套接字类别用于 XFRM(IPsec)相关的 Netlink 操作
netlink_selinux_socketSELinux Netlink 套接字类别用于 SELinux 相关的 Netlink 操作
netlink_audit_socket审计 Netlink 套接字类别用于审计相关的 Netlink 操作
netlink_dnrt_socketDNRT Netlink 套接字类别用于 DNRT(动态路由跟踪)相关的 Netlink 操作
netlink_kobject_uevent_socket内核事件 Netlink 套接字类别用于 DNRT(动态路由跟踪)相关的 Netlink 操作

Netlink套接字类别 

Class名称含义作用
netlink_iscsi_socketiSCSI Netlink 套接字类别用于处理 iSCSI 相关的 Netlink 操作
netlink_fib_lookup_socketFIB 查找 Netlink 套接字类别用于处理 FIB查找相关的 Netlink 操作
netlink_connector_socketConnector Netlink 套接字类别用于处理 Connector 相关的 Netlink 操作
netlink_netfilter_socketNetfilter Netlink 套接字类别用于处理 Netfilter 相关的 Netlink 操作
netlink_generic_socket通用 Netlink 套接字类别用于处理通用 Netlink 操作
netlink_scsitransport_socketSCSI 传输 Netlink 套接字类别用于处理 SCSI 传输相关的 Netlink 操作
netlink_rdma_socketRDMA Netlink 套接字类别用于处理 RDMA(Remote Direct Memory Access)相关的 Netlink 操作
netlink_crypto_socket加密 Netlink 套接字类别用于处理加密相关的 Netlink 操作

socket套接字类别

Class名称含义
appletalk_socketAppleTalk 套接字类别
tun_socketTUN/TAP 套接字类别
sctp_socketSCTP 套接字类别
icmp_socketICMP 套接字类别
ax25_socketAX.25 套接字类别
ipx_socketIPX 套接字类别
netrom_socketNET/ROM 套接字类别
atmpvc_socketATM PVC 套接字类别
x25_socketX.25 套接字类别
rose_socketROSE 套接字类别
decnet_socketDECnet 套接字类别
atmsvc_socketATM SVC 套接字类别
rds_socketRDS 套接字类别
irda_socketIrDA 套接字类别
pppox_socketPPPoX 套接字类别
llc_socketLLC 套接字类别
can_socketCAN 套接字类别
tipc_socketTIPC 套接字类别
bluetooth_socket蓝牙套接字类别
iucv_socketIUCV 套接字类别
rxrpc_socketRXRPC 套接字类别
isdn_socketISDN 套接字类别
phonet_socketPhonet 套接字类别
ieee802154_socketIEEE 802.15.4 套接字类别。
caif_socketCAIF 套接字类别
alg_socketALG 套接字类别
nfc_socketNFC 套接字类别
vsock_socket虚拟套接字类别
kcm_socketKCM 套接字类别
qipcrtr_socketQIPCRTR 套接字类别
smc_socketSMC 套接字类别
xdp_socketXDP 套接字类别

        这些类别主要涉及各种不同的网络协议和特定用途的套接字操作。通过 extended_socket_class 策略能力,可以更细粒度地控制不同类型的套接字行为。

其他类别 

Class名称含义
associationIPSec安全关联类别
packet数据包类别
key密钥类别
dccp_socketDCCP 套接字类别
memprotect内存保护类别
peer网络对等体类别
capability2扩展权限类别
kernel_service内核服务类别
binderBinder 类别
infiniband_pkeyInfiniBand PKey 类别
infiniband_endportInfiniBand 端口类别
cap_userns用户命名空间权限类别
cap2_userns扩展用户命名空间权限类别
process2扩展进程类别
bpfBPF 类别
perf_event性能事件类别
lockdown锁定类别
property_service属性服务类别(用户空间)
service_manager服务管理器类别(用户空间)
hwservice_manager硬件服务管理器类别(用户空间)
keystore_key密钥存储键类别(用户空间)
keystore2密钥存储 2.0 类别(用户空间)
keystore2_key密钥存储 2.0 键类别(用户空间)
dicedDiced 类别(用户空间)
drmserviceDRM 服务类别(用户空间)

        这些类别定义了 SELinux 中不同类型的资源,并为后续的访问控制规则提供了基础。通过这些类别,可以实现细粒度的访问控制,从而增强系统的安全性。 

标签:httpd,Netlink,file,SELinux,用于,allow,类别,Android,接字
From: https://blog.csdn.net/c19344881x/article/details/142460490

相关文章

  • 交叉编译c++给android调用
    NDK及其作用NDK(NativeDevelopmentKit)是一个由Google提供的工具集,用于在Android平台上开发C++或其他本机代码。NDK的主要作用是允许开发人员使用C、C++和其他本机语言编写代码,并将其编译为能够在Android设备上运行的本机代码(通常是共享库.so文件)。NDK的主要作用:......
  • AndroidSDK下载(不通过AndroidStudio)
    下载命令行工具在androiddeveloper滚动到Commandlinetoolsonly下载对应操作系统的命令行工具。笔者下载了windows版本的,其目录结构如下:└─cmdline-tools├─bin│apkanalyzer.bat│avdmanager.bat│lint.bat│profgen......
  • android11 开机动画黑屏优化(总结)
    一、开机向导引起的短暂黑屏在系统中默认是有开机向导的,首次开机会首选进入开机向导,然后进入锁屏桌面,如果某些原因引起开机向导卡顿,会造成短暂黑屏。可以修改如下:frameworks/base/packages/SettingsProvider/res/values/defaults.xmltruetrue再在产品mk中去掉这两个app:pac......
  • android开发编译openssl源代码生成libcrypto.so和libssl.so两个动态库用于android ndk
    openssl编译本篇文章的操作是在Linux环境之下,在虚拟机ubuntu20版本上操作的步骤1.openssl下载解压tar包openssl下载地址:https://openssl-library.org/source/下载完解压:tar-zxvfopenssl-3.3.2.tar.gz//我这里下载openssl-3.3.2.tar.gz版本2.编译openssl库,得......
  • Android:H2-20:水平仪
    任务描述这里介绍的水平仪就是那种比较传统的水平仪,在一个透明的圆盘中充满某种液体,液体中留有一个气泡,当一端翘起时,该气泡将会浮向翘起的一端。该程序用了一个自定义View,该自定义View很简单,就是绘制透明圆盘和气泡——其中气泡的位置会动态改变。在真机中测试该程序,可看到......
  • Android14 如何更改无源码应用图标
    没有源码的Android应用一般就是在解析该APK时就要替换图标,如果只在Launcher替换,那么Settings中很多地方都要进行适配,修改比较麻烦,现在提供一种在源头就替换的涉及修改的文件frameworks/base/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java......
  • Android TextView跑马灯效果
    对于很多时候会有显示不全的问题,也就是会以省略号的形式显示,对于可以有焦点的Textview可以很好实现跑马灯效果,但是无焦点的TextView就不好操作,下面我来解决这个问题。1,对于能获取到焦点的只需在布局里面加上如下属性:android:ellipsize="marquee"//文字显示不完全,以什么方式......
  • Android反编译APK与解析软件包img
    1,Jadx反编译APK下载JadxJADX相当于是apktool+dex2jar+jd-gui的结合体,既能反编译代码也能反编译资源支持的文件有:(apk,dex,jar,class,smali,zip,xapk,aar,arsc,jadx,aab)等。打开之后界面如下,点击打开文件,再选择对应所需要反编译的apk(或者直接拖入apk)等......
  • Android 笔记
    1,常用adb命令查看前台显示的Activity:adbshell"dumpsysactivity|grepmFocus" adbshelldumpsyswindow|findstrmCurrentFocus获取手机的分辨率:adbshellwmsize屏幕密度:adbshellwmdensity飞行模式开/关:adbshellsettingsputglobala......
  • 第3天:Android应用组件
    第3天:Android应用组件(Kotlin版本)欢迎来到第3天的Android编程教程!今天我们将深入了解Android应用的四大组件,以及如何管理Activity的生命周期。我们将使用Kotlin来实现示例代码,并学习如何使用Logcat来调试和观察日志。本章节学习内容代码链接:链接:Android应用组件课程目标......