2009-12-27 122 views
2

服務器在線程池中創建新線程。這個線程將一些東西讀入緩衝區等等,然後執行一些代碼。我想通過更改線程的權限來降低自己的安全,在這個代碼之前可能是不安全的(或者它的行爲可以被改變......通過黑客攻擊等等......)線程權限

我要去(ha ...但幾乎沒有任何知識)爲線程中的這個不安全的代碼創建一種「沙箱」。 (可能對於類UNIX操作系統,因爲我沒有想法,如何做到這一點的Windows)。

任何想法如何更改線程權限? (我使用Boost庫)。如果能夠定義內存使用的邊界,這將非常棒。 (類似於 - 如果線程嘗試使用超過1Mb的堆棧\堆 - 有一些錯誤 - 殺死它)。

還有一件事:) - 如果我在內部線程中使用chroot,我更改根目錄。整個應用程序?

謝謝你。

回答

6

沒有辦法在Unix或Windows中控制本地代碼線程的權限 - 至少不是沒有內核黑客攻擊。硬件的「環」機制(至少是x86)被設計爲做這樣的事情 - 你會把線程踢進一個沒有特權的環中。但是,沒有任何操作系統對此有任何用戶模式支持。在一個線程中的chroot會徹底改變整個過程。

如果您必須使用本機代碼,您唯一能做的就是創建一個進程而不是線程。然後,您可以與mmap共享內存,並通過在映射上使用只讀來控制共享。但是,如果您有惡意代碼問題,則該進程必須以不同的訪問身份運行。

+0

謝謝。運行DB和配置後,我只會使用chroot。 – 2009-12-27 20:30:38

+0

如果您打算在將來提出其他問題,則可能需要檢查「接受」框。 – bmargulies 2009-12-27 22:36:10

+0

也許我已經明白了一些錯誤,但它似乎是這樣的。 4.1.2.2監獄(2)系統調用 從 http://www.freebsd.org/doc/en/books/arch-handbook/jail.html? – 2009-12-28 20:01:18