我一直在嘗試使用“oneliner”來尋找setuid可執行檔。
我首先嘗試的線路是:
find / -perm /u+s -type f
然後我發現一行類似但給了不同的結果:
find / -perm /6000 -type f
據我所知,這些看起來是相同的,但第一個顯示的結果沒有第二個那麼多(大多數都缺少奇怪的組)。為什麼,有什麼不同?
答案1
大多數人不知道,Unix 權限實際上不僅僅是使用者、群組和其他 (rwx)。這 3 個三元組是允許使用者、群組和其他使用者存取檔案和目錄的典型權限。然而,還有一組位於使用者位之前的位。這些位元被稱為“特殊模式”。
它更多的是一種速記符號,您在處理諸如chmod
.
$ chmod 644
實際上相當於:
$ chmod 0644
這是位元列表:
摘錄維基百科文章標題為:chmod
Flag Octal value Purpose
---- ----------- -------
S_ISUID 04000 Set user ID on execution
S_ISGID 02000 Set group ID on execution
S_ISVTX 01000 Sticky bit
S_IRUSR, S_IREAD 00400 Read by owner
S_IWUSR, S_IWRITE 00200 Write by owner
S_IXUSR, S_IEXEC 00100 Execute/search by owner
S_IRGRP 00040 Read by group
S_IWGRP 00020 Write by group
S_IXGRP 00010 Execute/search by group
S_IROTH 00004 Read by others
S_IWOTH 00002 Write by others
S_IXOTH 00001 Execute/search by others
你的問題
因此,在您要查找的第一個命令中u+s
,結果將是 bit 04000
。當您使用數字符號時,您需要的是位04000
和 02000
。這將為您提供設定了使用者或群組 setuid 位元的檔案。
進一步閱讀
我強烈建議任何想要更好地了解 Unix 權限的人閱讀維基百科頁面關於chmod
。它非常簡單地將其分解,並且在您忘記時是一個很好的參考。
參考
答案2
模式6000
是u+s,g+s
,而不僅僅是u+s
(那就是4000
)。
find / -perm /u+s
或find / -perm /4000
只找設定了 setuid 位元的檔案。find / -perm /u+s
或find / -perm /6000
尋找設定了 setuid 位元或 setgid 位元的檔案。