一、文件的操作权限和UID,GID以及进程的UID,GID

1. 文件资源的权限力度:UID/GID

2. 文件的可操作权限

3. 进程的标识: PID, UID, GID, GIDs

二、UID,GID的Name 和ID的映射关系以及Chmod/chown命令

1. Name 跟 ID的映射

2. Chmod和chown命令介绍

3. UID/GID的衔接

三、进程的RealUID和EffectiveUID 以及进程UID的继承关系

1. 身份的标识: Real UID

2. 权利的标识: Effective UID

3. 身份和权利的关系

4. ROOT 用户的特权

5. UID的世袭

四、文件的setUID -- 文件的setUID标志以及其作用。

1. 平民身份,皇族特权  需求及解决

2. Linux的文件的setUID的标识

3. chmod设置setUID的方式

4. setUID的安全方式

5. 有RealGID, EffectiveGID, setGID吗

---------------------------------------------------------

一、文件的操作权限和UID,GID以及进程的UID,GID

1. 文件资源的权限力度:UID/GID

* 文件是一类资源

* 在Linux中,一切皆是文件,Socket, Driver

  * 文件资源对不同的Target(用户)的 不同操作权限的需求

* 如何描述和区分不同的Target? ID -> UID 惟一

* 某些场景,允许多个不同的Target(用户) 具有一致的操作权限, 用GID(Group ID)。多个用户合一属于一个GID,一个用户合一属于多个GID

* 文件权限管理: UID(文件的owner),GID, 其他用户

* 上帝用户: ROOT, 他的UID = 0; 上帝用户永远属于任何UID

2. 文件的可操作权限

ls -l 或者 ll

d rwx r-x r-x   UID  GID

d: 是文件夹

rwx: 文件所属UID1 具有的权限

r-x:    文件所属GID,但不是所属UID1,的UID2具有的权限 <=> UID1属于GID, UID2也属于GID

r-x:  既不是文件所属GID, 也不是文件所属UID1,的 其他 UID3具有的权限。<=>  UID3不属于GID

3. 进程的标识: PID, UID, GID, GIDs

PID:  进程的Unique Identity(惟一标识)。 每次Running的PID可能相同,或者不同,由系统分配

UID:  进程的身份标识。每次运行,即便重启后默认都相同。 不同的进程允许有相同的UID(用户身份标识)

GID: 进程的组身份标识。每次运行,即便重启后默认都相同。不同进程允许有相同的GID(组用户身份标识)。同一个进程允许属于多个GID

GIDs: 进程所属的全部GID

二、UID,GID的Name 和ID的映射关系以及Chmod/chown命令

1. Name 跟 ID的映射

userId: 10064

gids: 3003,1006,1015,1023,1028

不同的系统不同,我们这里讨论Android -- android_filesystem_config.h

更多请查看:http://aijiawang-126-com.iteye.com/blog/1046964

上下两张图的映射,就是Name 跟ID(UID, GID) 的映射

普通的apk运行的时候

2. Chmod和chown命令介绍

文件的 R/W/X 在系统内部用 3bit表示。 R是最高位,置位为 0x04; W为中间比特,0x02; X为最低比特,置位为0x01

Shell中表示是,置位使用相应的RWX, 为置位使用-

2.1 改变文件面向群体的操作权限是,使用chmod, 可以用数字, 也可用助记符

(a:all, u: owner user, g: group, +:添加权限, -: 移除权限)

举例:

2.2 chown用于修改文件的UID 和 GID

* Shell命令中常用Name的方式修改,而不是ID方式

* 一般格式: chown newUID : newGID FileName

3. UID/GID的衔接

* 文件基于UID /GID 划分面向群体, 不同的群体 定义不同的权限

* 用户的行为映射为进程的运行

* 进程用UID/GID来标识自己的身份

* 进程的UID和GID和文件的UID/GID 完美衔接

* reboot 这个api 在入口 调用时,可以check UID是不是root,如果不是则reject

三、进程的RealUID和EffectiveUID 以及进程UID的继承关系

1. 身份的标识: Real UID

* 进程的UID只是泛称, 其实有很多种UID

* 进程的 Real UID 是进程身份的标识, 用来说明Who am I, 没有实权

* 进程能做什么 不是有 RealUID来决定的

2. 权利的标识: Effective UID

* 有身份无权利是不行的, 有权利才能为所欲为

* Effective UID 是进程的权利的标识, 标识了该进程的“权利”

* Linux的授权 是 靠 Effective UID 来识别的

* 有权利就能做一切

* 之前说明的,文件、资源以及特权API操作权限 是 通过 Effective UID来识别的

3. 身份和权利的关系

* 默认情况下 Real UID == Effective UID, 所以使用ps命令输出的 就是 Effective UID

* 我们也可以显示完整的 Effective UID 和Real UID

4. ROOT 用户的特权

* Root 用户, 均是指 Effective UID == ROOT的进程

* 不受任何限制,可以为所欲为

* ROOT进程可以调用setUID 修改自己的Real UID,它也可以把自己的Effective UID改为普通的UID

5. UID的世袭

* 在Linux世界里,为了安全考虑,UID世袭规则: 身份可以世袭,权利不能世袭

* 子进程的 Real UID = Effective UID,  继承 父进程的Real UID

若父进程的Effective UID 与 Real UID 不一样,则不具有父进程的权利

四、文件的setUID -- 文件的setUID标志以及其作用。

1. 平民身份,皇族特权(ROOT权限)  需求及解决

1.1  需求:

* Linux的passwd是一个可执行程序, 用于修改用户的密码

* passwd需要修改多用户的账号文件(该文件仅能ROOT用户可以读写)

* 但是 普通用户 也要修改自己的密码

* passwd虽然 是平民身份(由普通用户启动),但是却需要皇族的权限  ---- 身份 和 权利不同

1.2 解决:

* 临时替身进程的Effective UID, 而维持身份不变(Real UID), 让他能够利用特权,而又不传给子进程

2. Linux的文件的setUID的标志

文件的Owner UID设置为特权用户(如ROOT)

文件面向 Owner UID的群体和操作权限 增加额外的setUID标志

Linux系统保证,任何用户(进程)执行该文件时(Fork一个新的进程来加载该可执行文件),子进程的Real UID仍然继承起父进程的RealUID, Effective UID 却被提升 到特权UID

setUID的前提是可执行文件,其他文件不能setUID

rws,用s替代了x;而且s包含了x

3. chmod设置setUID的方式

chmod 4775 test.txt    4就是特殊的设置方法

chmod 0775 test.txt    0可以清楚该标志

chmod u+s test.txt 也具有相同的效果

chmod u-s test.txt

4. setUID的安全问题

setUID的进程的EUID提升了, RUID没有提升

但是如果该进程为自己正身(将自己的RUID改成了和EUID一样的)了, 它的所有子进程都具有了该特殊权限

passwd没有正身

Android将自己的su 正身了

5. 有RealGID, EffectiveGID, setGID吗

答案是存在

Android 进程和文件的UID/GID的更多相关文章

  1. Android 的 so 文件加载机制

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 最近碰到一些 so 文件问题,顺便将相关知识点梳理一下. 提问 本文的结论是跟着 System.loadlibrary() 一层层源 ...

  2. 理解Android进程创建流程(转)

    /frameworks/base/core/java/com/android/internal/os/ - ZygoteInit.java - ZygoteConnection.java - Runt ...

  3. [转]Android进程与线程基本知识

    转自:http://www.cnblogs.com/hanyonglu/archive/2012/04/12/2443262.html 本文介绍Android平台中进程与线程的基本知识. 很早的时候就 ...

  4. Android进程永生技术终极揭秘:进程被杀底层原理、APP应对技巧

    1.引言 上个月在知乎上发表的由“袁辉辉”分享的关于TIM进程永生方面的文章(即时通讯网重新整理后的标题是:<史上最强Android保活思路:深入剖析腾讯TIM的进程永生技术>),短时间内 ...

  5. 【系统之音】Android进程的创建及启动简述

    Android系统中的进程(这里不包括init等底层的进程)都是通过Zygote fork而来的,那这些进程的启动流程都是怎样的呢? 这里将Android进程分为两个部分: (1)系统框架进程Syst ...

  6. Android so库文件的区节section修复代码分析

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78818917 一.Android so库文件的节表secion修复方案整理 1.简 ...

  7. 【腾讯Bugly干货分享】Android进程保活招式大全

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ac4a0ea374c75371c08ce8 作者:腾讯——张兴华 目前市面上 ...

  8. Android进程整理

    一.概括 系统启动架构图: 上图在Android系统-开篇中有讲解,是从Android系统启动的角度来分析,本文是从进程/线程的视角来分析该问题. 1.1 父进程 在所有进程中,以父进程的姿态存在的进 ...

  9. Android 进程常驻----native保活5.0以上方案推演过程以及代码

    正文: 上一篇我们通过父子进程间建立双管道,来监听进程死掉,经过测试,无耗电问题,无内存消耗问题,可以在设置中force close下成功拉起,也可以在获取到root权限的360/cleanmaste ...

随机推荐

  1. PAT 1076. Forwards on Weibo (30)

    Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and may ...

  2. 是否以某字符串结尾 是否以某字符串开始 是否是整数 裁减字符串空格 是否是浮点数 是否所有字符为数字类型 是否为空 是否是EMAIL 是否是电话号码 身份证号码验证-支持新的带x身份证 日期验证

    /* 1.是否以某字符串结尾 endsWith(theStr,endStr) @param theStr:要判断的字符串 @param endStr:以此字符串结尾 @return boolean; ...

  3. Java经典封装JDBC模板(充分体现面向对象思想)(转)

    程序清单一览 bean类 package com.software.usermanager.bean; public class Users { private String id; private ...

  4. hadoop错误java.io.IOException Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try

    错误: java.io.IOException: Failed to replace a bad datanode on the existing pipeline due to no more go ...

  5. Zookeeper3.4.6部署伪分布集群(Apache)

    1.下载Zookeeper http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/ 2.创建/usr/app/zookeeper目录,并切换 ...

  6. iOS 9 关键字的简单使用

    前言: 在iOS 9 苹果推出了很多关键字, 目的其实很明确, 主要就是提高开发人员的效率, 有益于程序员之间的沟通与交流, 在开发中代码更加规范! 1. nullable 与 nonnull nul ...

  7. 使用JAXB来实现Java合xml之间的转换

    使用jaxb操作Java与xml之间的转换非常简单,看个例子就明白了. //javaBean-->xml @Test public void test1() { try { JAXBContex ...

  8. HttpModule,HttpHandler,HttpHandlerFactory

    HttpModule:Http模块,可以在页面处理前后.应用程序初始化.出错等时候加入自己的事件处理程序. HttpHandler:Http处理程序,处理页面请求 HttpHandlerFactory ...

  9. readonly时禁用删除键,readonly按删除键后页面后退解决方案

    readonly时禁用删除键, readonly按删除键后页面后退解决方案 >>>>>>>>>>>>>>>&g ...

  10. WPF 格式化输出- IValueConverter接口的使用

    以前在用ASP.NET 做B/S系统时,可以方便地在GRIDVIEW DATAList等数据控件中,使用自定义的代码逻辑,比如 使用 <%# GetBalance(custID) %> 这 ...