Andoid安全机制包括两个层次:系统层和应用层。应用层的安全机制建立在授权与申请基础上,本文不讲。系统层的安全机制包括给每个用户进程分配单独的 uid和gid,使用进程本身可以防止地址空间的共享,从而避免使用线程方式对数据的全局可见性。使用了uid则对于外存也加了封锁,当然这得感谢 UNIX的用户空间机制。系统层安全机制还包括对设备访问的控制,在这个方面,Android的做法与传统有所不同。
Android除了给予用户进程以单独的uid外,给系统服务也分配了固定的uid,诸如system/core/include/private/android_filesystem_config.h文件中定义了这些固定的uid:
#define AID_SYSTEM
1000
#define AID_RADIO 1001
#define AID_BLUETOOTH 1002
#define AID_GRAPHICS 1003
#define AID_INPUT 1004
#define AID_AUDIO 1005
#define AID_CAMERA 1006
#define AID_LOG 1007
传统的做法是,出了root,其它全是普通用户,两类用户的权限在内核里是规定死的,这也保证了UNIX内核的安全性。比如dev目录下的设备文件,一般 用户主是root,而且对其他用户不开放读写能力。用户使用设备一般通过系统调用如ioctl,而系统调用属于受信代码。
Android的问题是,引入的这些系统用户,实际上在权限方面是无法与普通uid区分的,如果系统用户能访问一个设备,那么一般用户也能。所以,Andoid没有别的选择,只能默认开启设备文件的全局读写。这在systemcore/init/device.c做 了定义:
{ “/dev/urandom”, 0666, AID_ROOT, AID_ROOT, 0 },
{ “/dev/ashmem”, 0666, AID_ROOT, AID_ROOT, 0 },
{ “/dev/binder”, 0666, AID_ROOT, AID_ROOT, 0 },
设备文件当然还是存放于/dev目录下,但dev目录的填充不是由udev做的,而是由Android的init进程做的。这个步骤由make_device函数完成,各个设备的权限来自于上述device.c文件的规定。
这种设备权限分配的潜在危险是,任何用户进程都可以操作设备,如果底层设备驱动有漏洞,那么整个系统的安全性就是存在风险的,而UNIX系统最大的安全隐患,正是来自于设备驱动。
分享到:
相关推荐
在移动设备上,笔记应用是不可或缺的一部分,而“Android--极简笔记App”正是这样一个基于Material Design设计规范的轻量级应用程序。这款应用利用了Android平台上的先进技术和最佳实践,如RxAndroid、MVP(Model-...
新版Android开发教程及笔记将涵盖Android系统的基本架构、应用程序生命周期管理以及UI设计等核心概念。 1. **Android系统架构**:Android系统分为应用层、应用框架层、系统运行库层和Linux内核层。开发者主要在应用...
### Android笔记- 从DEX档案格式看Dalvik的运作 #### DEX档案格式与Dalvik运作解析 在深入了解Dalvik虚拟机如何运作之前,我们首先需要理解DEX(Dalvik Executable)文件格式的重要性及其特点。DEX文件是Android...
5. **运行应用**:连接Android设备或者启动模拟器,点击顶部工具栏的运行按钮(绿色的三角形),Android Studio会自动编译项目并安装到设备上。运行后,你将在屏幕上看到TextView和Button。点击Button,你会看到一个...
本自学笔记将深入探讨Android的任务栈机制,以帮助开发者更好地理解和利用这一特性来优化用户体验。 一、任务与任务栈 在Android中,一个任务(Task)是一个应用程序执行的上下文,它可以包含多个活动(Activity)...
3. **云同步技术**:NONo-Android实现了云笔记的同步功能,可能采用了RESTful API与服务器进行交互,将用户数据加密后上传至云端,实现多设备间的无缝同步。 4. **数据管理**:本地数据存储可能利用SQLite数据库来...
本篇“Android学习笔记-- Notifying the User”将深入探讨如何有效地利用通知功能来提升用户体验。 首先,我们要理解Android的通知层次结构。在Android系统中,通知是通过`Notification`类来创建的。这个类包含各种...
Android开发是全球最受欢迎的移动应用开发平台之一,其开源特性使得开发者可以自由地创新和定制。这份"Android--开发--开发教程笔记完全版"涵盖了从基础到进阶的全面知识,旨在帮助初学者和有经验的开发者提升技能。...
开发者还会学习布局设计,使用XML来构建用户界面,并了解Android的生命周期管理。此外,可能会涉及到数据存储,如SQLite数据库的使用,以及SharedPreferences,用于保存轻量级的数据。 "Linux 6410"标签表明,这些...
SQLite是一个轻量级的数据库系统,适合在移动设备上进行数据管理。通过自定义`ContentProvider`,可以实现对数据库的操作,并且使得数据在不同应用间共享成为可能。 接着,用户界面(UI)设计是提升用户体验的关键...
1. **Android环境搭建**:首先,课程会介绍如何安装和配置Android Studio,这是Android开发的官方集成开发环境(IDE),以及如何设置SDK和AVD管理器,以便进行模拟器或物理设备的开发测试。 2. **Android基础知识**...
最后,Android笔记可能还包括对最新Android版本特性(如Material Design、 Jetpack库、AndroidX等)的介绍和应用,以及如何将应用适配不同屏幕尺寸和设备的技巧。 综上所述,"Android代码-android-note"这个压缩包...
在Android开发中,广播接收者(BroadcastReceiver)是Android四大组件之一,它是系统用来传递全局消息的一种机制。当你创建一个BroadcastReceiver,你可以监听系统或应用发送的广播,并在接收到广播时执行相应的处理...
【Android代码-mynote安卓笔记】是一个典型的Android应用程序开发项目,主要目的是实现一个简单的笔记应用。这个项目可能作为学习或教学用途,提醒我们这可能是某位学生的学校作业,因此涉及的内容将围绕Android应用...
虚拟设备用于在本地计算机上模拟Android设备,便于测试应用。选择合适的设备配置,如屏幕尺寸、分辨率、操作系统版本等,然后创建新的AVD。 7. **Hello, World!** 创建完项目后,Android Studio会自动生成一个简单...
这篇实验报告涵盖了构建一个云笔记应用的全过程,主要涉及了Android客户端、服务端以及MySQL数据库的集成使用。这个项目是一个典型的移动应用开发实践,对于学习Java和Android开发的学生来说,具有很高的参考价值。 ...
注意处理网络权限,遵循Android的权限管理机制。 8. **生命周期管理** Android组件(如Activity、Service)有各自的生命周期,理解并合理管理生命周期对于避免内存泄漏和提高应用性能至关重要。例如,使用...
本教程针对“新版Android开发教程+笔记--基础UI编程”这一主题,旨在帮助开发者掌握Android系统中的基本用户界面元素及其编程技巧。 首先,我们要理解Android UI的基本架构。Android使用布局(Layout)来组织和定位...