我在我的大學局域網中有一個門戶,人們可以上傳代碼到C/C++的編程難題。我想使門戶安全,以便人們不能通過他們提交的代碼進行系統調用。可能有幾種解決方法,但我想知道我是否可以簡單地通過設置一些聰明的gcc標誌來完成。默認情況下libc似乎包含<unistd.h>
,這似乎是聲明系統調用的基本文件。有沒有一種方法可以告訴gcc/g ++在編譯時忽略這個文件,以便在unistd.h中聲明的函數都不能被訪問?使用gcc/g ++時抑制系統調用
回答
爲什麼chroot("/var/jail/empty"); setuid(65534);
不夠好(假設65534有明顯的限制)?
-D
可以覆蓋單個函數名稱。例如:
gcc file.c -Dchown -Dchdir
或者你可以設置包括守衛自己:
gcc file.c -D_UNISTD_H
但他們的影響可以很容易地#undef
S按智能匯交:)
我明白你的意思 - 我認爲馬修斯拉特里指出,要走的路是擁有某種沙箱環境 – kyun 2011-03-03 21:21:36
限制訪問頭收歸文件不會阻止你訪問libc
函數:如果你鏈接到libc
,它們仍然可用 - 你只是不會有原型(和宏)的手;但你可以自己複製它們。
而不是鏈接到libc
也不會幫助:系統調用可以直接通過內聯彙編程序(甚至涉及跳入數據的技巧)。
我不認爲這是一個很好的方法。在完全自包含的虛擬沙箱中運行上傳的代碼(可能通過QEMU或類似的東西)可能是更好的方式。
這是真的 - 沒有想到這一點。我猜沙盒會成爲一種方式,對於這樣一個簡單的(通常是非惡意的)環境來說似乎有很多開銷 – kyun 2011-03-03 21:20:45
- 1. 使用R的trycatch抑制系統錯誤
- 2. 在C++中抑制系統(「ping」)輸出
- 3. 使用read()系統調用
- 4. 使用系統調用
- 5. 抑制調用蟒蛇webrowser
- 6. 系統(「」)調用
- 7. 系統調用來複制文件
- 8. 製作系統的選項調用
- 9. 在windows中錄製系統調用
- 10. Vfork系統調用
- 11. sigaction系統調用
- 12. Pipe()系統調用
- 13. python系統調用
- 14. fork系統調用
- 15. sys_execve系統調用
- 16. MIPS:系統調用
- 17. Ptracing系統調用
- 18. 調用C「系統」 ++
- 19. 系統調用write
- 20. indir系統調用
- 21. 管系統調用
- 22. linux系統中使用的for_each_zone在新系統調用中調用
- 23. 當我尋找添加系統調用時,我添加系統調用linux-2.6.31
- 24. 如何使用寫入系統調用
- 25. 使用系統調用緩存污染
- 26. Perl系統()調用使用哪個shell?
- 27. 使用系統調用打印結果
- 28. FreeBSD從另一個系統調用發出系統調用
- 29. 系統()調用用C
- 30. 在C中使用系統調用填充十六進制
如何使用像http://www.citi.umich.edu/u/provos/systrace/? – GWW 2011-03-03 21:00:38
我現在正在做的事情就像systrace - 只是想知道是否更容易繞過那些明顯區別於常規庫代碼的東西(至少在人類的描述中)。 – kyun 2011-03-03 21:17:26