Linux命令find -perm使用方法

花了點時間纔將linux中find命令的-perm參數弄懂,分享一下。


find -perm,根據文件的權限來查找文件,有三種形式: 
find -perm mode 
find -perm -mode 
find -perm +mode 
那麼這三者之間有什麼區別呢?解釋之前首先得簡單說一下linux中文件權限位的概念。在linux中文件或目錄有三者權限r,w,x,代表的含義分別是讀、寫、可執行。而一個文件或目錄的屬性中又包括所屬用戶u、所屬組g、其他o三個部分的屬性,分別表示所屬用戶、所屬組、其他用戶對這個文件所擁有的權限。看起來大概是這個樣子: 
 所屬用戶   所屬組    其他 
   rwx       rwx      rwx 
用戶在其擁有權限的位上設置1,沒有權限的位設置0。如果將每個部分的這些權限位看成二進制數,每個部分可以用3位二進制數表示,最大值爲7(2^3-1),表示可讀、可寫、可執行。嚴格的來說,文件權限除了r、w、x以外還有setuid,setgid權限,等下再解釋。 

好了,有了權限位的基礎,那麼再來看find -perm mode。mode是三個數字表示的,每個數字最大值是7(原因前面解釋過了)。 
find -perm mode , 表示嚴格匹配,也就是你的文件權限位轉換成對應的十進制數字與mode一模一樣,那麼匹配成功,需要注意的是如果mode給的數字不足3位,那麼前面自動添0(嚴格的說是不足4位,原因就是前面所說的setuid,setgid,稍後解釋) 

find -perm -mode , 表示mode中轉換成二進制的1在文件權限位裏面必須匹配,比如mode=644那麼轉換成二進制爲110 100 100,而被查找的文件的權限位也可以被轉換成一個二進制數,兩者在位上爲1的部分必須完全匹配,而0則不管。例如被查找的文件的權限爲轉換成二進制數是111 111 111那麼這個比如被匹配,而假如是100 100 100那麼則不會匹配。所以這個'-'的作用歸結起來就是匹配比mode權限更充足的文件(找不到什麼詞語來形容了) 

find -perm +mode , 與 -mode的區別是+mode只需其中的任意一個1的部分被匹配,-mode是所有1的部分都必須被匹配,同樣+mode也不管0位。 

現在來解釋setuid,setgid,setuid權限是用來使其他用戶可以“越權”執行你的命令,而本質上的實現就是在權限檢查的時候,在進程的的有效UID裏面保存了這個其他用戶的UID,所以權限得意驗證通過(在這裏的 註釋1裏面很簡單的介紹了一下),這些權限用一個新的3位二進制數表示,有4,2,1三種值,4表示有setuid權限,2表示有setgid權限,1表示有粘着位(t)權限(粘着位權限最典型的例子是/tmp,每個用戶可以在裏面創建、更新、刪除自己創建(文件所屬用戶是自己)的文件,而不能更改別人的文件)。 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章