原文见诸于http://www.matrix.org.cn/thread.shtml?topicId=41625&forumId=55
有网友提出疑问,
假設JVM已開啟了SecurityManager,并且JASS的登陸模塊等也正常運作,且授權策略文件醒置正確,用戶也已正確地成功地被驗証。如果不執行Subject.doAs()或Subject.doAsPrivileged()方法,JVM會對其它任何方法調用執行權限檢查嗎?如果會,其具的實現過程又是怎樣的?
JAAS授權模型中對下面的情況講得好清楚:
JVM由一个名为 SecurityManager 的类负责实施系统安全策略。在默认情况下不安装安全管理器,必须通过一个在启动时传递给 JVM 的一個名为 java.security.manager 的环境变量显式地指定。任何应用程序都可找到安装的 SecurityManager 并调用它相应的 check<XXX> 方法。
对 SecurityManager 类进行的所有 check<XXX> 方法调用都解释为相应的 Permission 对象,并将它作为输入参数传递给 AccessController 类的 checkPermission() 方法。 AccessController 类有一个名为 doPrivileged 的方法。doPrivileged 方法以一个类型为 PrivilegedAction 的对象作为输入。PrivilegedAction 的对象有一个名为 run() 的方法,如果想實現一個執行權限檢查的操作,需從PirvilegedAction中擴展,並在run()方法中實現自己的業務邏輯即可。但問題是,如果不是從PirvilegedAction中擴展的類,那麼調用其中的方法JVM還會不會執行權限檢查?
從java API中可以看到,Subject.doAs()或Subject.doAsPrivileged()方法都以PrivilegedAction作為參數輸入的。
我做了一个小的形象总结:
通常来说,所有在JVM中执行的方法都回进行权限检查,except 那些由JVM引导的类,比如FileOutputStream和FileInputStream,你也明白你能够利用FileOuptStream做点什么坏事了,呵呵,于是你写了一个干坏事的类叫做EsunPirvilegedAction Class,这个类往用户的user.home写入n个1G的文件,这个类调用JVM不经过权限检查的FileOuptStream类。
问题在于,JVM虽然不检查FileOuptStream类,但会检查所有在JVM运行中未被授权的类,包括你的
EsunPirvilegedAction类,是否具有权限(判别标准就是C:\yourjdk\jre\lib\security\java.policy)。
1,Permission对象如何Load入,可以看看SecurityManager机制
2,AccessController 类执行checkPermission() 方法,所有不信任的类都不能逃过次"劫",当然,你可以叫所有Client都在其java.policy为你的创建一个Permission。
3,PrivilegedAction是你的EsunPirvilegedAction类所必需实现的方法,否则SecurityManager不理你。
总结性——Java有自己的信任体系,它引导的类以及它的扩展类都不需要checkPermission,你写的要checkPermission。
<!---->
分享到:
相关推荐
3. **checkPermission**: 这个方法是进行权限检查的核心,根据传入的`Permission`对象来决定是否允许进行相应操作。 4. **checkCallers**: 可能用于检查调用栈,确保只有经过许可的类或方法才能执行特定操作。 5. ...
在Java世界中,JVM(Java虚拟机)是运行所有Java程序的核心,它负责加载、验证...而JVM代理则让我们能够扩展JVM的功能,实现对程序行为的监控和控制。掌握这些技术对于提升Java应用程序的灵活性和安全性具有重要意义。
2. **安全配置**: 为了防止未经授权的访问,需要配置JMX安全策略,包括设置访问控制和认证。 3. **端口设置**: JMX默认使用随机端口,可通过`-Dcom.sun.management.jmxremote.port`指定固定端口。 4. **连接器配置...
JVM逃逸是一种高级的软件安全问题,涉及到Java虚拟机(JVM)的安全机制被绕过,允许恶意代码获取不应有的权限或执行非授权操作。本文主要围绕JVM逃逸展开,包括其分析、利用和防御策略。 首先,我们要理解Java的...
4. **访问控制**:JVM提供了严格的访问控制机制,确保只有经过授权的代码才能访问敏感资源。 5. **代码签名**:通过代码签名,开发者可以证明代码的来源可信,从而增强用户对应用程序的信任度。 #### 四、Java...
通过限制对某些包的访问,可以防止未经授权的代码访问敏感信息或进行恶意操作。例如,`java.lang`包中的关键类如`String`和`Object`是所有Java程序的基础,因此对它们的访问有严格的控制,只有在同一命名空间或被...
- 安全性:由于JMX提供远程管理功能,确保配置适当的访问控制和安全策略,防止未授权访问。 - 性能影响:虽然JVMM提供了丰富的监控,但过多的监控可能会对目标JVM产生一定性能影响,因此合理设置监控频率和粒度至...
【个人笔记】是我在深入学习IT技术过程中积累的宝贵资料,涵盖了多个核心领域,包括Linux操作系统、Java编程语言、JVM虚拟机、数据库管理、算法基础以及常用的Java框架。这些笔记旨在帮助我巩固理解,同时也适用于...
首先,Java RMI是Java平台内置的一种机制,它允许对象在不同的JVM之间进行通信。RMI的核心概念是接口和 stub/skeleton 对象。接口定义了远程对象的方法,stub是远程对象的代理,负责在网络间传输调用请求,而...
这样,Java VisualVM 就能够对远程的 JVM 进行监控,帮助开发者及时了解和分析应用程序在生产环境中的运行状况,从而进行优化和故障排除。使用 VisualVM 进行远程监控是一种成本较低且效率较高的监控方式,它对于...
在Java编程领域,远程控制是一项重要的技术,它允许一台计算机通过网络对另一台计算机进行操作。这个"java项目实例_远程控制"是一个完整的Java项目,提供了实现远程控制功能的源代码。下面我们将深入探讨这个项目...
- **4xx客户端错误**:400 Bad Request表示请求语法错误,401 Unauthorized表示未授权,404 Not Found表示找不到资源。 - **5xx服务器错误**:500 Internal Server Error表示服务器遇到不可预期的情况,502 Bad ...
远程控制通常涉及通过网络对远程计算机进行操作,这在系统管理、自动化任务执行以及分布式系统通信中非常常见。 首先,我们要理解Java中实现远程控制的关键概念和技术。Java Remote Method Invocation (RMI) 是一个...
远程控制涉及到安全问题,如身份验证和授权。Java提供了SSL/TLS协议来加密通信,确保数据在传输过程中的安全性。此外,还需要设计合适的权限模型,限制对远程系统的访问权限。 5. **序列化**: 在Java中,远程...
6. **安全性考虑**: 远程控制涉及到系统权限和数据安全,因此必须对用户认证和授权进行严格的控制。Java提供JCA(Java Cryptography Architecture)和JCE(Java Cryptography Extension)用于加密和安全管理。 7. *...
JVM在执行字节码时会使用这些数据类型,对它们进行相应的操作。 运行时数据区域包括PC寄存器、Java虚拟机栈、堆、方法区、运行时常量池和本地方法栈。PC寄存器存储下一条将要执行的指令地址。Java虚拟机栈存储局部...
这意味着用户可以在任何安装了Java环境的设备上进行远程控制操作。 7. **性能优化**: 为了提供流畅的远程控制体验,JPCanyWhere可能包含性能优化策略,比如屏幕更新压缩、带宽管理,以及根据网络条件动态调整画质...
Java JVM 沙箱(Sandbox)是一种安全机制,它允许执行受限的代码,同时防止潜在有害的操作影响到系统的其余部分。"jcage" 是一个针对 Java 的运行时可配置沙箱框架,它旨在为 Java 应用提供更加灵活的安全控制。通过...