本发明专利技术公开一种Java应用安全访问控制方法及其装置,该方法包括:JVM根据Java归档文件中的权限描述信息,生成扩展安全访问策略文件,所述扩展安全策略文件中的组件的资源访问权限信息中设置有授权约束条件,所述授权约束条件表示当对应组件调用其它指定组件的指定操作时需要被赋予被调用组件的资源访问权限;当JVM接收到第一组件调用第二组件的请求且相应组件已经加载时,JVM根据所述扩展安全访问策略文件,若判断本次调用满足相应授权约束条件,则根据相应授权约束条件将第二组件的资源访问权限赋予第一组件,并对本次调用进行安全访问控制。采用本发明专利技术可提高Java安全机制部署的灵活性,并能保证在安全控制范围内满足用户访问需求。
【技术实现步骤摘要】
本专利技术涉及通信
,尤其涉及一种Java应用安全访问控制方法及其装置。
技术介绍
Java语言具有与平台无关性的特点,使得Java技术目前得到广泛应用。自从Java技术出现以来,有关Java平台的安全性及由Java技术发展所引发的新的安全性问题,引起了越来越多的关注。Java应用服务器能为Java应用程序提供运行环境,并使用安全机制来保障应用服务器的安全性。Java应用服务器的安全机制主要目的在于阻止某些未授权的用户调用 某些危险的组件(如类、jar包),并允许授权的用户调用这些组件。具体来说,Java应用服务器的安全机制根据需求实现了不同的功能,比如-阻止未授权用户程序创建子进程或者子线程;-阻止未授权用户程序通过创建socket(套接字)和其他进程进行通信;-阻止未授权用户对文件系统执行写操作,并且只能对文件系统中有限的资源执行读操作。传统的Java安全机制包括SecurityManager (安全管理器)和JAAS (JavaAuthentication and Authorization Service, Java 验证和授权 API),分别从两个不同的角度实现Java的安全机制。其中,SecurityManager通过判断代码来源,控制哪些来源的代码可以访问哪些敏感资源,从而保护代码执行者的安全性JAAS通过判断代码执行者的身份,从而判断哪些身份的用户可以访问哪些敏感资源。传统的Java安全机制分两个层面实现,在部署层面通过类加载器(classloader)对某些类的加载来保证安全性;在运行阶段通过Java的访问控制机制来实现。Java的访问控制机制基于的数学模型是一个三元组〈subject, object, action〉,其中,subject代表角色,object代表资源,action代表拥有的权限集,如〈user, /home/text. txt,read>表示某一个用户user对/home目录下的text, txt文件具有read的权限。三元组在计算机中可以用二维访问数组来表示,典型的二维访问数组如下表I所示表I、二维访问数组 Objectl0bject2Subjectl Read, Write ReadSubject2 WriteReadSubject3 ReadRead,Write下面分别介绍SecurityManager 和 JAAS。SecurityManager通过*· policy策略文件(默认的策略文件保存在% jre_home% \lib\security目录中)来生成存储二维访问数组的数据结构。典型的policy文件采用如下格式编写grant{permission FilePermission d:\java_resource\*read, write ;};其中,Grant和permission为policy文件的关键字;codebase相当于三元组中的subject ;FilePermission表不权限所属的类型;d: \java_resource\*相当于三兀组中的object,支持通配符表示目录下的所有文件;read, write相当于三元组中的action,表示代码对d:\java_resource目录下所有的文件具有read(读)和write (写)的权限。SecurityManager通过此配置文件生成一个数据结构,Java通过此数据结构存储policy文件配置的规则,然后根据栈检测来判断某一个操作是否有权限。比如假设类A,B,C的权限集分别为A_set, B_set, C_set,并存在此调用关系类A调用类B的do_something O方法,类B的此方法又调用类C的readFile ( “text, txt”)方法,类C的此方法读写本地磁盘文件text, txt。JVM(Java Virtual Machine, Java虚拟机)中的调用栈如图I所示,JVM判断类C的方法readFile O是否有权限读写text, txt文件,是通过将调用栈中的A,B, C三个类的权限集取交集,并判断么_8的H B_set H C_set的结果是否有读写text, txt的权限。如果有权限,则应用程序继续正常执行,否则抛出安全异常SecurityExceptionοJAAS (Java Authentication Authorization Service)也是 Java安全机制中的一种,它强调的是通过验证谁在运行代码以及它的权限来保证系统免受用户的攻击。传统的Java安全访问控制机制正是通过SecurityManager类实现了基于源代码的访问控制,通过JAAS SecurityManager类实现了基于主题(subject)的访问控制,两者共同提高了 Java的安全性。传统的Java安全机制SecurityManager在进行操作之前,通过栈检测对操作相关类的权限集取交集,然后判断某项操作是否有必要的权限执行。然而这种机制存在缺陷,尤其是在用户使用PaaS云平台提供的服务时。这种情况发生在当一个Subject_a调用另一个subject_b的操作以完成自身的功能时,被调用的subject_b肯定具有必要的权限来执行所需的任务,但是一般来说subject_a没有必要的权限,因此如果使用SecurityManager进行访问控制,用户的访问服务的请求就可能会因为没有权限被拒绝,最终将导致PaaS云平台提供给用户的服务无法正常调用。JAAS在一定程度上解决的了传统的SecurityManager机制存在的问题。在前面提到的场景中,JAAS通过将subjeCt_b的操作提升为特权操作,当享有特权时,该操作就不需要调用它的subject_a具有一样的特权,因此subject_b的操作就可以对资源进行全面的访问。然而,JAAS存在的问题是不够灵活,要使某个类的某个操作享有特权,就必须编写特定的代码,调用JAAS提供的接口,因此会造成代码的紧耦合,导致后续的维护比较麻烦。比如,开放PaaS平台的需求经常会发生变化,采用这种硬编码的方式可能会导致在需求变化的时候不得不修改代码,重新编译、部署,代价比较大。另外,PaaS云平台提供的一些供用户程序调用的服务使用的是第三方软件,其中一些第三方软件只是做到了功能 上的实现,没有考虑安全机制的问题,并且不提供源代码,这就导致试图通过修改源代码使其在被调用时提升为享有特权的操作变得异常的困难。由此可见,传统的Java安全机制中的SecurityManager,有可能导致用户的访问服务的请求就因为没有权限被拒绝,而JAAS在部署上又不灵活,尤其对于PaaS云平台来说,在技术实现上有较大障碍。因此亟需一种能够实现灵活部署而又能在安全控制范围内满足用户访问需求的Java安全机制。
技术实现思路
本专利技术实施例提供一种Java 应用安全访问控制方法及其装置,用以提高Java安全机制部署的灵活性,并能保证在安全控制范围内满足用户访问需求。本专利技术实施例提供的Java应用安全访问控制方法,包括JVM根据Java归档文件中的权限描述信息,生成扩展安全访问策略文件,所述扩展安全策略文件中的组件的资源访问权限信息中设置有授权约束本文档来自技高网...
【技术保护点】
一种Java应用安全访问控制方法,其特征在于,包括:Java虚拟机JVM根据Java归档文件中的权限描述信息,生成扩展安全访问策略文件,所述扩展安全策略文件中的组件的资源访问权限信息中设置有授权约束条件,所述授权约束条件表示当对应组件调用其它组件的指定操作时需要被赋予被调用组件的资源访问权限;当JVM接收到第一组件调用第二组件的请求且相应组件已经加载时,JVM根据所述扩展安全访问策略文件,若判断本次调用满足相应授权约束条件,则根据相应授权约束条件将第二组件的资源访问权限赋予第一组件,并对本次调用进行安全访问控制。
【技术特征摘要】
【专利技术属性】
技术研发人员:李勇,吴恒,胡睿,
申请(专利权)人:中国移动通信集团公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。