安全運維必看:如何用 find -perm 檢查高危權(quán)限文件?
在日常的Linux系統(tǒng)管理工作中,經(jīng)常需要查找具有特定權(quán)限的文件。這時,我們可以用find命令的-perm選項來高效地完成這項任務(wù)。這個功能非常實用,特別是當(dāng)我們需要進行安全檢查的時候。本文會用淺顯易懂的方式,詳細介紹如何使用find命令的-perm選項,以及如何通過實際案例來掌握它的使用方法。
一、基本語法
find [查找路徑] -perm [權(quán)限模式]
知識點:
- 查找路徑:要搜索的目錄,. 代表當(dāng)前目錄。
- 權(quán)限模式:需要匹配的權(quán)限,可以是絕對模式(八進制)或符號模式(符號權(quán)限)。
在使用find命令時,-perm選項提供了三種不同的表達方式來幫助您根據(jù)文件權(quán)限進行搜索。
為了方便下面的演示,我準(zhǔn)備了一些文件。這些文件名與其權(quán)限呈對應(yīng)狀態(tài)。可以通過如下腳本創(chuàng)建。
#!/bin/bash
# 創(chuàng)建 perm 目錄
mkdir -p perm
# 定義文件名和權(quán)限的對應(yīng)關(guān)系
files=(
"000"
"001"
"002"
"004"
"005"
"006"
"007"
"010"
"020"
"040"
"050"
"060"
"070"
"100"
"200"
"400"
"440"
"500"
"600"
"644"
"666"
"700"
"755"
"777"
)
# 遍歷文件名列表
for file in "${files[@]}"; do
# 創(chuàng)建文件路徑
filename="perm/${file}.txt"
# 創(chuàng)建文件并寫入內(nèi)容
echo -e "$file" > "$filename"
# 設(shè)置文件權(quán)限為文件名中的權(quán)限值
chmod "$file" "$filename"
echo "Created file: $filename with permissions: $file"
done
echo "All files created successfully in the 'perm' directory!"
執(zhí)行上述腳本,會在指定的目錄下生成如下文件:
二、精確查找
在Linux文件權(quán)限中,每個權(quán)限由3組數(shù)字(用戶、組、其他)表示。如下圖所示:
知識點:
- 第一位數(shù)字7:表示文件所有者擁有讀寫 執(zhí)行(rwx) 權(quán)限.
- 第二位數(shù)字5:表示文件所屬組擁有讀執(zhí)行(r-x) 權(quán)限.
- 第三位數(shù)字5:表示文件其他組擁有讀執(zhí)行(r-x) 權(quán)限.
有了以上這些基礎(chǔ)知識后,下面通過幾個例子來鞏固一下:
查找權(quán)限精確匹配 644 的文件:
find . -perm 644
上述命令執(zhí)行后,會在當(dāng)前目錄匹配出是644權(quán)限的所有文件,如下圖所示:
三、模糊匹配
在模糊匹配情況下,有兩種寫法,一種是在權(quán)限加上-,另外一種是在權(quán)限加上/。
1. 所有匹配模式(-前綴)
這兩種模糊匹配有什么區(qū)別呢?下面通過例子來闡述:
find . -perm -111
執(zhí)行上述命令后,輸出如下結(jié)果:
通過觀察上述結(jié)果發(fā)現(xiàn)-perm -111匹配到兩個權(quán)限文件分別是755和777。這個-perm -111表示3個權(quán)限位必須至少有1。
2. 任意匹配模式(/前綴)
find . -perm /111
執(zhí)行上述命令輸出如下結(jié)果:
相比于使用“-”,采用“/”能夠匹配到更多的文件。這里的“/”類似于正則表達式中的“或”邏輯,這意味著在三個權(quán)限位中,只要有一個滿足了匹配條件,那么其他兩個權(quán)限位就不需要再考慮了。
四、結(jié)合-exec 進行批量操作
這個命令用于查找 /var/www 目錄下權(quán)限為 777 的文件或目錄,并將它們的權(quán)限修改為 755。
find /var/www -perm 777 -exec chmod 755 {} \;
知識點:
- {} 是一個占位符,表示 find 查找到的每個文件或目錄的路徑。
- ; 表示 -exec 命令的結(jié)束。