记一次selinux权限添加

本文介绍如何为system_server进程添加SELinux权限,以支持vendor.mtk属性的设置。通过修改system_server.te文件,加入特定权限,并介绍了如何编译验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

selinux权限的原理之前有看过,一知半解,基本也没有修改过相关代码, 这两天一次需求开发中临时需要添加一个selinux权限,大概咨询了下同事,自己搞了一下,居然一次成功了,记录下。

需求开发需要在system_server进程中调用SystemProperties.set("vendor.mtk.xxx")设置一个vendor.mtk开头的属性,不适配selinux权限的话会报错导致开不了机。

添加selinux权限的步骤:

1.  查看设备根目录的vendor_property_contexts文件

busybox vi vendor_property_contexts

可以看到vendor.mtk开头的属性的selinux权限是u:object_r:vendor_mtk_default_prop:s0

下面就需要为system_server进程添加这个权限。

2.  查找system_server进程的selinux权限定义文件:system_server.te

Android原生的te文件放在源码目录的system/sepolicy目录下,一般手机或电视厂商在定制时会将自己的te文件都单独解耦出来,放在vendor目录,AndroidP上编译还是统一在system/sepolicy模块中编译,编译生成sepolicy文件,替换到设备根目录即可生效。

vendor自有的selinux权限定义文件具体放在哪个目录,在system/sepolicy的Android.mk中有定义,如

......
# BOARD_SEPOLICY_DIRS was used for vendor/odm sepolicy customization before.
# It has been replaced by BOARD_VENDOR_SEPOLICY_DIRS (mandatory) and
# BOARD_ODM_SEPOLICY_DIRS (optional). BOARD_SEPOLICY_DIRS is still allowed for
# backward compatibility, which will be merged into BOARD_VENDOR_SEPOLICY_DIRS.
ifdef BOARD_SEPOLICY_DIRS
BOARD_VENDOR_SEPOLICY_DIRS += $(BOARD_SEPOLICY_DIRS)
endif

ifdef BOARD_ODM_SEPOLICY_DIRS
ifneq ($(PRODUCT_SEPOLICY_SPLIT),true)
$(error PRODUCT_SEPOLICY_SPLIT needs to be true when using BOARD_ODM_SEPOLICY_DIRS)
endif
endif
......

这里面的BOARD_SEPOLICY_DIRS和BOARD_ODM_SEPOLICY_DIRS就是分别为手机/电视厂商和odm预留的selinux权限定义目录,这2个宏的具体定义在厂商自定义的编译脚本中,是厂商定制的,找后这个宏定义后,一般会在其定义的目录中找到system_server.te文件。

3.  在找到的system_server.te文件中添加需要的权限即可,如下。

# ifdef VENDOR_EDIT
allow system_server vendor_mtk_default_prop:property_service set;
# endif /* VENDOR_EDIT */

缺少selinux权限时,一般会在logcat或kernel log中打印如下警告信息:

avc: denied { read } for name=“u:object_r:hwservicemanager_prop:s0” dev=“tmpfs” ino=20968 scontext=u:r:hal_secure_element_unisoc:s0 tcontext=u:object_r:hwservicemanager_prop:s0 tclass=file permissive=0
这个log说明了如下信息:

缺少什么权限:     { read }权限,
谁缺少权限:        scontext=u:r:hal_secure_element_unisoc:s0 
对哪个文件缺少权限:tcontext=u:object_r:hwservicemanager_prop
什么类型的文件:  tclass=file 
完整的意思: hal_secure_element_unisoc进程对hwservicemanager_prop类型的file缺少read 权限。

解决办法是找到scontext权限定义的te文件,加入:

allow  hal_secure_element_unisoc hwservicemanager_prop:file  read;

sepolicy 配置和快速验证_Pogogo1的博客-CSDN博客_system_file_type 一文中有修改te文件的话可以通过编译sepolicy并替换cil文件可以快速验证,但本地在一个androidR TV项目上验证并不生效,还是要全编。

make selinux_policy -j8  // vendor 和system 都修改了
make  selinux_policy_nonsystem  -j8  // 只修改 vendor相关的sepolicy
编译成功后,只需要替换如下文件 vendor_sepolicy.cil,即可快速验证
/vendor/etc/selinux/vendor_sepolicy.cil

<think>好的,我现在需要帮用户解决如何监控一个文件夹在一段时间内是否有修改录的问题。首先,我得理解用户的具体需求。他们可能想确认某个目录是否有文件被添加、删除或修改,这在系统管理、安全监控或数据备份时很常见。 接下来,我应该考虑不同的方法。用户可能对命令行比较熟悉,所以需要介绍一些常用的Linux工具,比如inotifywait、auditd、find命令和文件系统检查工具。同时,用户可能需要实时监控或者定期检查,因此需要区分这两种情况。 首先想到的是inotifywait,这是一个基于inotify的工具,可以实时监控文件系统的变化。使用起来相对简单,但需要安装inotify-tools包。需要告诉用户安装步骤和基本用法,比如监控创建、删除、修改等事件,并录到日志中。 然后是auditd,这是更专业的审计工具,适合需要详细日志录的场景。配置起来稍微复杂,需要编辑规则文件,但功能更强大,可以跟踪特定目录的所有访问和修改操作。可能需要指导用户如何添加监控规则并查看日志。 另外,find命令结合时间戳也是一个简单有效的方法,适合定期手动检查。用户可以指定时间范围,比如过去24小时,查找被修改过的文件。这个方法的优点是无需额外安装软件,但需要用户手动运行命令。 文件系统检查工具如tripwire或aide,适合更高级的安全需求,可以建立基线并检测变化。不过配置和使用起来可能比较复杂,用户可能需要更详细的指导,但考虑到用户可能只是需要基本监控,可能先介绍前几种方法更合适。 还需要考虑用户的使用场景。如果是实时监控,inotifywait和auditd更合适;如果是定期检查,find命令或cron定时任务更实用。用户可能不知道这些工具的区别,需要简单说明每种方法的优缺点。 另外,用户可能有权限问题,比如是否具有root权限来安装软件或配置auditd。需要提到安装inotify-tools可能需要sudo权限,以及auditd的配置可能需要管理员权限。 最后,总结部分要简明扼要,根据用户需求推荐不同的工具,并提醒注意事项,比如日志管理、权限问题等。确保用户能够根据自身情况选择合适的方法,并理解操作步骤和潜在影响。</think>以下是监控文件夹修改录的多种方法,根据需求场景可选择实时监控或定期检查方案: --- ### 一、实时监控方案 #### 1. 使用 `inotifywait` 工具(推荐) ```bash # 安装工具(Debian/Ubuntu) sudo apt-get install inotify-tools # 监控目录的创建/删除/修改事件 inotifywait -m -r --timefmt "%F %T" --format "%T [%e] %w%f" \ -e create,delete,modify,move 目录路径 | tee 监控日志.log ``` - **参数说明**: - `-m` 持续监控(不退出) - `-r` 递归监控子目录 - `-e` 指定监控事件(常用事件:create,delete,modify,move) - **输出示例**: ```text 2024-01-01 14:30 [CREATE] /监控目录/newfile.txt 2024-01-01 14:31 [MODIFY] /监控目录/existing.txt ``` #### 2. 使用 `auditd` 系统审计(专业级) ```bash # 添加审计规则 sudo auditctl -w 目录路径 -p warx -k dir_monitor # 查看审计日志 ausearch -k dir_monitor -i ``` - **规则解释**: - `-w` 监控路径 - `-p warx` 监控写入(w)、属性修改(a)、读取(r)和执行(x) - `-k` 定义搜索关键词 --- ### 二、定期检查方案 #### 1. 使用 `find` 命令检测时间戳 ```bash # 查找过去24小时内被修改的文件 find 目录路径 -type f -mtime 0 -exec ls -l {} \; # 查找过去1小时内被修改的文件 find 目录路径 -type f -mmin -60 ``` - **时间参数**: - `-mtime n`:n天前(0表示今天) - `-mmin n`:n分钟前 #### 2. 对比目录快照 ```bash # 生成初始快照 tree -afis --noreport 目录路径 > snapshot1.txt # 生成新快照并对比 tree -afis --noreport 目录路径 > snapshot2.txt diff snapshot1.txt snapshot2.txt ``` - **说明**:`tree`命令需安装,`-afis`参数显示完整路径和文件信息 --- ### 三、自动化监控脚本示例 ```bash #!/bin/bash DIR="/监控目录" LOG="/var/log/dir_changes.log" # 每5分钟检查一次修改 while true; do changes=$(find $DIR -type f -mmin -5) if [ -n "$changes" ]; then echo "[$(date)] 检测到修改:" >> $LOG echo "$changes" >> $LOG fi sleep 300 done ``` --- ### 四、进阶工具(企业级) 1. **Tripwire**:文件完整性检查工具 2. **AIDE**:高级入侵检测环境 3. **SELinux/AppArmor**:强制访问控制 --- ### 注意事项 1. **日志管理**:长期监控需配置日志轮转(如`logrotate`) 2. **权限要求**:审计工具需要`root`权限 3. **隐藏文件**:上述方法默认包含隐藏文件(以`.`开头的文件)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值