
我想設定一個伺服器供學生上傳C代碼。伺服器編譯 C 程式碼,執行二進位檔案並向學生顯示輸出。
現在我有安全問題。學生可以上傳任何程式碼,但我希望他們只能存取 2 個指定檔案(1 個用於讀取,1 個用於寫入fopen
)和標準輸出。我不希望他們存取互聯網或系統上的任何其他文件。
我的伺服器是容器化的Linux,而且我沒有root。
我考慮過這些解決方案:
chroot
或者firejail
。 (我沒有伺服器的root。它是容器化的,不允許設定euid)使用某些
gcc
選項、.h
檔案或 C 庫限制。 (我對編譯知之甚少。理論上人們可以用 C 做任何事情而不使用任何頭檔或函式庫)使用類似
strace
或 的東西ptrace
來監視進程並在它想做我不希望它做的事情時終止它。
可以這樣做嗎?