是否有在服務器上運行用戶提供的Java代碼的安全問題的完整列表?我已經運行用戶提供的Java代碼時,我應該防範哪些安全風險?
- 使用超時10秒
- 在一個單獨的進程中運行的代碼與有限的可用內存使用SecurityMangager以防止文件和網絡IO
- 用極其有限的帳戶下運行的代碼
- 文件系統權限
我在FreeBSD服務器上運行這個,如果重要的話。
是否有在服務器上運行用戶提供的Java代碼的安全問題的完整列表?我已經運行用戶提供的Java代碼時,我應該防範哪些安全風險?
我在FreeBSD服務器上運行這個,如果重要的話。
我問自己的問題是,'我相信多少人,我相信他們的代碼不會破壞我的系統?總的來說,我的答案不會太多,而且我的投入也不會太多。但是,除了我的頭頂,這裏有一些我想要防範的事情。
有很多更要警惕的,所以我會小心行事。儘可能保護每個帳戶和/home
目錄(一個簡單的chmod 700 $HOME
通常會這樣做),然後嘗試在公開部署之前考慮到的代碼。一旦您對服務器的穩定性感到滿意,請允許其他人測試您的服務器並查看其效果。
看起來像一個非常好的開始 - 安全管理器對於沙盒中的其他一些你沒有明確提到的東西是很重要的(比如阻止用戶禁用安全管理器,當然也可以調用任意命令,或者使用本地代碼,或者讓操作系統執行exec文件等)。我假設你從零權限開始,只需授予明確的權限。
安全管理器無法通過過量的資源使用來處理拒絕服務,但您的其他控件可能會解決這個問題(防止網絡連接,控制磁盤使用率,超時以防止CPU佔用 - 如果這意味着我的超時)。
你說「非常有限的文件系統權限」 - 希望這還包括磁盤配額?你是否運行多個不受信任的進程,並共享磁盤空間?用完文件句柄可能是個問題(不確定這些文件是如何管理的)。
仍然存在偶然的JVM漏洞,所以風險取決於服務器上的其他內容,以及問題的實際後果(如果您必須擦除服務器,這有多嚴重?)。
參見:Sandbox against malicious code in a Java application和Execute external Java source code on server - limit security and resources?
即使有一個全面的列表,它可能會過時它出版的那一刻。 – jdigital 2012-01-27 23:20:40
您是否擔心拒絕服務? JVM進程是否繼承父進程的文件描述符?你如何限制Classpath?用戶提供的Java可以調用'System.loadLibrary'嗎? – 2012-01-27 23:51:25
服務器上還有什麼? – 2012-01-27 23:52:14