編輯:關於Android編程
我們首先來說一下傳統的Linux基於uid,gid的權限管理機制:
1、用戶的uid gid gids:
Ubuntu操作系統當前登陸的用戶是jltxgcy,那麼該用戶的uid為jltxgcy,gid也是jltxgcy,那麼gids怎麼查看呢?
答案是使用命令:cat /etc/group | grep jltxgcy。如下圖:
用戶的gids的名字為adm,dialout,cdrom,plugdev,lpadmin,admin,sambashare。此本分請參考linux用戶組、/etc/group文件及賬戶相關操作命令。
2、進程的uid gid gids:
shell進程uid,gid,gids都來源於用戶,也就是說,該用戶的進程的uid,gid,gids就是用戶的uid,gid,gids;
另外很重要的一點是進程中其實沒有uid,有的只有realUid和effectiveUid。
對於一般的進程來說realUid等於effectiveUid。在進程中真正有作用的effectiveUid。realUid象征著身份,effectiveUid象征著權力。
子進程realUid和effectiveUid都等於父進程的readUid。在shell中執行命令,其實就是fork出了shell進程的子進程。
文件操作時對進程是否有權限的識別的UID,即是指effectiveUid。ps命令輸出的UID是effectiveUid。
3、文件的uid gid:
對於/bin/cat來說文件uid為root,gid為root。說明只有effectiveUid為root的進程才可以對文件進行rwx,effectiveGid為root的進程可以對文件進行rx,effectiveUid為其他的進程只可以對文件x。
下面舉個例子把剛才講的內容串聯起來。
當前用戶為jltxgcy,所以當前進程(shell進程的子進程)的realUid等於effectiveUid都為jltxgcy。
然後執行命令cat test,如上面兩個圖,對於cat來說當前進程effectiveUid為jltxgcy對這個文件來說是可執行的,然後再看test,對於當前進程effectiveUid為jltxgcy來說是可讀的,所以我們能夠通過這個命令看到test裡面的內容,而不會出現Permission Deny。
我們接下來要分享的是setUid。首先我們把touch命令改成具有setUid權限的命令,如下圖:
然後使用touch命令來建立test1文件,我們看看有什麼不同,如下圖:
不同之處是,test的user是jltxgcy,而test1的user是root。
這是因為:當effectiveUid為jltxgcy的進程在執行touch時,由於touch命令的user有了setUid的權限,所以這個進程的effectiveUid被設置為了root,具有了“皇權”,但是realUid仍為jltxgcy。
由於子進程realUid和effectiveUid都等於父進程的readUid,所以它的子進程的realUid和effectiveUid都等於jltxgcy,未正身。
與之不同的su命令,su命令的user也具有setUid權限,su這個進程把自身的effectiveUid提升為root後,把realUid也提升為root。這樣它的子進程就是名正言順的root了,它的子進程的readUid和effectiveUid都為root了。
capability是比傳統的rwx權限管理更為細粒度的權限管理,比如當前進程在執行setUid提升自己的effectiveUid時,就會檢查effective capabilty sets是否允許setUid。
我們講了這麼多在Linux下的權限管理,那麼在Android下的權限管理是怎麼樣的呢?
用戶:在Android中用戶的概念已經被淡化,通常使用的是root用戶和shell用戶。
進程:shell用戶的進程effectiveUid為2000。為什麼?
使用busybox的命令whoami,當前用戶是的uid為2000,那麼2000對應哪個用戶呢?我們查看Android_filesystem_config.h的源碼:
#define AID_SHELL 2000 /* adb and debug shell user */所以當前用戶是shell用戶,並且shell進程的uid為2000。
當前進程,由於是shell進程的子進程,它的uid為2000,我們cc文件只有sdcard_r這個組才可以讀,那麼為什麼我們的進程可以讀這個文件呢?只有一種可能,那就是當前進程它的gids裡面包含了sdcard_r。
在Android中,shell是進程,命令執行時是shell的子進程,應用程序是進程。
這是應用程序的私有文件,這樣的權限機制就阻止了其他進程訪問,有效保障了安全。
最近一直在學習自定義控件,搜了許多大牛們Blog裡分享的小教程,也上GitHub找了一些類似的控件進行學習。發現讀起來都不太好懂,就想寫這麼一篇東西作為學習筆記吧。一、控
簡介這個輪子是對RecyclerView的封裝,主要完成了下拉刷新、上拉加載更多、RecyclerView頭部。在我的Material Design學習項目中使用到了項目
這篇文章主要介紹發送驗證碼和校驗驗證碼的功能,用到一個第三方平台Bmob,那Bmob是什麼呢?Bmob可以開發一個雲存儲的移動應用軟件,他提供了大量的標准的A
一、概述Handler 、 Looper 、Message 這三者都與Android異步消息處理線程相關的概念。那麼什麼叫異步消息處理線程呢?異步消息處理線程啟動後會進入