一种虚拟主机及隔离方法、资源访问请求处理方法及装置与流程

文档序号:11959980阅读:207来源:国知局
一种虚拟主机及隔离方法、资源访问请求处理方法及装置与流程

本申请涉及网络服务器技术领域,尤其涉及一种虚拟主机隔离方法、虚拟主机、资源访问请求处理方法及其对应装置。



背景技术:

为了充分利用网络服务器的运算处理、存储空间等资源,一个网络服务器可以通过一定的技术同时为多个资源使用者提供相对独立的服务,这种情况下,相当于把一个网络服务器划分成了多个“子网络服务器”,常见的虚拟主机即是这种资源利用方式的一种实现。位于网络服务器上的各个虚拟主机具有相对独立的系统资源,比如IP地址、磁盘空间、内存、CPU使用时间等,从而可以对外提供完整的WEB服务器功能。在虚拟主机以外的对象看来,每一台虚拟主机和一台独立的服务器没有什么特别不同。

网络服务器通过其自身的各个虚拟主机向资源使用者提供WEB服务,但是,由于多个虚拟主机位于同一服务器之上,原有的防火墙等网管设备已不复存在,虚拟主机之间的边界不甚明确,相互之间存在干扰的可能,从而导致出现安全问题。比如,网络服务器上的某个虚拟主机出现黑客入侵,不仅影响到该虚拟主机自身的安全,还可能对该虚拟主机以外的其他虚拟主机造成安全威胁。为了使网络服务器上的虚拟主机相互独立,需要对虚拟主机进行隔离。在现有技术中,一种隔离方式是对虚拟主机的资源使用者的访问权限通过专门配置进行限制,只有在预先配置范围内的资源才允许访问。然而,对访问权限的配置通常通过某种特定语言(比如,PHP语言)来实现,这导致对虚拟主机的隔离停留在语言级别,不使用该配置语言的使用者通过其他语言可以容易绕过权限配置,从而导致虚拟主机之间没有实现真正隔离,仍然存在安全风险。



技术实现要素:

为了解决现有技术中的技术问题,本申请实施方式提供一种网络服务器的虚拟主机隔离方法、虚拟主机以及资源访问请求处理方法及其装置,以实现虚拟主机之间的安全隔离,改善或提高资源访问请求处理过程的安全性能。

本申请实施方式提供了一种网络服务器的虚拟主机隔离方法,包括:

确定虚拟主机在网络服务器的根目录之下与所述虚拟主机对应的目录,将与所述虚拟主机对应的目录中的最上层目录确定为所述虚拟主机的根目录;

在所述虚拟主机的根目录下创建公共资源利用目录,建立所述公共资源利用目录与网络服务器根目录之下的公共资源共享目录之间的映射关系,以形成虚拟主机用于运行进程的容器,通过所述容器实现虚拟主机之间的隔离。

优选地,所述将与所述虚拟主机对应的目录中的最上层目录确定为所述虚拟主机的根目录包括:

调用根目录改变函数将与所述虚拟主机对应的目录中的最上层目录修改为所述虚拟主机的根目录。

优选地,所述建立所述公共资源利用目录与网络服务器的根目录之下的公共资源共享目录之间的映射关系包括:

调用目录挂载函数将网络服务器的根目录之下的公共资源共享目录以只读挂载的方式挂载到所述虚拟主机的公共资源利用目录。

优选地,所述方法还包括:使利用网络服务器和/或虚拟主机资源的一个或多个进程在虚拟主机的容器内运行,在一个虚拟主机的容器内运行的进程与其他虚拟主机的容器内运行的进程具有不同的进程命名空间,在虚拟主机的容器内运行的进程在相同进程命名空间内具有不同的进程标识。

优选地,所述使利用网络服务器和/或虚拟主机资源的一个或多个进程在虚拟主机的容器内运行包括:

将待在虚拟主机内运行的进程的原始根目录修改为虚拟主机的根目录,以 及将待在虚拟主机内运行的进程的进程标识修改为按照虚拟主机的进程命名空间命名的进程标识,以使进程在虚拟主机的容器内运行。

优选地,虚拟主机的容器内具有容器管理器进程,所述容器管理器进程的根目录为虚拟主机的根目录,所述容器管理器进程按照当前虚拟主机的进程命名空间命名进程标识,所述使利用网络服务器和/或虚拟主机资源的一个或多个进程在虚拟主机的容器内运行包括:

继承所述容器管理器进程,以生成在虚拟主机的容器内运行的利用网络服务器和/或虚拟主机资源的一个或多个进程。

本申请实施方式还提供了一种网络服务器的虚拟主机。该虚拟主机包括用于运行进程的容器,所述容器的根目录为所述虚拟主机的根目录,所述虚拟主机的根目录为所述虚拟主机在网络服务器的根目录之下与所述虚拟主机对应的目录中的最上层目录,在所述虚拟主机的根目录下具有公共资源利用目录,所述公共资源利用目录与网络服务器的根目录之下的公共资源共享目录之间具有映射关系。

优选地,在所述容器内能运行利用网络服务器和/或虚拟主机资源的一个或多个进程,在一个虚拟主机的容器内运行的进程与其他虚拟主机的容器内运行的进程具有不同的进程命名空间,在虚拟主机的容器内运行的进程在相同进程命名空间内具有不同的进程标识。

优选地,所述容器内具有容器管理器进程,所述容器管理器进程的根目录为虚拟主机的根目录,所述容器管理器进程按照当前虚拟主机的进程命名空间命名进程标识。

本申请实施方式还提供了一种资源访问请求处理方法,所述方法应用于包括上述虚拟主机的网络服务器,该方法包括:

接收网络服务器转发的访问动态资源的资源访问请求,所述访问动态资源的资源访问请求包括待访问的动态资源所在的虚拟主机的标识;

在虚拟主机的容器内处理所述访问动态资源的资源访问请求,将处理结果 返回给网络服务器,以便网络服务器返回给发送所述资源访问请求的请求端。

优选地,所述在虚拟主机的容器内处理所述访问动态资源的资源访问请求包括:

将第一脚本解释器进程的原始根目录修改为所述虚拟主机的根目录,以及将所述第一脚本解释器进程的进程标识修改为按照所述虚拟主机的进程命名空间命名的进程标识,以使第一脚本解释器进程在所述虚拟主机的容器内运行;

通过在虚拟主机的容器内运行的第一脚本解释器进程处理所述访问动态资源的资源访问请求。

优选地,所述虚拟主机的容器内具有容器管理器进程,所述容器管理器进程的根目录为虚拟主机的根目录,所述容器管理器进程按照当前虚拟主机的进程命名空间命名进程标识,则所述在虚拟主机的容器内处理所述访问动态资源的资源访问请求包括:

在接收到网络服务器转发的访问动态资源的资源访问请求后,继承所述容器管理器进程,以生成第二脚本解释器进程;

通过在虚拟主机的容器内运行的第二脚本解释器进程处理所述访问动态资源的资源访问请求。

优选地,在接收到网络服务器转发的访问动态资源的资源访问请求之前,向网络服务器发送所述容器管理器进程的注册请求,所述注册请求包括所述容器管理器进程的进程标识以及虚拟主机的标识;

接收网络服务器在建立所述容器管理器进程的进程标识与所述虚拟主机的标识之间的对应关系后发送的注册成功消息,以便在接收到所述注册成功消息后,接收网络服务器根据所述对应关系转发给所述容器管理器进程的访问动态资源的资源访问请求。

优选地,所述资源访问请求为访问静态资源的资源访问请求时,网络服务器读取所述静态资源,以便返回给发送所述资源访问请求的请求端。

本申请实施方式还提供了一种资源访问请求处理装置,所述装置应用于包括上述虚拟主机的网络服务器,该装置包括访问请求接收单元和访问请求处理单元,其中:

所述访问请求接收单元,用于接收网络服务器转发的访问动态资源的资源访问请求,所述访问动态资源的资源访问请求包括待访问的动态资源所在的虚拟主机的标识;

所述访问请求处理单元,用于在虚拟主机的容器内处理所述访问动态资源的资源访问请求,将处理结果返回给所述网络服务器,以便网络服务器返回给发送所述资源访问请求的请求端。

优选地,所述访问请求处理单元包括第一脚本解释器进程创建子单元和第一访问请求处理子单元,其中:

所述第一脚本解释器进程创建子单元,用于将第一脚本解释器的原始根目录修改为所述虚拟主机的根目录,以及将所述第一脚本解释器进程的进程标识修改为按照所述虚拟主机的进程命名空间命名的进程标识,以使第一脚本解释器进程在所述虚拟主机的容器内运行;

所述第一访问请求处理子单元,用于通过在虚拟主机的容器内运行的第一脚本解释器进程处理所述访问动态资源的资源访问请求。

优选地,所述虚拟主机的容器内具有容器管理器进程,所述容器管理器进程的根目录为虚拟主机的根目录,所述容器管理器进程按照当前虚拟主机的进程命名空间命名进程标识,所述访问请求处理单元包括第二脚本解释器进程创建子单元和第二访问请求处理子单元,其中:

所述第二脚本解释器进程创建子单元,用于在接收到网络服务器转发的访问动态资源的资源访问请求后,继承所述容器管理器进程,以生成第二脚本解释器进程;

所述第二访问请求处理子单元,用于通过在虚拟主机的容器内运行的第二脚本解释器进程处理所述访问动态资源的资源访问请求。

优选地,所述装置包括注册单元,用于在接收到网络服务器转发的访问动态资源的资源访问请求之前,向网络服务器发送所述容器管理器进程的注册请求,所述注册请求包括所述容器管理器进程的进程标识以及虚拟主机的标识;所述访问请求接收单元,还具体用于接收网络服务器在建立所述容器管理器进程的进程标识与所述虚拟主机的标识之间的对应关系后发送的注册成功消息,以便在接收到所述注册成功消息后,接收网络服务器根据所述对应关系转发给所述容器管理器进程的访问动态资源的资源访问请求。

本申请实施方式提供的虚拟主机隔离方法、虚拟主机建立(或拥有)属于虚拟主机自身的目录体系,在虚拟主机内建立(或拥有)用于运行进程的容器,与现有技术相比,通过该方式使利用网络服务器资源和/或虚拟主机资源的进程的根目录为虚拟主机的根目录,且运行在容器内,具有较大的独立性,不会和其他虚拟主机的进程发生相互干扰,从而确保了虚拟主机之间的安全隔离,有利于改善或增强利用所述虚拟主机进行资源访问请求处理的安全性能。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1为本申请的网络服务器的虚拟主机隔离方法的实施例的流程示意图;

图2(a)为Linux系统的目录结构示意图;

图2(b)为Linux系统中包含虚拟主机的目录结构示意图;

图3为本申请虚拟主机隔离方法的形象化实施过程示意图;

图4为本申请的资源访问请求处理方法的一个实施例流程图;

图5为本申请的资源访问请求处理方法的又一个实施例流程图;

图6(a)为网络服务器与脚本解释器进程的通信过程示意图;

图6(b)为网络服务器与CPM进程的通信过程示意图;

图7(a)为本申请的资源访问请求处理方法再一个实施例流程图;

图7(b)为本申请的资源访问请求处理过程的信令交互图;

图8为本申请的资源访问请求处理装置的实施例的结构框图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请的具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

如前所述,一台网络服务器上可以存在多个虚拟主机,这些虚拟主机就如同一间大房屋(类似于网络服务器)中的各个出租房间(类似于虚拟主机)。通常情况下,住在各个出租房间内的住户(类似于虚拟主机的用户)互不了解,无法判断自己出租房间的相邻房间的住户是否存在恶意或者存在恶意的可能。如果该相邻出租房间被窃贼破门而入,那么极有可能从该相邻出租房间的窗户(类似于网络服务器/虚拟主机上的系统漏洞等)钻入到自己的出租房间,从而对自己的出租房间造成威胁。由此可见,位于同一个网络服务器上的多个虚拟主机之间应当进行有效隔离,使它们相互之间的影响减少到最小,甚至消除相互影响。为此,本申请提供了一种虚拟主机的隔离方法的实施例。参见图1,该图示出了对网络服务器上的虚拟主机进行安全隔离的方法的流程,该流程包括:

步骤S11:确定虚拟主机在网络服务器的根目录之下与所述虚拟主机对应的目录;

网络服务器具有自身的目录结构体系。在其目录结构体系中,最上面的一层目录为网络服务器的根目录,在根目录之下存在适应各种实际需要的子目录,子目录之下又可能存在孙目录,孙目录之下又可能存在孙孙目录等,同时, 在一个层级上,也可能存在多个目录,这些由横向、纵向的各级、各层目录形成的目录结构体系如同“树形”一般,因此,网络服务器的目录结构体系又被称为目录树。以网络服务器的系统为Linux系统为例,其目录结构体系如图2(a)所示。在该图中,“/”表示网络服务器的根目录,在根目录“/”的下一层级存在多个“子目录”,如图中所示的“bin/”、“etc/”、“lib/”、“usr/”、“home/”等。在这种目录结构体系中,由于网络服务器具有多个虚拟主机,每个虚拟主机在网络服务器的目录结构体系中具有与其自身对应的目录。参见图2(b)所示,在网络服务器的目录结构体系中,根目录“/”下有“home/”目录,在“home/”目录下有“alice/”目录及其以下的目录(包括“etc/”、“dev/”、“lib/”等目录)。该“alice/”目录及其以下的目录对应“alice”用户的虚拟主机目录,当然在“home/”目录下,还可以具有其他虚拟主机的用户对应的虚拟主机目录。在本申请实施方式中,确定与所述虚拟主机对应的目录便是确定虚拟主机在网络服务器的目录体系结构中属于虚拟主机的目录,如上例中的“alice/”目录以及“alice/”目录之下的“etc/”、“dev/”、“lib/”等目录。这些目录同样形成一个与虚拟主机对应的目录结构体系。

步骤S12:将与所述虚拟主机对应的目录中的最上层目录确定为所述虚拟主机的根目录;

通过前述步骤确定了与虚拟主机对应的目录后,将该目录中的最上层目录确定为虚拟主机的根目录,如上例中,将“alice/”目录确定为与“alice”虚拟主机对应的根目录。在现有技术中,“alice”虚拟主机的根目录为整个网络服务器的根目录,即“/”。为实现这种根目录的改变,可以使用多种具体方式。比如,在本申请的一个实施例中,可以通过调用根目录改变函数将虚拟主机对应的目录中的最上层目录修改为虚拟主机的根目录,从而将虚拟主机的根目录由原来网络服务器的根目录改变为与该虚拟主机对应的根目录。以Linux系统为例,根目录改变函数可以是chroot系统函数,其调用方式是“chroot(‘目标根目录’)”,在上例中目标根目录为“/home/alice”,将虚拟主机目录系统的根 目录确定后,在该根目录之外的文件将无法“看见”该根目录之下的内容。如果网络服务器上具有多个虚拟主机,那么每个虚拟主机都可以通过上述方式获得自己专属的“根目录”,而不用再共享网络服务器的根目录。

步骤S13:在所述虚拟主机的根目录下创建公共资源利用目录;

通过前述步骤确定虚拟主机的根目录后,便可以在该虚拟主机的根目录下创建各种子目录,以便某些进程使用这些目录或者目录中的资源。在这些子目录中,可以包括公共资源利用目录,该目录的创建可以使虚拟主机的进程利用某些公共资源,比如,网络服务器的操作系统中的系统配置文件、系统提供的工具、共享库文件等。这里的“公共资源”具有“公共属性”,不专属于某个虚拟主机,而可能由两个或多个虚拟主机共同使用,甚至网络服务器下的所有虚拟主机均会使用。

步骤S14:建立所述公共资源利用目录与网络服务器根目录之下的公共资源共享目录之间的映射关系,以形成虚拟主机用于运行进程的容器,通过所述容器实现虚拟主机之间的隔离。

在虚拟主机的根目录下创建了公共资源利用目录后,还需要给这些目录赋予“内容”,但是,由于公共资源是多个虚拟主机要共享的,如果每一个虚拟主机下的公共资源利用目录均直接将公共资源复制到(或者自身重新建立)自身根目录之下,那么将导致网络服务器的整个目录结构体系非常臃肿,为了避免这种情况的出现,本实施例采取的方式是在虚拟主机的公共资源利用目录与网络服务器根目录之下的公共资源共享目录之间建立映射关系,这样在某些进程要使用虚拟主机的公共资源利用目录时,便可通过这种映射关系“链接”到网络服务器根目录之下的公共资源共享目录。在实际应用过程中,可以有多种创建这种映射关系的方式,比如,在Linux操作系统中,可以通过调用目录挂载函数(比如,mount系统调用的bind功能)将一个目录挂载到另一个目录下,从而实现两类目录之间映射关系的建立。

本实施例通过前述步骤为虚拟主机建立了独立的目录结构体系,使其根目 录与其他虚拟主机的根目录各自隔离,而不在共同拥有网络服务器的根目录,而且,对公共资源的利用也仅仅直接映射到网络服务器的根目录下的公共资源共享目录,而不会与其他虚拟主机的根目录下的公共资源利用目录发生关联,从而将虚拟主机的访问权限限制在一个固定的目录下,这种方式使各个虚拟主机之间形成了一个较为独立的容器,通过该容器将不同的虚拟主机之间进行了有效隔离,达到一个虚拟主机下的进程无法访问另一个虚拟主机下的资源的目的。

下面结合图3进行详细说明。图3示出了本申请实施方式针对Linux系统的一种形象化实施过程。在网络服务器的目录结构体系中,对于“alice”这个虚拟主机而言,其原本的目录结构体系是“alice/etc/、alice/dev/、alice/lib/、alice/htdocs/”等,这些目录均以网络服务器的根目录“/”为根目录,但是,通过根目录改变函数choor(“home/alice”)可以将alice虚拟主机的根目录改变为“/home/alice/”,相当于将“/home/alice/”整体看成虚拟主机原来所视为的根目录“/”,即如图3中实线箭头所示,通过这个新的根目录相当于在虚拟主机上建立了与alice虚拟主机对应的一个容器(alice’s container),该容器与其他虚拟主机是相互隔离的。此外,在虚拟主机的根目录之下,还可以建立“etc/、dev/、lib/、htdocs/”等目录,这些目录可以按照性质划分为两类:一类是在虚拟机内部使用且不依赖于虚拟主机之外的其他目录的目录,在本例中即专属于“alice”虚拟主机的目录;一类是在虚拟主机内部使用但使用过程必须依赖于虚拟主机之外的其他目录的目录。对于第二类目录,必须建立与当前虚拟主机以外的目录与虚拟主机相应目录之间的映射关系,这样,在需要利用到虚拟主机下的这些目录时,便可通过映射关系“链接”到当前虚拟主机以外的其他目录。虚拟主机上的公共资源利用目录即属于第二类目录。虚拟主机上的公共资源利用目录在使用过程中需要借助于网络服务器提供的公共资源共享目录,为此需要建立当前虚拟主机的公共资源利用目录与网络服务器的公共资源共享目录之间的映射关系,即如图3中的虚箭头所示。

本申请实施例提供的虚拟主机隔离方法,使虚拟主机建立(或拥有)属于虚拟主机自身的目录体系,在虚拟主机内建立(或拥有)用于运行进程的容器,与现有技术相比,通过该方式使利用网络服务器资源和/或虚拟主机资源的进程的根目录为虚拟主机的根目录,且运行在容器内,具有较大的独立性,不会和其他虚拟主机的进程发生相互干扰,从而确保了虚拟主机之间的安全隔离。

在上述实施例中,通过对虚拟主机根目录的变化以及公共资源利用目录的建立,形成了与虚拟主机对应的容器(该容器从虚拟主机的用户的维度进行创建,把不同虚拟主机的进程和资源分配在不同的容器内),使不同虚拟主机之间通过容器实现了隔离。在实际应用过程中,还可以通过进程命名空间(PID Namespace)进行更深层的隔离(比如,进程级别的隔离)。具体地,可以使在虚拟主机容器内运行的全部进程具有统一(相同)的进程命名空间,但在该命名空间内每个进程具有不同的进程ID(进程标识),可以通过进程ID来实现检索,而在虚拟主机与虚拟主机之间进程命名空间则各不相同,这样,不同虚拟主机内运行的进程便可以相互隔离,从而不会出现一个虚拟主机的进程可以杀掉、调试另外一个虚拟主机内的进程。需要注意的是,虽然在不同容器内的进程命名体系不同,但并不意味着不同容器的进程在功能、结构、作用等方面一定存在差异,也就是说,可能存在这样一种情形,一个进程可以加入多个容器,从而具有多个独立的PID Namespace。

与虚拟主机的目录结构体系相对应的,容器的进程命令体系也可能形成一个命名空间树,不同虚拟主机容器内的进程可以位于PID Namespace树中同一级的不同的PID Namespace中,而网络服务器的进程命名体系对应地可以是所有虚拟主机的PID Namespace的父Namespace,这样网络服务器可以看见所有虚拟主机下容器内的进程,但某个虚拟主机则无法看到别的虚拟主机或网络服务器上的进程。

在上述这种虚拟主机的隔离方法之下,形成了与虚拟主机对应的容器,该容器内可以用于运行各种利用网络服务器和/或虚拟主机资源的进程。要使进 程在虚拟主机的容器内运行可以通过多种方式实现,具体采用哪种方式取决于进程自身的情况。比如,如果某个进程先前(或者现有技术中)是在容器外(或者没有容器的情形下)运行的,则可以将该进程放入到容器内运行,具体地,将待在虚拟主机内运行的进程的原始根目录修改为虚拟主机的根目录,以及将待在虚拟主机内运行的进程的进程标识修改为按照虚拟主机的进程命名空间命名的进程标识。通过对进程的原始根目录和进程标识进行修改,实现了该进程对容器的适应,从而达到了将进程放入虚拟主机容器内运行的目的。

还比如,在某些情况下,虚拟主机的容器内具有容器管理器进程,该容器管理器进程的根目录为虚拟主机的根目录,容器管理器进程也按照虚拟主机的进程命名空间命名进程标识(这些工作可以在容器管理器进程创建时进行完毕),这时,要使利用网络服务器和/或虚拟主机资源的一个或多个进程在虚拟主机的容器内运行可以采取如下方式:继承所述容器管理器进程,以生成在虚拟主机的容器内运行的利用网络服务器和/或虚拟主机资源的一个或多个进程。通过对容器管理器进程进行继承,容器管理器进程的根目录以及进程命名空间也将继承在生成的新进程之中,从而实现了该进程对容器的适应,达到在虚拟主机容器内运行的目的。

通过上述虚拟主机的隔离方法的实施例的描述可以看出,实际上已经形成了一种独特的虚拟主机,该虚拟主机包括用于运行进程的容器,包括这种容器的虚拟主机至少具有如下两个特点,一是该容器的根目录为虚拟主机的根目录,所述虚拟主机的根目录为所述虚拟主机在网络服务器的根目录之下与所述虚拟主机对应的目录中的最上层目录,二是在所述虚拟主机的根目录下具有公共资源利用目录,所述公共资源利用目录与网络服务器的根目录之下的公共资源共享目录之间具有映射关系。在这种虚拟主机中,虚拟主机用户需要的系统资源在容器中,利用资源的进程也在虚拟主机容器内运行,不在当前虚拟主机容器中的资源对于当前虚拟主机而言,不可见,这一方面使得在当前虚拟主机 容器内运行的进程仅能访问到该虚拟主机容器内的资源,而不能访问到其他虚拟主机中的资源,另一方面在其他虚拟主机中运行的进程也无法访问到该虚拟主机的进程,从而真正实现了不同虚拟主机之间的隔离。

在上述这种虚拟主机中,虚拟主机容器内可以运行一个或多个进程,这些进程可以为一种“平等”地位关系,也可以为“不平等”的地位关系。在“平等”的情形下,如果同时在容器内运行有多个进程,就容器内的各个进程而言,这些进程在相同进程命名空间内具有不同的进程标识,就当前容器与其他容器内的进程而言,各个进程具有不同的进程命名空间。在“不平等”的情形下,可以设置一个容器管理器进程(CPM,Container Process Manager),由该进程来管理容器内的各个进程。比如,将CPM进程作为祖先进程,在容器内运行的其他进程都根据该进程产生,从中继承包括进程根目录和进程命名空间在内的属性(该过程可以成为“fork”过程),通过这种fork过程可以保证容器内运行的所有进程都在容器内。通过这种方式产生的多个进程之间地位不平台,CPM进程处于管理地位,其他进程为CPM进程的子进程。

上述内容详细描述了网络服务器上的不同虚拟主机之间的安全隔离方法以及由此形成的独特的虚拟主机。在上述这种虚拟主机上,可以实现对来自客户端的资源访问请求的处理。通常而言,在网络服务器上,存在两类不同性质的资源:一是静态资源,比如,HTML文件、CSS文件、JS文件、图片文件等,这些文件资源可以由网络服务器直接读取,并返回给资源访问请求的发起端(比如,客户端);二是动态资源(又称为脚本),这类资源需要由网络服务器上的脚本解释器进行解释运行,经过解释运行后产生的结果作为输出内容通过网络服务器返回给客户端。这两类资源的性质不同,给网络服务器带来的安全性程度存在差异。对于静态资源而言,由于不需要通过网络服务器上的某个程序(进程)进行解释运行,不进行诸如运算、加工、处理等工作,而是直接由网络服务器反馈给客户端,因此,相对比较安全,即使静态资源中已带有病 毒、木马等危险程序,因网络服务器本身不对该资源进行执行操作,将不会对网络服务器造成安全威胁。但是,对于动态资源而言,则存在较大差别,其需要执行解释运行操作,在执行过程中可能导致系统的配置权限被改变、动态资源上携带的病毒程序被引发感染到网络服务器(的虚拟主机),如果对此不加以控制,将存在极大的安全风险。

为此,本申请还提供了一种资源访问请求处理方法的实施例,该处理方法应用于包括前述所述的虚拟主机的网络服务器。参见图4,该图示出了本申请的资源访问请求处理方法的一种实施例的流程图,该流程包括:

步骤S41:接收网络服务器转发的访问动态资源的资源访问请求,所述资源访问请求包括待访问的动态资源所在的虚拟主机的标识;

步骤S42:在虚拟主机的容器内处理所述访问动态资源的资源访问请求,将处理结果返回给所述网络服务器,以便网络服务器返回给发送所述资源访问请求的请求端。

在该实施例中,由于是将动态资源访问请求的处理安排在虚拟主机的容器内进行处理,而虚拟主机相互之间通过容器进行了隔离,这样便保证了虚拟主机的安全。在上述资源访问请求的处理实施例中主要是从网络服务器的某个虚拟主机的角度对其过程进行描述,实际上,整个处理流程还可以站在网络服务器的角度进行描述,从而形成又一个实施例(参见图5):

首先是网络服务器接收到来自客户端的资源访问请求,该资源访问请求中包括待访问的动态资源所在的虚拟主机的标识,然后,由网络服务器对该访问请求的类型进行判断,如果该资源访问请求是动态资源请求,则根据动态资源访问请求中的虚拟主机的标识信息转发到对应的虚拟主机上。该虚拟主机接收到该动态资源访问请求后,在容器内运行脚本解释器,利用该脚本解释器进行解释运行。然后将解释运行的结果反馈给网络服务器,由网络服务器将结果反馈给发送资源访问请求的客户端。

在前述资源访问请求实施例中,提到在虚拟主机的容器内处理访问动态资 源的资源访问请求。在实际应用过程中,可能存在多种资源访问请求的处理方式,不同的处理方式与处理资源访问请求的进程有关。下面示例性地给出两种实施方式,本领域技术人员可以在此基础上得到其他的实施方式,这些实施方式均在本申请的保护范围之内。

示例性实施方式之一:改造现有脚本解释器的方式。动态资源访问请求需要脚本解释器的解释执行作用,才能获得相应的响应结果。参见图6(a),在这种方式中,现有的脚本解释器在虚拟主机中启动,但是,该脚本解释器并不当然在虚拟主机创建的容器内运行,为了将该脚本解释器放入虚拟主机的容器内运行,需要将脚本解释器的原始根目录修改为虚拟主机的根目录,以及将脚本解释器进程的进程标识修改为按照虚拟主机的进程命名空间命名的进程标识,从而使脚本解释器进程在虚拟主机的容器内运行,这样,便可以利用该改造后的脚本解释器进程处理动态资源访问请求。这种方式由于将脚本解释器放入到了虚拟主机的容器内,而容器具有较高的安全性,从而保证了动态资源访问的安全性。

示例性实施方式之二:生成新脚本解释器的方式。在上一种示例性实施方式中,通过改变脚本解释器的根目录和进程命名空间实现了动态资源访问请求的安全处理。但是,这种方式需要修改脚本解释器的源代码,侵入性较强,耦合性较高。而且,对于不同的动态资源访问请求,还需要维护多个脚本解释器版本。为了降低系统耦合度,本申请提供了另外一种方式,参见图6(b),该方式在虚拟主机的容器内具有容器管理器进程,该容器管理器进程的根目录为虚拟主机的根目录,容器管理器进程的进程标识按照虚拟主机的进程命名空间命名,这种情况下,在接收到网络服务器转发的访问动态资源的资源访问请求后,继承容器管理器进程,以生成一个脚本解释器(为了语言叙述上的方便,该新生成的脚本解释器可以称为第二脚本解释器,前述示例性方式中称为第一脚本解释器),从而通过该新的脚本解释器进行动态资源访问请求的处理。

在上述第二种示例性实施方式中提及存在一个CPM进程(容器管理器进程)。通常而言,该进程可以通过虚拟主机作为“桥梁”与网络服务器(网络服务器进程)实现通信,即网络服务器接收到客户端的资源访问请求后,由于该请求中具有待访问资源在哪个虚拟主机的标识(对于动态资源而言,如果访问的资源是静态资源,资源访问请求中为该资源所在位置的地址信息),从而可以将访问请求传递到虚拟主机上,再由虚拟主机将该请求交给该虚拟主机的容器管理器进程,进而启动容器管理器进程进行新脚本解释器的生成步骤,以及随后利用生成的脚本解释器对资源访问请求的处理步骤,从而实现动态资源的处理。

上述通过虚拟主机的桥梁作用实现了网络服务器与CPM进程之间的通信,但是,为了减少通信的中间环节以及增强安全性,在本申请的另一个实施例中,可以在网络服务器与CPM进程之间建立直接的通信关系,从而可以在网络服务器接收到资源访问请求后,如果该资源访问请求是对动态资源的访问请求,那么可以由网络服务器直接将需要脚本解释器运行器进行的工作委托给CPM进程。基于此,需要建立网络服务器与CPM之间的通信协议。在本申请中,可以按照如下方式进行建立:

CPM进程向网络服务器发送容器管理器进程的注册请求,该注册请求包括所述容器管理器进程的进程标识以及虚拟主机的标识;

网络服务器接收到注册请求后,建立所述容器管理器进程的进程标识与所述虚拟主机的标识之间的对应关系,比如,记录CPM进程的进程标识和虚拟主机的标识,然后向CPM进程发送注册成功的消息。

经过上述注册过程,如果网络服务器接收到资源访问请求后,经判断,该资源访问请求是动态资源访问请求,则根据所述对应关系直接将该请求转发给相应的CPM进程,CPM接收到该请求后,根据CPM进程创建脚本解释器进程,然后运行脚本,再将运行结果返回给网络服务器,在网络服务器收到CPM返回结果后,响应客户端的请求。上述资源访问请求的处理过程以及CPM进 程的注册过程可以通过图7反映出来,其中:图7(a)为本申请的资源访问请求处理方法的再一个实施例的流程示意图,图7(b)为本申请的资源访问请求处理过程的信令交互图。在该图中,如果资源访问请求为对静态资源的访问,则可以如图所示,由网络服务器直接读取静态文件的内容,然后将其作为结果响应请求端。

上述内容详细叙述了本申请基于隔离的虚拟主机进行资源访问请求方法实施例,与此对应地,本申请还提供了资源访问请求处理的装置实施例。参见图8,该图示出了本申请的资源访问请求处理装置的结构框图。该处理装置应用于包括前述所述的虚拟主机的网络服务器,该装置包括访问请求接收单元U81和访问请求处理单元U82,其中:

访问请求接收单元U81,用于接收网络服务器转发的访问动态资源的资源访问请求,所述资源访问请求包括待访问的动态资源所在的虚拟主机的标识;

访问请求处理单元U82,用于在虚拟主机的容器内处理所述访问动态资源的资源访问请求,将处理结果返回给所述网络服务器,以便网络服务器返回给发送所述访问请求的请求端。

上述资源访问请求处理装置的工作过程是:访问请求接收单元U81接收网络服务器转发的访问动态资源的资源访问请求,然后,由访问请求处理单元U82在虚拟主机的容器内处理所述访问动态资源的资源访问请求,将处理结果返回给所述网络服务器,以便网络服务器将其返回给发送所述资源访问请求的请求端。该处理装置将对动态资源的访问请求在虚拟主机创建的容器内进行处理,而虚拟主机之间通过容器实现了隔离,从而改善或提高了资源访问请求处理过程的安全性能。

尽管上述装置实施例已能较好地实现本申请的发明目的,但是,基于各种实际应用需要,可以对上述装置实施例进行改进,从而进一步优化上述装置实施例的技术效果。对上述装置实施例的改进可以采取多种方式,比如,对于访 问请求处理单元,可以包括第一脚本解释器进程创建子单元和第一访问请求处理子单元U82,其中:所述第一脚本解释器进程创建子单元,用于将第一脚本解释器的原始根目录修改为所述虚拟主机的根目录,以及将所述第一脚本解释器进程的进程标识修改为按照所述虚拟主机的进程命名空间命名的进程标识,以使第一脚本解释器进程在所述虚拟主机的容器内运行;所述第一访问请求处理子单元,用于通过在虚拟主机的容器内运行的第一脚本解释器进程处理所述访问动态资源的资源访问请求。这种方式将原有的脚本解释器进行了改造,从而适应了虚拟主机的容器,能够在容器内处理访问请求,保证了安全性。

除了上述这种对访问请求的处理外,在实际应用过程中,对于访问请求处理单元U82,在某些情况下,比如在虚拟主机的容器内具有容器管理器进程,所述容器管理器进程的根目录为虚拟主机的根目录、进程标识按照当前虚拟主机的进程命名空间命名进程标识的情况下,访问请求处理单元U82可以包括第二脚本解释器进程创建子单元U821和第二访问请求处理子单元U822,其中:

第二脚本解释器进程创建子单元U821,用于在接收到网络服务器转发的访问动态资源的资源访问请求后,继承所述容器管理器进程,以生成第二脚本解释器进程;

第二访问请求处理子单元U822,用于通过在虚拟主机的容器内运行的第二脚本解释器进程处理所述访问动态资源的资源访问请求。

上述这种访问请求处理单元的结构相对于对现有的脚本解释器具有较多好处,比如,不需要对脚本解释器的源代码本身进行修改,侵入性较弱、耦合性较低。在这种访问请求处理单元结构的情况下,上述装置实施例还可以包括注册单元,用于在接收到网络服务器转发的访问动态资源的资源访问请求之前,向网络服务器发送所述容器管理器进程的注册请求,所述注册请求包括所述容器管理器进程的进程标识以及虚拟主机的标识;所述访问请求接收单元U82,还具体用于接收网络服务器在建立所述容器管理器进程的进程标识与所 述虚拟主机的标识之间的对应关系后发送的注册成功消息,以便在接收到所述注册成功消息后,接收网络服务器根据所述对应关系转发给所述容器管理器进程的访问动态资源的资源访问请求。

本领域内的技术人员应明白,本发明的实施例可提供为方法、装置或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备、装置和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或 闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1