如果能輕鬆處理工作的話,誰希望使用麻煩的方法?安全性的設定不是看一下資料夾的安全性設定即可,幹嘛要用到指令?首先,我們都知道 NTFS 的權限具有 "繼承" 的概念,父系目錄的 ACL 設定會影響到子目錄的 ACL,所以一般來說都只會看父系目錄的 ACL 設定。但 NTFS 安全性中有一個選項是可讓子目錄與檔案不繼承父系設定,移除繼承後該資料夾就變成獨立設置的權限了...
今天下午上班時,朋友突然急發 MSN,提到之前的廠商因為貪圖方便,將網站與其他 LAN 裡面的檔案資料夾安全性都設定為 "Everyone" 可 "完全控制",其中包括了機密的設計圖檔案...等。 “Everyone” 可完全控制的狀況下造成的安全漏洞可想而知,隨便一個有一點底子的惡意人士都可輕易的將檔案複製或刪除,惡搞一點還可以來個竄改。
這時 Will 過來,跟他討論到此事,聊著聊著突然提到一個自 Windows 2000 就存在的古老指令工具: Cacls.exe。聽到之後突然愣了一下,此工具真的好久沒用了,想當初還用得很熟的說...可以說是一個簡單好用的稽核工具啊~!在今天突然又回憶起這位老朋友的時候,當下就先在 Windows 2008 試試看還在不在。恩恩~老朋友還在~而且還有一個更新版本的:ICacls.exe,中間測試的過程發覺功能與語法差不多,但 ICacls.exe 在權限繼承控制方面似乎稍強了些~不過這些不是本文的重點~在此先掠過~
為何不用 GUI 介面瀏覽安全性 ACL 即可
如果能輕鬆處理工作的話,誰希望使用麻煩的方法?安全性的設定不是看一下資料夾的安全性設定即可,幹嘛要用到指令?首先,我們都知道 NTFS 的權限具有 "繼承" 的概念,父系目錄的 ACL 設定會影響到子目錄的 ACL,所以一般來說都只會看父系目錄的 ACL 設定。但 NTFS 安全性中有一個選項是可讓子目錄與檔案不繼承父系設定,移除繼承後該資料夾就變成獨立設置的權限了。
資料夾少可用人工稽核一個目錄一個目錄的看,如果是 100 個資料夾以上,深度又達 8 層的目錄結構我想會讓人瘋掉吧 ,所以輕鬆的使用一行指令就可將資料夾與檔案的權限 LIST 出來,再根據 LIST 中的列表快速設定好適當的權限絕對比 "人肉設定" 快多了~
使用 Cacls.exe 找出權限設置達危險程度的區域
- 在這裡 TigerLin 先建立一個測試資料夾名為 [TTT],使用預設的權限繼承;而在其中的子目錄 [Everyone] 則是不使用繼承權限並指設定讓 Everyone 有完全控制的權限,TTT 與 Everyone 中各有五個文字檔案。
- 接下來,使用 /T 參數對 D:\TTT 這個資料夾進行 ACL 的列出清單
cacls d:\TTT /t
如果想將結果輸出到文字檔以供查閱可以使用以下指令 --
cacls d:\TTT /t > D:\ACLCheck.txt
P.S 參數說明 /t 是變更其目錄與子目錄的 ACL 權限,但因為這裡沒有指定是 /G (Grant) 或是 /R (Revoke),所以只有將 ACL 列出的效果
- 這裡可以看到,每個檔案都會有 ACL 的存取清單,中間抓出兩個差異較大的如下 --
d:\TTT\TTT (5).txt BUILTIN\Administrators:(ID)F
NT AUTHORITY\SYSTEM:(ID)F
BUILTIN\Users:(ID)R
Everyone:(ID)R
d:\TTT\Everyone\Everyone-FullControl (1).txt Everyone:(ID)F
BUILTIN\Users:(ID)R
其中的 F 代表完全控制,R代表讀取,可以看到 d:\TTT\Everyone\Everyone-FullControl (1).txt 有 Everyone 完全控制的權限,這樣很危險!!
- 那要如何在龐大的目錄中過濾只有 Everyone 完全控制權限的資料夾位置?這時候別忘了更老的朋友 – Findstr 的啦~
Findstr 可媲美 Linux 下的 grep,多加利用可以擷取很多重要的資訊。
要過濾 [只有 Everyone 擁有完全控制權限] 的檔案與資料夾時,我們可以這樣下指令 --
cacls d:\TTT /t | findstr /i everyone:.*F
其中的 ".*" 代表萬用字元,/i 為忽略大小寫 - 出現的結果如下, Cacls 與 findstr 已經成功將危險的目錄與檔案抓出來了!!!!
C:\>cacls d:\TTT /t | findstr /i everyone:.*F
d:\TTT\Everyone Everyone:(OI)(CI)F
d:\TTT\Everyone\Everyone-FullControl (1).txt Everyone:(ID)F
d:\TTT\Everyone\Everyone-FullControl (2).txt Everyone:(ID)F
d:\TTT\Everyone\Everyone-FullControl (3).txt Everyone:(ID)F
d:\TTT\Everyone\Everyone-FullControl (4).txt Everyone:(ID)F
d:\TTT\Everyone\Everyone-FullControl (5).txt Everyone:(ID)F
參考資料
Cacls http://technet.microsoft.com/en-us/library/bb490872.aspx
Findstr http://technet.microsoft.com/en-us/library/bb490907.aspx