下面的例子运行在中兴android 5.0手机上。

当我们使用root权限的python去创建socket监听端口8088时,selinux向kmsg输出了下面的记录

python-android5 对 socket 的操作 create, setopt, bind, listen等都是denied不允许的,因为目标(target)需要权限在tcontext=u:r:init:s0,但是我们的python运行在root权限下,所以scontext=u:r:init:s0满足了tcontext,我们的操作被允许permissive=1,但不是selinux子系统所希望的,并记录在kmsg。

我们既然成功在8088端口上监听了,那么是否就等同于可以接收incoming连接呢,可能你会想到防火墙过滤,我们就看一下防火墙策略 (8088端口放开了)。

那么我们向上面打开的监听端口8088发起连接,会怎么样呢?结果失败了,请看kmsg输出。

防火墙netd以scontext=u:r:netd:s0,应该是想向端口8088的socket的backlog写入,但是无奈操作socket需要权限tcontext=u:r:init:s0,防火墙对listen的sokcet的操作 { read write }被selinux子系统拒绝 permissive=0,selinux向kmsg输出日志记录。防火墙不是运行在高权限下,即使你的程序提升到root权限了,也无能为力。换句话说,如果你的程序依赖了其它进程的服务,那么你所依赖的进程的selinux权限,也将制约着你的程序。这时只好关闭selinux,但是这样就比较不安全了。

关闭selinux后,我们再次向8088端口发起连接,结果成功了,看kmsg输出。

首先我们的python程序在root权限下创建了socket,同时没有权限的防火墙netd也随selinux子系统的关闭,对socket的操作被允许,这一切都是selinux子系统所不希望的,必须在kmsg记录下日志。后面就是正常的tcp建立连接三次握手,selinux同时也在kmsg记录下日志,日志输出如下。

又一例就是screencap,你在root权限下也不能截屏。

selinux却在kmsg输出记录。

解决就是关闭selinux,通过setenforce 或 /sys/fs/selinux。这样很不安全,另外就是使用supolicy修改个别政策。

最新文章

  1. Lintcode 102.带环链表
  2. Eclipse下配置javaweb项目快速部署到tomcat
  3. servlet学习笔记_3
  4. mysql查询语句中用户变量的使用
  5. 工作随笔——一次简单的Maven加速构建实战
  6. Mysql配置项的简单优化
  7. C++ 之 const 随笔记
  8. HDU 2676 Network Wars 01分数规划,最小割 难度:4
  9. mysql常用脚本
  10. POJ 2420 A Star not a Tree? (计算几何-费马点)
  11. 网络传入安全jwts
  12. JavaScript对象遍历
  13. linux把文件压缩成.tar.gz的命令
  14. A - Black Box 优先队列
  15. 博客系统实战——SprintBoot 集成Thymeleaf 实现用户增删查改(含源码)
  16. Kafka部署与代码实例(转)
  17. Object toString方法
  18. java 根据二叉树前序 ,中序求后续
  19. SQL2005,错误 0xc00470fe 数据流任务 产品级别对于 组件“源 - 2009_txt”(1) 而言不足
  20. 手动替换WORDPRESS的GOOGLE字体等加速【非插件】

热门文章

  1. ride.py打不开RF,而是打开pycharm
  2. 【Leetcode 做题学算法周刊】第一期
  3. 【译】Source Maps浅析
  4. 关于javascript闭包的最通俗易懂的理解
  5. 页面报错常用状态码总结(Http常见状态码)
  6. vue表单和组件使用
  7. fenby C语言 P23
  8. 设计模式C++描述----07.建造者(Builder)模式
  9. TypeError: expected string or bytes-like object
  10. 【XSY2344】K-th String