2009-06-11 47 views
0

在我的環境,我有涉及在多個文件服務器上運行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,因爲它確實是一個系統管理員和編程問題。)

回答

0

發現在一個MS KB article答案:正在使用Active Directory 服務接口(ADSI文件 和文件夾設置

文件權限)和ADSI 資源工具包實用程序,ADsSecurity.DLL, 不要將 子樹自動傳播到現有文件夾 和文件。

,你不能使用ADSI來 組ACE向下傳播到現有 文件和文件夾的原因是因爲 ADSSecurity.dll使用低級別 SetFileSecurity函數設置 安全描述符的文件夾上。有 沒有標誌,可以通過使用 SetFileSecurity自動 將ACE傳播到現有的 文件和文件夾。 SE_DACL_AUTO_INHERIT_REQ控制標誌 將只在 安全描述符中設置 SE_DACL_AUTO_INHERITED標誌,該標誌與文件夾關聯 。

所以我必須使用低級別的SetFileSecurity Win32 API函數(這標誌着過時的MSDN entry)設置ACL,並應防止其自動流下來。

當然,我寧願用勺子撕掉眼球,而不願意用P /調用一些傳統的Win32 API來處理所有的瑕疵,這樣我最終可能會使用一種叫做FILEACL的老式NT4工具,就像CACLS,但可以選擇使用SetFileSecurity API,因此更改不會自動傳播。

相關問題