在我的環境,我有涉及在多個文件服務器上運行NTFS ACL的審計報告和各種ACL清理活動的幾個項目。還有爲什麼我不能在服務器上本地執行這些活動主要有兩個原因:是否有一個API僅在特定文件夾上設置NTFS ACL而沒有關閉權限?
1)我沒有對服務器本地訪問,因爲他們實際上是擁有和由另一家公司管理。
2)它們是SNAP NAS servers,它們運行經過修改的Linux操作系統(稱爲GuardianOS),所以即使我可以獲得本地訪問權限,我也不確定是否有可用的工具來執行我需要的操作。
因爲這樣,我最終推出了自己的ACL審計報告工具,該工具將從指定的頂級路徑開始緩存文件系統,並且會對所遇到的所有組/用戶吐出HTML報告在ACL上以及在樹下降時顯示權限更改。在開發這個工具時,我發現網絡開銷是做這些操作最糟糕的部分,並且通過多線程處理,我可以實現更高的性能。
不過,我還是堅持尋找執行的ACL修改和清理的好工具。您的標準開箱即用工具(cacls,xcacls,Explorer)似乎是單線程的,並且在通過網絡時會受到顯着的性能損失。我看我自己的滾動ACL設置程序,它是多線程的,但我熟悉的只有API是.NET FileSystemAccessRule的東西,問題是,如果我在一個文件夾的權限設置,它會自動要「流」權限下降。這導致了一個問題,因爲我想使用多線程來「流動」自己。
我知道NTFS「允許」繼承的權限是不一致的,因爲我已經看到它將文件夾/文件移動到具有不同繼承權限的兩個父文件夾之間的同一捲上,並且它將舊權限保留爲「繼承」 。
的問題
1)是否有一種方法來設置適用於當前文件夾和所有的孩子(你的標準「適用於文件,文件夾和子文件夾」 ACL),但沒有它的ACL自動流向子對象?基本上,我希望能夠告訴Windows,「是的,這個ACL應該被應用到子對象上,但現在只需將它直接設置在這個對象上」。
爲了清楚起見,我知道應用於「僅此文件夾」的ACL選項,但隨後失去了繼承關係,因此該選項對我的用例無效。
2)任何人都知道的任何良好的算法或方法用於在多線程方式執行ACL修改?我的直覺是,文件系統中的任何遞歸遍歷理論上應該工作,特別是如果你只是定義在頂層文件夾一個新的ACL,只是想「清理」所有子文件夾。您需要在頂層添加新的ACL,然後逐步刪除任何顯式的ACE,然後「繼續」下載繼承的權限。另一個問題是,我詢問是否有人知道任何可以通過網絡進行快速ACL設置的工具。但是,這個問題是來自ServerFault的partially duplicated,因爲它確實是一個系統管理員和編程問題。)