Android 進程和文件的UID/GID


一、文件的操作權限和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嗎

    答案是存在

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM