前言:
今天发现很诡异的问题,之前一直是可读的,忽然发现权限被拒绝。
LOG(ERROR) << "读取文件内容 "<<FileUtils::getFileText((char *)"/sys/class/net/eth0/address",20);
std::string FileUtils::getFileText(char *path,int BuffSize) {
char buffer[BuffSize];
memset(buffer, 0, BuffSize);
std::string str;
//int fd = open(path, O_RDONLY );
long fd = syscall(__NR_open, path, O_RDONLY);
LOG(ERROR) << "open 内容 "<<fd;
if(fd==-1){
LOG(ERROR) << "读文件出错,错误原因 " << strerror(errno);
return "";
}
//失败 -1;成功:>0 读出的字节数 =0文件读完了
while (syscall(__NR_read,fd, buffer, 1) != 0) {
str.append(buffer);
}
syscall(__NR_close,fd);
return str;
}
之前运行一直没问题,忽然发现读取系统内核文件读不了了,之前是可以的,用文件管理器查看文件是444
都是可读的,open函数一直返回 -1 失败。
细看日志发现一条异样:
type=1400 audit(0.0:127783): avc: denied { search } for name="net" dev="sysfs" ino=46905 scontext=u:r:untrusted_app:s0:c189,c258,c512,c768 tcontext=u:object_r:sysfs_net:s0 tclass=dir permissive=0
在讲之前需要详细介绍一下SELinux相关的知识,防止别人采坑。
之前也是知道一些SELinux的一些基础,但是也一直没深入研究和Liunx的区别。
今天有时间做个记录
什么是SELinux?
安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是 Linux 的一个安全子系统。SELinux 主要作用是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。对资源的访问控制分为两类: DAC和MAC ,我们用的安卓底层的Linux就是这它。
linux传统设备文件访问控制方法
传统的 Linux设备文件访问控制机制通过设置用户权限来实现.
- 超级用户(root),具有最高的系统权限,UID为0。
- 系统伪用户,Linux操作系统出于系统管理的需要,但又不愿赋予超级用户的权限,需要将某些关键系统应用文件所有权赋予某些系统伪用户,其UID范围为1~ 499,系统的伪用户不能登录系统。
- 普通用户,只具备有限的访问权限,UID 为 500 ~ 6000,可以登录系统获得shell。在Linux权限模型下,每个文件属于一个用户和一个组,由UID与GID标识其所有权。针对于文件的具体访问权限定义为可读(r)、可写(w)与可执行(x),并由三组读、写、执行组成的权限三元组来描述相关权限。
第一组定义文件所有者(用户)的权限,第二组定义同组用户(GID相同但UID不同的用户)的权限,第三组定义其他用户的权限(GID与UID都不同的用户)。
Linux工作模式:
SELinux 有三种工作模式,分别为:
enforcing: 强制模式, 执行SELinux规则, 违反的行为会被阻止
permissive: 宽容模式, 执行SELinux规则, 违反的行不会被阻止
disabled: 关闭SELinux
SEAndroid app分类
SELinux(或SEAndroid)将app划分为主要三种类型(根据user不同,也有其他的domain类型):
1)untrusted_app 第三方app,没有Android平台签名,没有system权限
2)platform_app 有Android平台签名,没有system权限
3)system_app 有android平台签名和system权限
从上面划分,权限等级,理论上:untrusted_app < platform_app < system_app
我们看一下我们的刚刚的日志
标志性 log: avc: denied { 操作权限 } for pid=7201 comm=“进程名” scontext=u:r:源类型:s0 tcontext=u:r:目标类型:s0 tclass=访问类型 permissive=0
源类型:授予访问的类型,通常是进程的域类型
目标类型:客体的类型,它被授权可以访问的类型
访问类型:客体的类可
操作权限:表示主体对客体访问时允许的操作类型(也叫做访问向量)。
我们刚刚的错误日志是,我们分解详细看看:
avc: denied { search } for 缺少search权限
name="net"
dev="sysfs"
ino=46905
scontext=u:r:untrusted_app:s0:c189,c258,c512,c768 未签名的App
tcontext=u:object_r:sysfs_net:s0 哪个te文件缺少权限
tclass=dir 什么类型的文件the object class of the target
permissive=0 permissive (1 宽容模式) or enforcing (0 强制模式)
没有签名的App 没有search 权限访问dir文件目录。
我们将 SELinux 安全关掉
setenforce 0
完美解决。
参考:
https://blog.csdn.net/su749520/article/details/80284543
https://www.zybuluo.com/guhuizaifeiyang/note/772144
安卓逆向百级教程+全网最新js逆向视频+永久小蜜圈+永久售后群=1299
视频下载网盘
�http://nas.alienhe.cn:5008/home.html�
下载视频账号密码:
账号guest 密码world
Js试看:
http://oss.alienhe.cn/JS%E9%80%86%E5%90%91%E5%85%A5%E9%97%A8-%E5%B8%A6%E6%B0%B4%E5%8D%B0.mp4
网友评论