ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

既然提示 `denied`(拒绝),为什么刚才的 `echo` 命令还能成功发出去?

既然提示 `denied`(拒绝),为什么刚才的 `echo` 命令还能成功发出去? 是的一点没错这个avc: denied正是你刚才敲的echo 12345 /dev/ttyGS2这条命令搞出来的这是 Android 系统的SELinux安全增强型 Linux安全子系统打印出来的审计日志。我们可以像侦探一样把这条日志拆开来给你看每一项都对应着你刚才的操作 日志逐字拆解[ 2477.536845] type1400 audit(...): avc: denied { write } for commsh namettyGS2 ... scontextu:r:shell:s0 tcontextu:object_r:ttyGS_device:s0 tclasschr_file permissive1commsh——这就是罪魁祸首comm代表触发者进程的名字。你在 SSH 终端里敲命令执行命令的解释器就是sh(Shell)。path/dev/ttyGS2和namettyGS2—— 目标文件。说明sh尝试去打开并写入/dev/ttyGS2这个节点对应你的 /dev/ttyGS2重定向操作。scontextu:r:shell:s0—— 发起者的身份Source Context。你通过 SSH 登录进来Android 系统给你的权限身份是shell域。tcontextu:object_r:ttyGS_device:s0—— 目标的身份Target Context。串口节点/dev/ttyGS2在系统里的安全标签是ttyGS_device。denied { open } { write }—— SELinux 的安全规则说“按规矩shell域的程序是没有权限去 open打开和 write写入ttyGS_device串口设备的”❓ 既然提示denied拒绝为什么刚才的echo命令还能成功发出去答案藏在日志的最末尾permissive1Enforcing Mode强制模式如果系统开启了强制拦截收到denied时你的echo命令会直接报错Permission denied数据发不出去。Permissive Mode宽容/调试模式即你现在的状态SELinux 像一个只记账不干预的保安。虽然规则上写着“不准写”但他只是在日志里记下一笔avc: denied实际上放行了你的操作所以你的数据12345依然成功写入到了串口里这条日志只是系统顺便打印的一个警告而已完全不用担心对测试没有任何影响
返回列表