2012-07-11 24 views
3

我是一名想要設計在線評審系統的學生。如何限制程序的文件權限

我有一個問題:爲了保證服務器的安全,我必須讓程序無權讀取或寫入任何文件。 該程序是另一個用戶通過在線評審系統提交的內容。這不是嚴重程序本身。

在線評審系統的用戶提交他們的源代碼,然後服務器程序編譯並運行它。所以服務器程序必須保證服務器的安全。

我的平臺是Windows,我使用C++進行編程。

任何人都可以給我一些建議嗎?

+0

爲什麼你想讓你的程序在C++ @ Windows中? – 2012-07-11 14:26:13

+0

我認爲這將是一個有效的問題,如果您的在線法官想支持的語言是C++。 – nhahtdh 2012-07-11 14:26:55

+5

以主機上沒有權限的用戶身份運行程序(類似於* nix框中的'nobody')。 – 2012-07-11 14:27:03

回答

2

你不能輕易地阻止程序本身的功能,並且無法驗證程序是否非惡意。

你能做什麼:以一個有限(接近非)訪問權限的用戶身份運行程序。您的服務器程序需要成爲該用戶並執行它編譯的程序。您可能還想使用該用戶帳戶來實際編譯該程序(在不太可能的情況下,有人知道如何利用您的編譯器)。

作爲不同用戶執行程序的windows命令是:runas

+0

我的想法是使用CreateProcessAsUser以非組用戶的身份運行用戶的程序。但這種方式仍然不能限制程序寫入或讀取文件。你能告訴我一些特定的方法嗎? – SXKDZ 2012-07-11 16:36:15

+1

@ user1518008這不會限制讀取或寫入文件?如果運行該程序的用戶對文件或目錄沒有讀取或寫入權限,他如何讀取或寫入文件? – pmr 2012-07-11 16:48:27

+0

這是我的問題。如果服務器程序遍歷每個目錄和文件以更改對這個非組用戶的權限。效率可能很低? – SXKDZ 2012-07-11 23:33:26

0

您可以更改文件和目錄的權限,然後使用CreateProcessAsUser以具有有限(接近非)訪問權限的用戶身份運行用戶提交的程序。

+0

如何更改文件和目錄的所有權限? – SXKDZ 2012-07-11 16:49:26