Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结

Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结

### 文章目录

  • [Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [@toc](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [一、前言](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [二、问题现象与核心日志](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [1、失败日志关键行](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [2、成功日志关键行(修复后)](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [3、常用 adb 日志过滤命令](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [三、根因定位](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [1、错误码 ss_err=7 的含义](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [2、关键验证:setenforce 0 可连接](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [3、对比 A311D2 与 A311Y3 的差异](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [4、为什么"内核级关闭 SELinux"能解决](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [四、完整链路分析](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [1、wpa_supplicant 访问 TLS 私钥的全链路](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [2、SELinux 权限检查的三道门](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [五、修复方案](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [1、修改文件](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [2、修改前的策略状态](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [3、修改后的完整新增规则](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [4、权限分层说明](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [5、neverallow 限制说明](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [六、编译注意事项](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [1、必须清除 SELinux 编译缓存](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [2、常见编译错误及解决](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [七、修复验证](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [1、成功日志时间线](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [2、SELinux AVC 检查](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [八、设备调试命令](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [1、SELinux 状态查询](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [2、动态切换 SELinux 模式](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [3、SELinux AVC 日志查询](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [4、重启 wpa_supplicant 服务](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [5、完整调试流程](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [九、init.rc 说明](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [1、当前 init.rc 配置](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [2、是否需要修改 init.rc](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [十、探索过程中的其他尝试](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [十一、总结](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)
  • [Android16 SELinux 关闭方式汇总:](#文章目录 Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结 @[toc] 一、前言 二、问题现象与核心日志 1、失败日志关键行 2、成功日志关键行(修复后) 3、常用 adb 日志过滤命令 三、根因定位 1、错误码 ss_err=7 的含义 2、关键验证:setenforce 0 可连接 3、对比 A311D2 与 A311Y3 的差异 4、为什么"内核级关闭 SELinux"能解决 四、完整链路分析 1、wpa_supplicant 访问 TLS 私钥的全链路 2、SELinux 权限检查的三道门 五、修复方案 1、修改文件 2、修改前的策略状态 3、修改后的完整新增规则 4、权限分层说明 5、neverallow 限制说明 六、编译注意事项 1、必须清除 SELinux 编译缓存 2、常见编译错误及解决 七、修复验证 1、成功日志时间线 2、SELinux AVC 检查 八、设备调试命令 1、SELinux 状态查询 2、动态切换 SELinux 模式 3、SELinux AVC 日志查询 4、重启 wpa_supplicant 服务 5、完整调试流程 九、init.rc 说明 1、当前 init.rc 配置 2、是否需要修改 init.rc 十、探索过程中的其他尝试 十一、总结 Android16 SELinux 关闭方式汇总:)

一、前言

目前遇到一个问题,系统无法连接企业网络的TLS类型,可以连接PEAP类型。

TLS类型比PEAP类型需要多验证一个用户证书文件;最后问了供应商和AI搞了很久才解决。

本文基于 Android16 系统的 A311Y3 设备,分析 EAP-TLS 企业级 WiFi 网络连接失败的问题。

EAP-TLS 是 WPA3/WPA2 企业级认证中最安全的方式之一,需要客户端提供 CA 证书、用户证书和私钥。

该问题在AML的其他Android16源码上没有在Y3源码上出现。

在 Android 系统中,这些证书由 CertInstaller 安装到 keystore2,wpa_supplicant 通过 boringssl keystore-engine 从 keystore2 读取私钥完成 TLS 握手。

A311Y3 设备在连接 EAP-TLS 网络时,TLS 引擎初始化失败,而同平台的 A311D2 设备可正常连接。

经过多轮排查,最终定位为 SELinux 策略权限缺失,通过修改 1 个 .te 文件解决。

查看logcat日志中的denied日志,是无法解决的,有些denied权限不在日志体现,这个需要深入连接连接过程。

中间有问供应商,有问AI,每天问了AI解决修改了2个星期,一直修改无效。


二、问题现象与核心日志

1、失败日志关键行

A311Y3 设备连接 EAP-TLS 网络时,wpa_supplicant 日志如下(日志文件:20260808_1800_3922_log):

复制代码
W wpa_supplicant: EVP_PKEY_from_keystore2:376 Keystore backend used with legacy alias prefix - ignoring.
E wpa_supplicant: EVP_PKEY_from_keystore2:401 Keystore getKeyEntry returned service specific error: 7
E wpa_supplicant: ENGINE: cannot load private key with id 'USRPKEY_le-59'
I wpa_supplicant: TLS: Failed to initialize engine
I wpa_supplicant: TLS: Failed to set TLS connection parameters, error code: -2

关键信息

  • legacy alias prefix - ignoring:boringssl 检测到 USRPKEY_ 前缀,按新逻辑处理(warning,不影响)
  • service specific error: 7SELinux 权限拒绝(不是密钥不存在)
  • cannot load private key:私钥加载失败 → TLS 引擎初始化失败 → 连接失败
2、成功日志关键行(修复后)

修复后连接成功日志(日志文件:20260814_1138_4388_log):

复制代码
I wpa_supplicant: SSL: Initializing TLS engine keystore
W wpa_supplicant: EVP_PKEY_from_keystore2:376 legacy alias prefix - ignoring
I wpa_supplicant: Found PEM encoded certificate from keystore: USRCERT_le-59
I wpa_supplicant: TLS: Using private key from engine/provider
I wpa_supplicant: EAP method 13 (TLS) selected
I wpa_supplicant: tls_verify_cb - preverify_ok=1 err=0 (ok) depth=1
I wpa_supplicant: tls_verify_cb - preverify_ok=1 err=0 (ok) depth=0
I wpa_supplicant: EAP-SUCCESS EAP authentication completed successfully
I wpa_supplicant: CTRL-EVENT-CONNECTED - Connection to 60:db:15:c2:e6:31 completed
3、常用 adb 日志过滤命令
bash 复制代码
# 抓取 wpa_supplicant 和 keystore2 相关日志(最常用)
adb logcat -s wpa_supplicant:V keystore2:V

# 仅看 TLS/EAP/ENGINE 相关
adb logcat | grep -E "TLS:|EAP|ENGINE|EVP_PKEY|keystore|ss_err"

# 抓取 SELinux AVC 拒绝日志
adb shell dmesg | grep avc | grep -i "wpa\|keystore\|wifi_key"

# 抓取完整连接流程(需要开启 debug 日志)
adb shell setprop persist.log.tag V
adb logcat -s wpa_supplicant:V keystore2:V SupplicantStaIfaceHalAidlImpl:V

如果日志不够详细,可以开启全量 debug 日志:

bash 复制代码
adb shell setprop persist.log.tag V

这个在很多系统流程分析的时候需要打开,不然很多日志看不到。


三、根因定位

1、错误码 ss_err=7 的含义

service specific error: 7 在 keystore2 的 error.rs 中映射为:

rust 复制代码
// system/security/keystore2/src/error.rs
selinux::Error::PermissionDenied => ResponseCode::PERMISSION_DENIED = 7

这是 SELinux 权限拒绝,不是密钥不存在(KEY_NOT_FOUND 错误码不同)。说明私钥实际存在于 keystore2 namespace 102(wifi_key),但 SELinux 策略阻止了 wpa_supplicant 的访问。

2、关键验证:setenforce 0 可连接

在设备上执行以下命令后,TLS 网络连接成功:

bash 复制代码
setenforce 0
stop wpa_supplicant
start wpa_supplicant
# 然后连接 TLS 网络 → 成功!

刚开始以为 setenforce 0 也无法连接,说明不是权限问题;

但是咨询供应商,有些情况在运行后关闭selinux是无效的,需要在内核关闭selinux;或者源码关闭selinux重新编译。

这证明:

  • wpa_supplicant 代码逻辑正确(不需要修改代码)
  • 证书安装流程正确(密钥确实存在于 keystore2)
  • 唯一瓶颈是 SELinux 权限策略缺失
3、对比 A311D2 与 A311Y3 的差异
对比项 A311D2(成功) A311Y3(失败)
init.rc user user root user wifi
init.rc group (注释了 group) group wifi net_raw net_admin
init.rc capabilities 无(root 不需要) NET_RAW NET_ADMIN(缺 SETUID)
SELinux setuid cap 有(root 隐含) 缺失(private/hal_wifi_supplicant.te L14 中 setuid 被移除)
keystore2_key 权限 通过 root 绕过 缺少 manage_blob 等关键权限
4、为什么"内核级关闭 SELinux"能解决
场景 is_selinux_enabled() selinux_check_access() 行为 结果
内核级关闭selinux=0 返回 0 直接返回 0(allow),不做任何检查 ✅ 通过
setenforce 0(permissive) 返回 1 执行完整策略检查,permissive 下返回 allow ✅ 通过
Enforcing(默认) 返回 1 执行完整策略检查,缺权限时返回 DENIED ❌ 失败(ss_err=7)

核心结论setenforce 0 和内核级关闭都能让 TLS 连接成功,证明问题 100% 是 SELinux 权限缺失,不是代码逻辑问题。


四、完整链路分析

1、wpa_supplicant 访问 TLS 私钥的全链路
复制代码
wpa_supplicant (域: hal_wifi_supplicant_default)
    │
    │ ① boringssl keystore-engine 调用 EVP_PKEY_from_keystore("USRPKEY_le-59")
    │    → 检测到 USRPKEY_ 前缀,日志输出 "legacy alias prefix - ignoring"(warning)
    │    → 将 alias 传给 keystore2 的 getKeyEntry()
    │
    │ ② 通过 ServiceManager 查找 keystore2 AIDL 服务
    │    → 需要 SELinux: keystore_service:service_manager find
    │
    │ ③ 通过 Binder 调用 keystore2 的 getKeyEntry()
    │    → 需要 SELinux: binder_call(hal_wifi_supplicant_default, keystore)
    │
    ▼
keystore2 (域: keystore)
    │
    │ ④ 解析 KeyDescriptor { Domain::SELINUX, nspace=102 }
    │    → 查 keystore2_key_contexts: namespace 102 = "u:object_r:wifi_key:s0"
    │
    │ ⑤ selinux_check_access(
    │      caller_ctx = "u:r:hal_wifi_supplicant_default:s0",
    │      target_ctx = "u:object_r:wifi_key:s0",
    │      class = "keystore2_key",
    │      perm = "get_info" / "use" / "manage_blob" / ...
    │    )
    │
    ▼
SELinux AVC 策略引擎
    │
    │ ⑥ 检查 .te 规则中是否 allow
    │    → 修改前: 只有 { get_info use grant },缺少 manage_blob 等 → DENIED (ss_err=7)
    │    → 修改后: 补全所有权限 → ALLOW → 返回私钥 blob
    │
    ▼
返回 EVP_PKEY → TLS 引擎初始化成功 → EAP-TLS 握手 → CONNECTED
2、SELinux 权限检查的三道门
层级 权限 作用 修改前 修改后
第 1 层:密钥访问 wifi_key:keystore2_key { get_info use manage_blob ... } keystore2 内部 selinux_check_access 通过 ❌ 缺 manage_blob ✅ 补全
第 2 层:服务发现 keystore_service:service_manager find ServiceManager 返回 binder 句柄 ⚠️ 被 AOSP 宏间接覆盖 ✅ 已覆盖
第 3 层:Binder 通信 binder_call(..., keystore) Binder 驱动允许 getKeyEntry() 调用 ⚠️ 被 AOSP 宏间接覆盖 ✅ 已覆盖
辅助:能力补充 self:global_capability_class_set { setuid setgid } 消除串口日志中的 setuid AVC denied ❌ 缺失 ✅ 补回

注意 :第 2 层和第 3 层实际通过 AOSP 的 hal_server_domain 宏和 binder_use 宏间接继承,不需要显式添加。但第 1 层和辅助层必须显式添加。


五、修复方案

1、修改文件

唯一需要修改的文件system/sepolicy/vendor/hal_wifi_supplicant_default.te

不需要修改 wpa_supplicant 代码、Framework 代码或 init.rc。

2、修改前的策略状态

AOSP 基础规则(sepolicy/private/hal_wifi_supplicant.te L27-30)只授予:

te 复制代码
allow hal_wifi_supplicant wifi_key:keystore2_key {
    get_info
    use
};

vendor 文件原有规则只有:

te 复制代码
allow hal_wifi_supplicant_default wifi_key:keystore2_key { grant };

缺失的关键权限

  • manage_blob --- PKCS12 blob 访问(最关键!)
  • rebind / update / delete / convert_storage_key_to_ephemeral / req_forced_op --- 其他键操作
  • setuid / setgid --- Linux 能力(串口日志有 AVC denied)
3、修改后的完整新增规则

hal_wifi_supplicant_default.te 末尾追加:

te 复制代码
# LwzWifi Fix: EAP-TLS private key access from wpa_supplicant.
# CertInstaller stores PKCS12 keys in keystore2 namespace 102 (wifi_key).
# wpa_supplicant calls getKeyEntry() which needs get_info/use to load the key,
# and manage_blob for PKCS12 blob access. Without these, SELinux denies
# access and TLS engine init fails (verified: setenforce 0 makes it work).
# Grant all keystore2_key permissions EXCEPT use_dev_id and gen_unique_id
# (those are blocked by neverallow in domain.te:1656-1657).
allow hal_wifi_supplicant_default wifi_key:keystore2_key {
    get_info use manage_blob grant
    rebind update delete
    convert_storage_key_to_ephemeral
    req_forced_op
};

# Restore setuid/setgid capability (denied in dmesg, needed for user switching).
allow hal_wifi_supplicant_default self:global_capability_class_set { setuid setgid };
4、权限分层说明
权限 用途 是否必须
get_info getKeyEntry() 加载密钥元数据 ✅ 必须(AOSP 基础已有)
use TLS 握手时用私钥签名 ✅ 必须(AOSP 基础已有)
manage_blob 通过 Domain::BLOB 访问 PKCS12 blob 必须新增(最关键)
grant 授权命名空间 保留(原有)
rebind 重新绑定别名 补全
update 更新公钥产物 补全
delete 删除密钥条目 补全(wpa 不删除,但补全无害)
convert_storage_key_to_ephemeral 存储密钥转临时密钥 补全
req_forced_op 强制执行操作 补全
setuid / setgid 进程自降权能力 ✅ 必须(串口日志有 AVC denied)
5、neverallow 限制说明

不能使用 * 通配符,因为 domain.te L1656-1657 有 neverallow 规则:

te 复制代码
# system/sepolicy/private/domain.te:1657
neverallow base_typeattr_444 base_typeattr_239 (keystore2_key (use_dev_id))

# system/sepolicy/private/domain.te:1656
neverallow base_typeattr_472 base_typeattr_239 (keystore2_key (gen_unique_id))

因此必须显式列出所有权限 ,排除 use_dev_idgen_unique_id。如果用 * 会导致编译报错:

复制代码
neverallow check failed at plat_sepolicy.cil:24297
  (neverallow ... keystore2_key (use_dev_id))

六、编译注意事项

1、必须清除 SELinux 编译缓存

SELinux 策略在 Android 编译系统中会被预编译成二进制策略文件(sepolicy),如果不清缓存,编译系统会直接使用缓存的旧策略文件,导致 .te 源文件修改不生效。

方法一:仅清除 sepolicy 相关缓存(快速)

bash 复制代码
# 清除 soong sepolicy cil/conf 中间产物
rm -rf out/soong/.intermediates/system/sepolicy/vendor_sepolicy.cil.raw \
       out/soong/.intermediates/system/sepolicy/plat_sepolicy.cil \
       out/soong/.intermediates/system/sepolicy/precompiled_sepolicy \
       out/soong/.intermediates/system/sepolicy/recovery_sepolicy.cil \
       out/soong/.intermediates/system/sepolicy/odm_sepolicy.cil \
       out/soong/.intermediates/system/sepolicy/product_sepolicy.cil \
       out/soong/.intermediates/system/sepolicy/system_ext_sepolicy.cil

# 清除 target 级 sepolicy 产物
rm -rf out/target/product/*/obj/ETC/*sepolicy* \
       out/target/product/*/system/etc/selinux \
       out/target/product/*/vendor/etc/selinux \
       out/target/product/*/odm/etc/selinux

方法二:彻底清除(最保险)

bash 复制代码
# 用 make installclean
make installclean

# 或删除整个 target 目录
rm -rf out/target/product/<your_target>/

编译步骤

bash 复制代码
# 1. 设置环境
source build/envsetup.sh
lunch <your_target>

# 2. 先单独编译 sepolicy,确认无错误
make sepolicy -j8
# 成功标志:无 "FAILED" 输出

# 3. 编译完整镜像
make bootimage vendorimage systemimage -j8

# 4. 或直接全量编译
make -j8
2、常见编译错误及解决
错误信息 原因 解决方法
unknown type keystore2_service 类型名不存在 正确名称是 keystore_service(定义在 sepolicy/public/service.te:31
unknown type keystore_server 域名不存在 正确域名是 keystorebinder_call 宏直接用 keystore
neverallow check failed (use_dev_id) 通配符 * 包含了被禁权限 显式列出权限,排除 use_dev_idgen_unique_id
neverallow check failed (gen_unique_id) 同上 同上
修改后策略未生效 编译缓存未清除 执行上述清缓存命令后重新编译

七、修复验证

1、成功日志时间线

修复后在 Enforcing 模式 下连接 EAP-TLS 网络,日志时间线如下(日志文件:20260814_1138_4388_log):

时间戳 日志 状态
23:40:31.649 SSL: Initializing TLS engine keystore 引擎初始化开始
23:40:31.654 EVP_PKEY_from_keystore2:376 legacy alias prefix - ignoring 正常警告(不影响)
23:40:31.673 Found PEM encoded certificate from keystore: USRCERT_le-59 用户证书加载成功
23:40:31.673 TLS: Using private key from engine/provider 私钥加载成功
23:40:31.673 EAP method 13 (TLS) selected EAP-TLS 方法选定
23:40:31.825 tls_verify_cb - preverify_ok=1 err=0 (ok) depth=1 CA 证书验证通过
23:40:31.827 tls_verify_cb - preverify_ok=1 err=0 (ok) depth=0 服务器证书验证通过
23:40:31.827 Match domain against suffix server 域名匹配通过
23:40:32.170 EAP-SUCCESS EAP authentication completed successfully EAP 认证成功
23:40:32.226 EAPOL authentication completed - result=SUCCESS EAPOL 成功
23:40:32.228 CTRL-EVENT-CONNECTED - Connection completed 连接建立
2、SELinux AVC 检查

成功日志中没有任何 wpa_supplicant / hal_wifi_supplicant / keystore 相关的 AVC 拒绝 。整个测试在 SELinux Enforcing 模式下进行(未执行 setenforce 0),证明 .te 策略修改完全生效。


八、设备调试命令

1、SELinux 状态查询
bash 复制代码
# 查询当前 SELinux 模式
getenforce
# Enforcing   - 强制模式(默认,规则真正生效)
# Permissive  - 宽容模式(规则仅记录日志,不阻止行为)
# Disabled    - 完全关闭

# 查询 wpa_supplicant 进程的 SELinux 域
ps -Z | grep wpa_supplicant
# 期望输出: u:r:hal_wifi_supplicant_default:s0  root  <PID>  1  ...

# 查询内核 SELinux 状态
cat /sys/fs/selinux/enforce
# 1 = Enforcing, 0 = Permissive
2、动态切换 SELinux 模式
bash 复制代码
# 切换到 Permissive 模式(宽松,仅记录不阻止)
setenforce 0

# 切换回 Enforcing 模式(强制,规则真正生效)
setenforce 1

# 通过 adb 执行
adb shell setenforce 0

注意setenforce 0 仅在 userdebug/eng 版本可用,user 版本会报 Permission denied

3、SELinux AVC 日志查询
bash 复制代码
# 查询内核 AVC 拒绝日志(关键调试命令!)
dmesg | grep avc | grep -iE "wpa|keystore|wifi_key"

# 查询所有 AVC 拒绝
dmesg | grep "avc:.*denied"

# 如果 dmesg 无输出(可能是 dontaudit 隐藏了日志),临时关闭 dontaudit
setenforce 0
stop wpa_supplicant
start wpa_supplicant
# 然后再查 dmesg
dmesg | grep avc | tail -20

# 用 audit2allow 自动生成策略(如果有该工具)
dmesg | grep avc | grep -iE "wpa|keystore" | audit2allow

上面这些命令大部分没有作用。

4、重启 wpa_supplicant 服务
bash 复制代码
# 停止 wpa_supplicant
stop wpa_supplicant

# 启动 wpa_supplicant
start wpa_supplicant

# 组合命令
stop wpa_supplicant && start wpa_supplicant

# 验证进程是否运行
ps -ef | grep wpa_supplicant
5、完整调试流程
bash 复制代码
# 步骤 1: 确认 SELinux 模式
getenforce
# 期望: Enforcing(有问题时)

# 步骤 2: 切换到 Permissive 模式
setenforce 0

# 步骤 3: 重启 wpa_supplicant
stop wpa_supplicant && start wpa_supplicant

# 步骤 4: 测试 TLS 连接
# 在 Settings 中连接 TLS 网络

# 步骤 5: 如果成功,确认是 SELinux 权限问题
# 切回 Enforcing 并查具体缺的权限
setenforce 1
dmesg | grep avc:.*denied | grep -i wpa_supplicant

# 步骤 6: 根据 AVC 日志补全 .te 策略,重新编译刷入

九、init.rc 说明

1、当前 init.rc 配置

文件:wpa_supplicant_8-A311Y3/wpa_supplicant/aidl/vendor/android.hardware.wifi.supplicant-service.rc

rc 复制代码
service wpa_supplicant /vendor/bin/hw/wpa_supplicant \
    -O/data/vendor/wifi/wpa/sockets -dd \
    -g@android:wpa_wlan0
    interface aidl android.hardware.wifi.supplicant.ISupplicant/default
    class main
    socket wpa_wlan0 dgram 660 wifi wifi
    user root
    disabled
    oneshot
2、是否需要修改 init.rc

不需要。 仅修改 hal_wifi_supplicant_default.te 即可解决 TLS 连接问题。

对比项 user root user wifi
SELinux 域 hal_wifi_supplicant_default hal_wifi_supplicant_default
keystore2 权限检查 用 SELinux context(与 UID 无关) 用 SELinux context(与 UID 无关)
.te 规则是否生效 生效 生效

原因

  • SELinux 域由可执行文件类型决定(init_daemon_domain 宏),与 user 指令无关
  • keystore2 的 Domain::SELINUX 路径只检查 caller 的 SELinux context,不检查 UID
  • user root 只是调试阶段的保险措施,生产环境建议回退为 user wifi(更安全)

十、探索过程中的其他尝试

在定位到 SELinux 根因之前,曾尝试过以下方案,最终均非必要:

尝试方案 修改文件 结论
修改 wpa_supplicant 代码 tls_openssl.c ❌ 不需要,SELinux 修复后标准路径即可工作
修改 Framework 代码 SupplicantStaIfaceHalAidlImpl.java ❌ 不需要,SELinux 修复后 boringssl 标准路径即可工作
删除死代码 certificate_utils.cpp 代码清理有意义,但与 TLS 连接失败无关
修改 init.rc user root supplicant-service.rc 非必须,可作为调试辅助

十一、总结

项目 内容
问题根因 SELinux 策略缺失 manage_blob 等权限,wpa_supplicant 无法通过 keystore2 访问 wifi_key namespace 中的 TLS 私钥
错误码 ss_err=7 = PERMISSION_DENIED(SELinux 拒绝,不是密钥不存在)
修复文件 system/sepolicy/vendor/hal_wifi_supplicant_default.te(仅 1 个文件)
修复内容 补全 wifi_key:keystore2_key 全部权限 + setuid/setgid 能力
验证方法 Enforcing 模式下连接 EAP-TLS,日志出现 TLS: Using private key from engine/provider + CTRL-EVENT-CONNECTED
代码修改 不需要修改 wpa_supplicant 代码和 Framework 代码
init.rc 修改 非必须,user root 可作为调试辅助,生产建议回退 user wifi

一句话总结setenforce 0 能连说明是 SELinux 权限问题,ss_err=7 说明是 PermissionDenied 不是 KEY_NOT_FOUND,修改 hal_wifi_supplicant_default.te 补全 wifi_key:keystore2_key 权限即可解决,不需要改任何代码。

Android16 SELinux 关闭方式汇总:

一般默认值开启selinux的,也就是Enforcing 模式;

有些情况是可以通过命令关闭selinux验证,有些情况需要在内核关闭selinux验证;

因为有些系统服务在启动比较早,后期关闭selinux已经不管用了,所以需要修改源码或者在内核关闭selinu进行验证.

https://blog.csdn.net/wenzhi20102321/article/details/163783946

相关推荐
特立独行的猫a2 小时前
一切皆插件:DeepSeek Harness 的架构哲学,以及与主流 Agent 的对比
人工智能·架构·agent·deepseek·harness
电商API_180079052472 小时前
京东商品详情API技术文章
大数据·运维·人工智能·网络爬虫
fīɡЙtīиɡ ℡2 小时前
AI Agent 记忆系统
人工智能
Kapaseker2 小时前
破坏性更新 - 解读 Jetpack Compose 1.12
android·kotlin
雨白2 小时前
我的 UML 学习笔记:结合 Android 实例看懂 4 种常用图表
android·架构
企鹅的企3 小时前
2027北京AI数字健康与智慧医疗展官方:超两成展品亚洲首秀
人工智能·科技·机器人
怣疯knight3 小时前
快速判断apk有没有支持16kb页面标准
android
lvts_cs3 小时前
淄博高新区绿天使数智创新港:高标准产研厂房全维度详解
大数据·人工智能