2011-05-03 30 views
3

我需要創建一個文件,用於存儲機密數據;目標是以ACL結束,限制訪問在創建時運行的域\用戶。但是默認情況下,系統和管理員也可以不受限制地訪問。C#創建一個文件,以便只有創建該文件的用戶才能訪問它

有兩個問題:第一,如果系統和管理員被拒絕訪問文件,Windows或.NET中是否有任何可怕的突破?

其次,從C#我如何實際獲得所需的權限?我現在只是在做一個File.Create(「myFile.dat」);顯然該API的版本不是我應該使用的版本。我發現了一個非常複雜的選擇,但它似乎假設我知道當前的域名和用戶名;這實際上是唯一的方法嗎?

謝謝!

回答

1

我建議你查看加密文件系統。它內置於XP專業版,Vista和Windows 7.(以及服務器產品)。

它可以讓你做到你想做的事。只有用戶使用加密文件(即與正在運行的應用程序相關的憑證)才能訪問相關文件。無論文件系統權限如何,本地管理員都不能讀取該文件。

您可以使用System.IO.File.Encrypt/Decrypt來執行操作。最好的部分是,用戶仍然可以雙擊文件來打開它。沒有密碼。不需要定製應用程序。

請注意擁有恢復證書的人(通常是域管理員)仍然可以解密該文件,但除非您創建自己的加密機制並提示用戶輸入密碼,否則無法對此進行解密。密碼每次嘗試並打開它。

+0

這是一個非常好的主意。我需要查看用於訪問文件的證書的管理,但它確實會提高安全性 - 在我看來,在雲中,您經常不會相信管理您運行的計算機的人員。當然,這是一個問題,因爲他們可以在你的程序上運行調試器,測試文件讀取路徑並以這種方式查看字節。但這樣做很難(很難向法官解釋)。因此,我試圖在「清晰的數據以外的任何人看到」閾值之外提高屏障。 – user736661 2011-05-05 15:23:45

2

據我所知,這是不可能的。

除非我誤會系統有權訪問所有內容,期間。我很確定這是關鍵。管理員的容量是相似的,如果他們甚至不能訪問那些權限較小的文件(當然有例外),他們就不能成爲非常好的管理員。但是,如果SYSTEM無法訪問該文件,那麼將如何完成任何操作?

從邏輯上思考它,我不得不說「不,這是不可能的。」雖然也有可能,但我錯了。

+0

不確定SYSTEM,但確實可以拒絕管理員訪問文件。然而,afaik,你不能否認他們擁有文件所有權的能力。一旦他們擁有所有權,他們可以改變權限,並因此讓自己獲得訪問權限。 – phoog 2011-05-03 18:11:07

+0

@phoog這就是爲什麼我假設你無法否認他們的權限。您可以將其刪除,但他們可以將其恢復正常,使其不可能_deny_他們訪問對象 – Chad 2011-05-03 18:13:30

+0

好吧,它可以回答它。謝謝!(PS:會投票,但不知怎的,我的登錄似乎已經失去了聲譽) – user736661 2011-05-03 18:35:56

2

據我所知,管理員可以訪問任何內容,無論您設置了哪種保護。您可以加密文件,並在您的應用程序中對關鍵字進行硬編碼。

看看System.Io.File.Create的第四個重載。第四個參數是一個System.Security.AccessControl.FileSecurity對象。這應該夠了吧。

+0

好吧,所以我想我需要相信管理員... – user736661 2011-05-03 18:34:10

0

爲什麼不使用對稱加密技術併爲每個用戶在數據庫或註冊表中保存密鑰?

+0

因爲NTFS已經安全用戶ID的級別,這樣會增加延遲和成本。此外,這將是一項在雲中運行的服務,因此用戶不會身臨其境地輸入密碼或以其他方式驗證自己(或她自己)。因此,額外的加密將一點也不買我 – user736661 2011-05-03 18:35:33

相關問題