目录
前言:为什么要用沙箱?能解决什么样的问题?
使用场景:
Docker的沙箱
前言:为什么要用沙箱?能解决什么样的问题?
场景:比如我们有一个应用程序可以访问机器上的所有资源:比如CPU,内存等等,但是这样肯定是不安全的,如果随意操作资源就可能破坏资源的使用,使其他使用资源的应用程序受到影响
解决:
1.为程序分配一个权限账号,操作系统的权限管理机制进行限制
2.为程序提供一个受限的环境:沙箱机制
所以说,什么是沙箱机制?
沙箱机制就是限定一个应用程序访问资源的运行环境
使用场景:
1.比如JVM,大致分为三层:
1.类加载器,利用双亲委派机制,先委派给高层类进行加载,当高层无法应付时交给下面的加载器(保证了系统的核心类不会被篡改,恶意代码无法访问关键资源)
2.在类加载的链接时期中准备时期,中间有个字节码验证阶段,对字节码进行校验
(1) 变量要在使用之前进行初始化
(2) 方法调用与对象引用类型之前要匹配
(3) 访问私有数据和方法的规则没有被违背
(4) 对本地变量的访问落在运行时堆栈内
(5) 运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。
3.我们的开发者也具有设置安全策略的权限,开发者可以根据自身需求,制定对应的安全策略。默认的安全策略配置位于以下两个配置文件中:
· $JAVA_HOME/conf/security/java.security
· $JAVA_HOME/conf/security/java.policy
默认的安全策略配置不允许应用程序对文件的读写操作,所以如果你试图写一个文件,运行时会报如下错误:
如果你希望开放这个权限,可以编写自己的安全策略文件,比如我们写一个my.policy:
然后在运行时指定这个策略配置就可以了:
java -Djava.security.manager -Djava.security.policy=。/my.policy SandboxTest
Docker的沙箱
1.本质利用DockerFile,对应用组件进行组装=From基础环境+一些依赖,包+入口,运行命令
2.搭建测试环境。沙箱的应用只能访问自己的应用访问目录,而不能应用之间的资源进行共享,这样就形成了一个相对安全的机制,由于沙箱具有非常良好的独立性、隔离性,所以能够搭建一些具有高风险的软件进行测试。