一种用户空间文件系统中ACL权限的实现方法与流程

文档序号:13767428阅读:249来源:国知局

本发明涉及分布式文件系统技术领域,特别是涉及一种用户空间文件系统中ACL权限的实现方法。



背景技术:

目前,FUSE(FilesysteminUserspace)是用户空间文件系统,提供用于实现用户态文件操作实现的接口。传统的文件系统都是定义在操作系统内核层面上,要操作系统识别一种新的文件系统必须重写内核。FUSE为客户端挂载并使用分布式文件系统提供了一种可行方案,用户在使用FUSE时候有两种开发模式:一种是high_level模式,此模式下fuse的入口函数为fuse_main,它封装了一系列初始化操作,使用简单,但是不灵活;另一种是low_level模式,用户可以利用FUSE提供的底层函数灵活开发应用程序。但是,在low_level模式下实现的文件操作缺少有效的ACL(AccessControlList)权限控制机制,安全性很低。



技术实现要素:

本发明的目的是提供一种用户空间文件系统中ACL权限的实现方法,以实现有效地对用户空间文件系统的文件操作提供访问控制机制,提升安全性。

为解决上述技术问题,本发明提供一种用户空间文件系统中ACL权限的实现方法,该方法包括:

引用原属于内核模块中的Posix_acl.c文件和Posix_acl.h文件,将权限校验方法封装在PosixACL中,使PosixACL变为权限校验类;

在用户态文件系统的client.cc文件的client类中添加权限校验类PosixACL;

当接收到文件操作请求时,通过所述client类中permission_walk方法将与所述文件操作请求对应的用户参数传递给所述权限校验类PosixACL,利用所述权限校验类PosixACL中的权限校验方法对所述文件操作请求进行权限验证。

优选的,所述引用原属于内核模块中的Posix_acl.c文件和Posix_acl.h文件,将权限校验方法封装在PosixACL中,使PosixACL变为权限校验类之后,还包括:

将权限校验类PosixACL的命名空间设置为posix,完成权限校验类PosixACL与client类的对接;所述client类位于用户态文件系统的client.cc文件中。

优选的,所述利用所述权限校验类PosixACL中的权限校验方法对所述文件操作请求进行权限验证之后,还包括:

若验证成功,将所述文件操作请求发送至集群服务器,若验证失败,返回验证失败消息。

优选的,所述在用户态文件系统的client.cc文件的client类中添加权限校验类PosixACL之前,还包括:

关闭所述用户空间文件系统FUSE中内核模块的默认校验开关。

优选的,所述关闭所述用户空间文件系统FUSE中内核模块的默认校验开关,包括:

将所述用户空间文件系统FUSE中内核模块的默认权限参数fuse_default_permissions设置为false。

优选的,所述权限校验类PosixACL为基于Posix标准的ACL校验类。

优选的,所述在用户态文件系统的client.cc文件的client类中添加权限校验类PosixACL之后,还包括:

在client.cc文件中的setxattr函数和removexattr函数中均添加检查参数strncmp。

优选的,在client.cc文件中的setxattr函数和removexattr函数中均添加检查参数strncmp之后,还包括:

对操作接口fuse_lowlevel_ops里的校验添加宏开关。

优选的,所述对操作接口fuse_lowlevel_ops里的校验添加宏开关之后,还包括:

修改Makefile.am的编译文件列表,重新编译。

本发明所提供的一种用户空间文件系统中ACL权限的实现方法,引用原属于内核模块中的Posix_acl.c文件和Posix_acl.h文件,将权限校验方法封装在PosixACL中,使PosixACL变为权限校验类;在用户态文件系统的client.cc文件的client类中添加权限校验类PosixACL;当接收到文件操作请求时,通过所述client类中permission_walk方法将与所述文件操作请求对应的用户参数传递给所述权限校验类PosixACL,利用所述权限校验类PosixACL中的权限校验方法对所述文件操作请求进行权限验证。可见,将权限校验方法封装在PosixACL中,使PosixACL变为权限校验类,并在client类中添加权限校验类PosixACL,然后利用在client类中添加的权限校验类PosixACL来对文件操作请求进行权限验证,这样实现ACL权限,完成对文件操作的权限验证,如此针对用户空间文件系统的用户态系统即用户空间实现ACL权限验证机制,增加系统安全性,所以实现有效地对用户空间文件系统的文件操作提供访问控制机制,提升安全性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明所提供的一种用户空间文件系统中ACL权限的实现方法的流程图;

图2为ACL权限流程示意图;

图3为用户空间文件系统FUSE实现流程;

图4为Open()函数中的ACL权限实现流程。

具体实施方式

本发明的核心是提供一种用户空间文件系统中ACL权限的实现方法,以实现有效地对用户空间文件系统的文件操作提供访问控制机制,提升安全性。

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

请参考图1,图1为本发明所提供的一种用户空间文件系统中ACL权限的实现方法的流程图,该方法包括:

S11:引用原属于内核模块中的Posix_acl.c文件和Posix_acl.h文件,将权限校验方法封装在PosixACL中,使PosixACL变为权限校验类;

其中,PosixACL原本就是类,这里的PosixACL即指代PosixACL类,将在Posix_acl.c中实现的权限校验方法封装在PosixACL类中,PosixACL类变为权限校验类,能够执行权限校验方法。

S12:在用户态文件系统的client.cc文件的client类中添加权限校验类PosixACL;

S13:当接收到文件操作请求时,通过client类中permission_walk方法将与文件操作请求对应的用户参数传递给权限校验类PosixACL,利用权限校验类PosixACL中的权限校验方法对文件操作请求进行权限验证。

基于上述方法,具体的,权限校验类PosixACL为基于Posix标准的ACL校验类。

Posix_acl.c和Posix_acl.h是原属于FUSE内核模块的文件,因为绕过了内核文件系统,现在把这两个文件拿出来复用,并在其中实现Posix_acl类。Client.cc文件是负责与分布式文件系统通信的,client.cc中的Client类中添加PosixACL类的指针,并在构造函数中完成PosixACL的实例化。即在实现操作接口的client.cc文件中添加权限校验类PosixACL,命名空间定义为posix,其方法是直接引用内核模块Posix_acl.cc和Posix_acl.h这两个文件,在头文件中进行封装完成与client.cc的对接。

用户空间文件系统FUSE由FUSE内核模块、守护进程libfuse和FUSE用户态文件系统三部分组成。上述的内核模块即指代FUSE内核模块,用户态文件系统即指代FUSE用户态文件系统。Client.cc文件、posix_acl.cc文件及fuse_ll.cc文件均位于FUSE用户态文件系统顶层模块。FUSE内核模块由操作系统提供,用于和用户空间对接。fuse_ll.cc中自定义用户文件系统的文件操作函数。

具体的,引用原属于内核模块中的Posix_acl.c文件和Posix_acl.h文件,将权限校验方法封装在PosixACL中,使PosixACL变为权限校验类之后,将权限校验类PosixACL的命名空间设置为posix,完成权限校验类PosixACL与client类的对接;client类位于用户态文件系统的client.cc文件中。

其中,利用权限校验类PosixACL中的权限校验方法对文件操作请求进行权限验证之后,若验证成功,将文件操作请求发送至集群服务器,若验证失败,返回验证失败消息。

其中,在用户态文件系统的client.cc文件的client类中添加权限校验类PosixACL之前,关闭用户空间文件系统FUSE中内核模块的默认校验开关。关闭用户空间文件系统FUSE中内核模块的默认校验开关的过程具体为:将用户空间文件系统FUSE中内核模块的默认权限参数fuse_default_permissions设置为false。

其中,在用户态文件系统的client.cc文件的client类中添加权限校验类PosixACL之后,在client.cc文件中的setxattr函数和removexattr函数中均添加检查参数strncmp。

在client.cc文件中的setxattr函数和removexattr函数中均添加检查参数strncmp之后,对操作接口fuse_lowlevel_ops里的校验添加宏开关。

对操作接口fuse_lowlevel_ops里的校验添加宏开关之后,修改Makefile.am的编译文件列表,重新编译。

详细的,本发明涉及一些内核源代码中配置参数的设置,以及在实现的接口方法中对内核提供的基于Posix标准的ACL校验类进行封装,在自定义文件操作方法中添加宏开关对操作请求的发起者的权限进行判断验证。通过本方法能够在用户空间文件系统实现ACL权限访问控制,传统的文件系统ACL的目的是在提供传统的owner,group,other的r,w,x的九个权限位之外细部权限配置,而分布式文件系统在用户空间挂载之后同样面临这样的需求。

基于安全性的考虑,通常程序设计使用最小特权模型,此时如果想要给予某些组外用户额外权限又不破坏既有的安全环境,ACL无疑是一种最佳的选择。特别地,集群使用以太网环境代替传统的本地文件系统进行数据访问,一旦特权开放将导致严重的安全性损害。

本方法在不违背最小特权模型的情况下,可以为部分指定用户提供额外的权限,有效的保护的程序的安全性,并且,客户端通过FUSE挂载集群,在用户空间实现自定义的文件操作,可以像使用本地文件系统一样使用集群提供的文件系统空间。而集群文件系统使用以太网替代本地文件进行数据传输,使用ACL方法要比开放特权更能有效地防止以太网中的用户恶意使用特权对程序造成攻击。

对于FUSE用户空间文件系统,FUSE的调用流程可以简单的用图2表示,图2为用户空间文件系统FUSE实现流程。假设集群挂载在本地目录/tmp/fuse下,用户对该目录下的文件发起一个读请求。首先,操作系统接收到用户请求后调用VFS系统接口陷入内核空间,VFS根据请求判断出需要访问的文件系统,在挂载文件系统时已经完成特殊文件/dev/fuse的注册,使得操作系统可以像访问本地文件系统EXT4、FAT32、NTFS一样的进行访问。内核模块将发送的请求维持在/dev/fuse的请求队列上,在用户空间开启一个守护进程libfuse不停的循环读取请求,请求读出后调用自定义的请求处理函数进行处理,然后将处理后的结果按照逆方向返回内核,用户请求结果返回。本发明中,ACL权限的实现方法即为用户态ACL实现的过程,是在实现操作接口的client.cc文件中添加权限校验类PosixACL,命名空间定义为posix,如此直接引用内核模块Posix_acl.cc和Posix_acl.h这两个文件,在头文件中进行封装完成与client.cc的对接。文中的Posix_acl.cc即指代Posix_acl.c。

具体的,基于本发明提供的上述方法,具体实施过程如下:

1、关闭fuse内核模块的默认校验开关,即fuse_default_permissions参数置为false。因为内核默认校验打开会对用户空间ACL校验产生影响,例如切换用户后由原用户创建的文件权限发生改变。

2、在实现操作接口函数的client.cc文件中添加权限校验类PosixACL,实现内核与用户态的对接。

3、在client.cc里的setxattr和removexattr函数中添加strncmp检查,如果不添加检查会检测不到文件被设置ACL权限。

4、对fuse_lowlevel_ops的操作接口里的校验添加宏开关,便于调试与修改。

5、修改Makefile.am的编译文件列表,重新编译。

详细的,图3为ACL权限流程示意图,FUSE内核模块接收到文件操作请求,会将文件操作请求传输至FUSE用户态文件系统中的守护进程Libfuse,Libfuse将文件操作请求发送至FUSE用户态文件系统中的client.cc文件,client.cc文件利用fuse_ll.cc调用封装在Posix_acl.c中的权限校验类PosixACL,采用权限校验类PosixACL对文件操作请求进行权限验证,若验证成功,fuse_ll.cc将文件操作请求发送至集群服务器,若验证失败,返回验证失败消息,一直反馈至FUSE内核模块。验证成功后,集群服务器接收文件操作请求,将文件操作请求的处理结果返回至fuse_ll.cc,一直返回至FUSE内核模块。

详细的,以open系统调用为例,流程如图4所示,图4为Open()函数中的ACL权限实现流程。当用户在文件系统目录下执行open()操作,VFS会调用fuse通过fuse_lowlevel_ops注册到内核中的函数接口,而最终的实现在用户自定义的xxx_open()函数中完成。在该函数中调用PosixACL类的permission_walk()方法,在permission_walk()方法中将会调用xxx_getxattr()函数与集群元数据节点通信获取目标文件的inode号、文件属性等信息,并保存在内存空间备用;然后判断xxx_getxattr()函数的返回值,若大于零执行ACL权限校验;否则,执行传统的UGO权限校验。

综上,本发明所提供的一种用户空间文件系统中ACL权限的实现方法,引用原属于内核模块中的Posix_acl.c文件和Posix_acl.h文件,将权限校验方法封装在PosixACL中,使PosixACL变为权限校验类;在用户态文件系统的client.cc文件的client类中添加权限校验类PosixACL;当接收到文件操作请求时,通过client类中permission_walk方法将与文件操作请求对应的用户参数传递给权限校验类PosixACL,利用权限校验类PosixACL中的权限校验方法对文件操作请求进行权限验证。可见,将权限校验方法封装在PosixACL中,使PosixACL变为权限校验类,并在client类中添加权限校验类PosixACL,然后利用在client类中添加的权限校验类PosixACL来对文件操作请求进行权限验证,这样实现ACL权限,完成对文件操作的权限验证,如此针对用户空间文件系统的用户态系统即用户空间实现ACL权限验证机制,增加系统安全性,所以实现有效地对用户空间文件系统的文件操作提供访问控制机制,提升安全性。

以上对本发明所提供的一种用户空间文件系统中ACL权限的实现方法进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

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