標籤:
前言
之所以會說到這幾個特殊許可權,是因為fastboot這個命令好像有點抽風,給人的感覺就是有時能用有時不能用,執行fastboot devices的錯誤提示:
no permissions
為了找到問題的原因,就思考了一下。
這種問題一般主要發生在以下2種情境下:
1、複製並使用了新的fastboot可執行檔
2、改變了fastboot可執行檔的環境變數
為什麼以上2種情境會產生這樣的錯誤?
which fastbootll fastboot
執行這兩條命令之後就可見端倪,原來由於複製或者使用了別人複製的fastboot,導致fastboot所屬的使用者和群組發生了改變,從而讓SUID和SGID失效,因為原來fastboot所屬的使用者和群組都是root。
接下來我們就簡單說瞭解一下SUID和SGID的失效導致no permissions背後的知識點。
SUID
Set UID,它會出現在檔案擁有者許可權的執行位上,只對二進位程式有效,執行者對於程式需要有x許可權,在程式運行過程中,執行者擁有程式擁有者的許可權。
例如:普通使用者執行fastboot和passwd命令。
這裡再多說一句,很多Android上的root工具就是通過一些漏洞(比如緩衝區溢位等)來攻擊一些帶有SUID或SGID許可權,並且所屬的使用者或使用者組是root的二進位程式來臨時擷取root許可權,然後執行一段事先編譯好的惡意目標平台代碼來達到root的目的。
SGID
Set GID,它出現在檔案所屬組許可權的執行位上面,對於檔案和目錄都有效,具體作用如下:
1、對於檔案
對於二進位程式有用,程式執行者要有x許可權,執行者在執行過程中會獲得該程式使用者組的許可權(相當於臨時加入了程式的使用者組)
2、對於目錄
使用者對此目錄有rx許可權可以進入目錄,使用者進入此目錄後,有效使用者組會變成該目錄的使用者組,若使用者在此目錄有wx許可權,則使用者建立的檔案的使用者組與該目錄使用者組相同。
SBITSticky BIT,它出現在其他使用者權限的執行位上,
只對目錄有效,當使用者對目錄擁有wx許可權時,使用者在該目錄建立的檔案或目錄,只有使用者自己和root才可以刪除。
一個小問題背後也會隱藏一些比較重要的知識點,善於發現和總結,總能有一些收穫。
最後,將此問題記錄下來,希望能夠幫到後續遇到類似問題的同學。
由Android的fastboot no permissions而引出的Linux特殊許可權管理之:SUID、SGID、SBIT