Android权限

Android 与Linux分别有自己一套严格权限机制

1.linux权限

只有体现到文件系统上才使用linux权限设置

-rwxr-x–x system system test.apk
用户-用户组-其他用户

1.1SUID和SGID、stick bit(粘贴位)

1.数字
chmod 0777 test.txt :表示没有设置SUID. SGID . sticky bit相关
chmod 4777 test     :表示设置了SUID    -rwsr-xr-x
2.字母
rwsrw-r-- 表示有setuid标志 (rwxrw-r--:rwsrw-r--)
rwxrwsrw- 表示有setgid标志 (rwxrwxrw-:rwxrwsrw-)
rwxrw-rwt 表示有sticky标志 (rwxrw-rwx:rwxrw-rwt)
  • SUID(4) :设置了该位可执行文件,被执行时,将以所有者的权限运行。如果所有者是 root 的话,那么执行人就有超级用户的特权了。-rws--x--x.
  • SGID(2):设置了该位可执行文件,运行时拥有该文件组的权限。如果是目录,被复制到这个目录下被设置和这个目录一样。除非加-p(perserve)参数。
  • stick bit(1):程序运行完在内存中有备份,也可以是目录。只有拥有者或root才能删除。

1.2设备权限

Android系统启动时候,内核引导参数上会这设置init=/init,此时内核挂载成功了这个系统,首先运行这个根目录下init程序。第一个用户进程。增加设备节点时,需要更改system/core/init/devices.c中文件,其中
static struct perms_ devperms[]={"/dev/tty",0666,AID_ROOT,AID_ROOT,0}

用户名相关id

static struct android_id_info android_ids[]={"root",AID_ROOT}

android_dirs

定义子目录属性
static struct fs_path_config android_dirs[]={00770,AID_SYSTEM,AID_CACHE,“cache”}

Android_files

定义了默认文件属性
static struct fs_path_config android_files[]={00555,AID_ROOT,AID_ROOT,"system/etc/ppp/ip-up"}

2.Android权限

2.1Android中apk签名

android系统有的权限是基于签名的:system等级权限有专门对应签名,签名不对,权限也获取不到。默认的apk是debug签名。

2.1.1apk签名的原理

a.消息摘要-Message Digest

摘要不是签名。

消息摘要就是再消息数据上执行一个单向hash函数,生成一个固定长度的hash值。这个hash值即消息摘要也称为数字指纹。消息摘要有以下特点:

  • 1.消息摘要无法推算出消息本身
  • 2.如果修改了了消息,那么摘要一定会变化。(长明文生成短摘要hash必然会产生碰撞)
    准确说:很难找到一种模式,修改了消息,但它摘要不会变化。
    消息摘要就是md5值,注意,消息摘要只能保证完整性,不能保证消息不可篡改性。
    md5/SHA-0 SHA-1:这些摘要生成算法,和签名无关。签名只是借助了摘要技术。
b.数字签名-signature

数字签名信息发送者用自己的私钥对消息摘要加密产生一个字符串。(改字符串是对发送信息真实性的证明)
数字签名过程:
1.发送者将私钥加密信息摘要的字符串和原文一起传送给接收者。

2.接收者只有用对应的公钥解密字符串得到信息摘要,然后与用原文的产生的信息摘要进行比对。如果相同信息,说明是完整的,传输过程没有被修改。
数字签名是非对称密钥加密技术、+数字摘要技术结合

c.数字证书-certificate

数字证书是一个经证书授权 中心数字签名的包含公开密钥拥有者信息,以及公开密钥的文件。
CERT.RSA包含一个数字签名和一个数字证书。
Android apk中CERT.RSA证书是自签名的,并不需要这个证书第三方权威机构认证的,
用户可以在本地机器自行生成这个自签名证书。

2.2基于UserID进程级别安全机制

Android每个APK分配唯一的linux userID(进程名:app_)。
Android提供一个机制:
AndroidManifest.xml中利用sharedUserId属性给不同package分配相同的userId,
这样可以当成一个程序,分配给两个程序相同UserID。但是安全,两个必须APK相同签名。

2.3AndroidManifest.xml

  • MODE_WORLD_READABLE、全局读写。现在版本可能不可了。

2.4提升用户权限

  • a.Android:shareUserId=”android.uid.system”
    android.mk中添加 LOCAL_CERTIFICATE:=platform#其实就是签名
    提升到system,但是root还是不能访问。
  • b.Runtime.getRuntime().exec(String command);
Runtime.getRuntime().exec("/system/xbin/su");
  • 由init启动的Service,来帮助Android应用程序执行root权限的命令或者实现一个虚拟设备,这个设备帮助Android应用程序执行root权限的命令。
  • uperuser.apk
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值