在为 Java 应用程序开发共享托管解决方案时,我们遇到了一个问题,由于用户可以上传自己的 jar,我们如何限制他们使用这些 jar 运行 Linux 命令(如 df -h 或 free -g)?当然,我们已经解决了权限问题,他们不能随意修改自己文件之外的文件,但这些命令才是我们遇到的问题。
答案1
当您可以控制该 Java 虚拟机时,您就可以使用 Java 策略来指定什么是允许的,什么是不允许的。
通过它们,您可以限制对文件系统各部分、特定端口等的访问。
这有一个很好的教程:
http://docs.oracle.com/javase/tutorial/security/tour2/step2.html
但您必须强制用户在激活安全管理器的情况下运行 jvm。当您无法强制执行此操作时,策略可以简单地被禁用。
答案2
必须挂载这些用户可以写入的每个文件系统树noexec
。
/bin
您可以通过为他们创建一个组并向、/sbin
、 [...]添加 ACL 条目来阻止他们访问所有二进制文件,/usr/bin
从而阻止该组访问此目录:
for dir in /bin ...; do
setfacl -m g:javausers:- "$dir"
done
您创建一个新目录/whitelisted_binaries
并硬链接它们需要的所有二进制文件(如其java
自身),并使该目录成为用户的一部分$PATH
。这些硬链接可能需要在软件包更新后重新创建。