一种基于文件描述符和会话的权限控制方法和系统与流程

文档序号:11524306阅读:248来源:国知局
一种基于文件描述符和会话的权限控制方法和系统与流程

本发明涉及访问权限管理技术领域,特别是涉及一种基于文件描述符和会话的权限控制方法和系统。



背景技术:

随着科学技术的发展,越来越多的互联网用户通过远程访问的方式来获取外部网络的共享资源。想要实现远程访问,就需要用户的客户端通过远程登录的方式连接到服务器,然后由服务器调取数据库中的相应信息返回至客户端。

然而,在互联网应用中,服务器为不同的用户提供不同的服务,即不同的客户端具有不同的相应访问权限。各客户端只能在自身的访问权限范围内获取数据库中的信息。通常情况下,当用户在进行远程访问时,服务器进行系统调用权限的判断,通常情况下直接作用于文件系统的数据(文件和目录)和数据库连接,所谓的系统调用指的是进程陷入操作系统内核执行系统功能的调用,如创建文件、修改文件和执行程序。而系统权限通常指的是系统调用时的权限,典型情况下,权限通常由文件属性和进程运行的所属用户组决定。当进程执行系统调用时就会受到进程用户和文件的属性的局限。

因而,如何实现当进程执行系统调用时不局限于进程用户和文件的属性而进行权限的控制,是本领域技术人员目前需要解决的技术问题。



技术实现要素:

本发明的目的是提供一种基于文件描述符和会话的权限控制方法和系统,可以实现当进程执行系统调用时不局限于进程用户和文件的属性而进行权限的控制。

为解决上述技术问题,本发明提供了如下技术方案:

一种基于文件描述符和会话的权限控制方法,包括:

预先在接收系统调用的新连接信息时,建立与该新连接信息关联的连接文件描述符和会话,并通过该连接文件描述符对该会话进行标记;

在应用程序的进程进行系统调用时,根据相应的连接文件描述符对所述系统调用按会话进行识别;

对所述系统调用的所属当前会话的会话权限进行识别;

根据所述当前会话对应的会话权限控制当前系统调用。

优选地,所述预先在接收系统调用的新连接信息时,建立与该新连接信息关联的连接文件描述符和会话,并通过该连接文件描述符对该会话进行标记,包括:

预先在接收系统调用的新连接信息时,建立与该新连接信息关联的连接文件描述符;

建立与所述新连接信息关联的会话;

将各所述连接文件描述符一一映射到一个会话或者空会话中。

优选地,所述在应用程序的进程进行系统调用时,根据相应的连接文件描述符对所述系统调用按会话进行识别,包括:

在应用程序的进程进行系统调用时,判断当前系统调用是否包含预设的连接文件描述符;

若是,则更新所述系统调用所属的当前会话为该预设的连接文件描述符所映射的会话;

执行当前系统调用;

判断当前系统调用是否产生了异于所述预设的连接文件描述符的新连接文件描述符;

若是,则将该新连接文件描述符映射到当前会话。

优选地,所述对所述系统调用的所属当前会话的会话权限进行识别,包括:

获取所述系统调用的所述当前会话的发起终端的ip地址;

根据所述ip地址和预设的角色配置信息,识别所述当前会话的所属角色;

根据所述当前会话的所属角色,调取该角色对应的会话权限配置。

优选地,所述对所述系统调用的所属当前会话的会话权限进行识别,包括:

判断所述当前会话的会话信息中是否包含预设的会话角色认证信息;

若是,则获取所述会话角色认证信息,并根据所述会话角色认证信息识别分析出该会话信息的发起终端的角色,获取该角色的会话权限配置。

优选地,所述对所述系统调用的所属当前会话的会话权限进行识别,包括:

预先建立用于预设角色通讯的虚拟通讯网络隧道;

对所述当前会话的来源隧道进行识别,以判断所述当前会话所属的角色;

根据所述当前会话所属的角色调取对应的会话权限配置。

一种基于文件描述符和会话的权限控制系统,包括:

预处理模块,用于预先在接收系统调用的新连接信息时,建立与该新连接信息关联的连接文件描述符和会话,并通过该连接文件描述符对该会话进行标记;

识别模块,用于在应用程序的进程进行系统调用时,根据相应的连接文件描述符对所述系统调用按会话进行识别;

权限识别模块,用于对所述系统调用的所属当前会话的会话权限进行识别;

系统调用模块,用于根据所述当前会话对应的会话权限控制当前系统调用。

优选地,所述预处理模块包括:

描述符构建单元,用于预先在接收系统调用的新连接信息时,建立与该新连接信息关联的连接文件描述符;

会话构建单元,用于建立与所述新连接信息关联的会话;

第一映射单元,用于将各所述连接文件描述符一一映射到一个会话或者空会话中。

优选地,所述识别模块包括:

第一判断单元,用于在应用程序的进程进行系统调用时,判断当前系统调用是否包含预设的连接文件描述符;

会话更新单元,用于在判定当前系统调用包含预设的连接文件描述符时,更新所述系统调用所属的当前会话为该预设的连接文件描述符所映射的会话;

执行单元,用于执行当前系统调用;

第二判断单元,用于判断当前系统调用是否产生了异于所述预设的连接文件描述符的新连接文件描述符;

第二映射单元,则将该新连接文件描述符映射到当前会话。

优选地,所述权限识别模块包括:

第一获取单元,用于获取所述系统调用的所述当前会话的发起终端的ip地址;

角色识别单元,用于根据所述ip地址和预设的角色配置信息,识别所述当前会话的所属角色;

第一权限调取单元,用于根据所述当前会话的所属角色,调取该角色对应的会话权限配置。

优选地,所述权限识别模块包括:

第三判断单元,用于判断所述当前会话的会话信息中是否包含预设的会话角色认证信息;

第二获取单元,用于在所述第三判断单元判定所述当前会话的会话信息中包含预设的会话角色认证信息时,获取所述会话角色认证信息,并根据所述会话角色认证信息识别分析出该会话信息的发起终端的角色,获取该角色的会话权限配置。

优选地,所述权限识别模块包括:

通讯隧道建立单元,用于预先建立用于预设角色通讯的虚拟通讯网络隧道;

来源隧道识别单元,用于对所述当前会话的来源隧道进行识别,以判断所述当前会话所属的角色;

第二权限调取单元,用于根据所述当前会话所属的角色调取对应的会话权限配置。

与现有技术相比,上述技术方案具有以下优点:

本发明实施例所提供的一种基于文件描述符和会话的权限控制方法,包括:预先在接收系统调用的新连接信息时,建立与该新连接信息关联的连接文件描述符和会话,并通过该连接文件描述符对该会话进行标记;在应用程序的进程进行系统调用时,根据相应的连接文件描述符对系统调用按会话进行识别;对系统调用的所属当前会话的会话权限进行识别;根据当前会话对应的会话权限控制当前系统调用。在服务进程接收到新连接后,即接收到新的任务时,创建与该新连接关联的连接文件描述符和会话,并通过该连接文件描述符标记该会话,这样,就可以对系统调用按会话进行识别,并根据系统调用所涉及的连接文件描述符调整当前会话,对当前会话的会话权限进行识别,根据当前会话的会话权限控制当前系统调用,可以实现当进程执行系统调用时不局限于进程用户和文件的属性而进行权限的控制。

附图说明

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

图1为本发明一种具体实施方式所提供的基于文件描述符和会话的权限控制方法流程图;

图2为本发明一种实施方式所提供的会话识别方法流程图;

图3为本发明一种具体实施方式所提供的基于文件描述符和会话的权限控制系统结构示意图。

具体实施方式

本发明的核心是提供一种基于文件描述符和会话的权限控制方法和系统,可以实现当进程执行系统调用时不局限于进程用户和文件的属性而进行权限的控制。

为了使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。

在以下描述中阐述了具体细节以便于充分理解本发明。但是本发明能够以多种不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广。因此本发明不受下面公开的具体实施方式的限制。

请参考图1,图1为本发明一种具体实施方式所提供的基于文件描述符和会话的权限控制方法流程图。

本发明的一种具体实施方式提供了一种基于文件描述符和会话的权限控制方法,包括:

s11:预先在接收系统调用的新连接信息时,建立与该新连接信息关联的连接文件描述符和会话,并通过该连接文件描述符对该会话进行标记。

在本发明的一种实施方式中,预先在接收系统调用的新连接信息时,建立与该新连接信息关联的连接文件描述符和会话,并通过该连接文件描述符对该会话进行标记,包括:预先在接收系统调用的新连接信息时,建立与该新连接信息关联的连接文件描述符;建立与新连接信息关联的会话;将各连接文件描述符一一映射到一个会话或者空会话中。

在本实施方式中,连接文件描述符指的是进程或操作系统中标示打开的文件或连接的一个数字标识,或者称为文件句柄。会话指的是在服务进程接收新连接后,系统为其分配一个会话,该会话与连接进行关联,所谓的连接指的是系统中的应用程序和数据库连接。将每个连接文件描述符都映射到一个会话或者空会话中,以表示当前会话与会话关联。

s12:在应用程序的进程进行系统调用时,根据相应的连接文件描述符对系统调用按会话进行识别。

在应用程序的进程进行系统调用时,根据相应的连接文件描述符对系统调用按会话进行识别,包括:在应用程序的进程进行系统调用时,判断当前系统调用是否包含预设的连接文件描述符;若是,则更新系统调用所属的当前会话为该预设的连接文件描述符所映射的会话;执行当前系统调用;判断当前系统调用是否产生了异于预设的连接文件描述符的新连接文件描述符;若是,则将该新连接文件描述符映射到当前会话。

需要说明的是,服务器根据服务进程调用数据库中的数据,所谓的服务进程指的是服务器的应用系统中对外部监听端口接收新连接,并提供服务的进程,如apache(www服务器),vsftpd(ftp服务器)。在服务进程接收新连接后,系统会为其分配一个会话,该会话与连接进行关联,以便通过会话的权限来对系统调用进行控制。

在本实施方式中,以预设的连接文件描述符为描述符参数fd为例进行说明。如图2所示,图2为本发明一种实施方式所提供的会话识别方法流程图。在应用程序的进程进行系统调用时,根据相应的连接文件描述符对系统调用按会话进行识别,包括:

s21:在进行系统调用时,判断系统当前系统调用中是否包含文件描述符参数fd。

s22:若是,则更新当前会话为fd映射的会话。

s23:执行当前系统调用。

s24:判断系统调用是否产生了新的文件描述符参数fd-new。

s25:若是,则将fd-new映射到当前会话。

之后,该系统调用结束。

在本实施方式中,根据连接文件描述符识进行会话识别,会话识别不断根据系统调用涉及的连接文件描述符调整当前会话,并将新的文件描述符映射到当前会话。当创建子进程时,子进程继承当前会话。

s13:对系统调用的所属当前会话的会话权限进行识别。

在本发明的一种实施方式中,对系统调用的所属当前会话的会话权限进行识别,包括:获取系统调用的当前会话的发起终端的ip地址;根据ip地址和预设的角色配置信息,识别当前会话的所属角色;根据当前会话的所属角色,调取该角色对应的会话权限配置。

在本实施方式中,角色即指用户身份,在系统中一个身份拥有一组操作权限配置。要想知道客户端(即会话的发起终端)的权限,在本实施方式中就通过客户端建立的会话所属的角色的身份信息,即识别发起该该会话的客户端的身份,只有了解了该客户端的身份,服务器才能赋予该客户端对应的权限来进行系统调用。通过读取会话的发起终端的ip地址来识别发起会话的客户端的身份。如当有两个客户端访问服务器时,客户端a的ip地址为192.168.1.1,其身份为管理员,预设的权限为“所有”;客户端b的ip地址为123.45.67.89.其身份为普通用户,预设的权限为“部分”。则当某一客户端访问服务器并发起会话时,服务器读取发起会话的客户端的ip地址,根据其ip地址即可获取该客户端的身份信息,如读取的是客户端a的ip地址,则判定此时的客户端为管理员,相应地,即可服务该客户端对应的权限来控制当前的系统调用。由于各客户端均具有一个唯一的、不同于其他客户端的ip地址,因此,通过识别发起会话的客户端的ip地址,即可识别客户端的身份,并调取对应的权限来控制系统调用。

在本发明的另一种实施方式中,对系统调用的所属当前会话的会话权限进行识别,包括:判断当前会话的会话信息中是否包含预设的会话角色认证信息;若是,则获取所述会话角色认证信息,并根据所述会话角色认证信息识别分析出该会话信息的发起终端的角色,获取该角色的会话权限配置。

在本实施方式中,使用二次认证来进行角色的识别。在二次认证中可以引入中间代理,使得所有到达服务器的数据先经过中间代理,中间代理对连接进行认证后再传递给服务器进行请求。

具体地,客户端向中间代理发送请求内容,中间代理判断会话信息中是否包含预设的会话角色认证信息,若没有,则返回需要认证的提示信息,客户端再将带认证信息的请求内容发送至中间代理,在中间代理通过认证后,再将请求内容和相关的角色信息发送至服务器,服务器将答复内容返回至客户端。在这个过程中,由中间代理来识别发起会话的客户端的身份。

在本发明的另一种实施方式中,对系统调用的所属当前会话的会话权限进行识别,包括:预先建立用于预设角色通讯的虚拟通讯网络隧道;对当前会话的来源隧道进行识别,以判断当前会话所属的角色;根据当前会话所属的角色调取对应的会话权限配置。

在本实施方式中,采用隧道方式进行角色识别。在该过程中,客户端通过与服务器建立虚拟专用通讯网络隧道,通过区分来源隧道来进行角色的识别。如当客户端角色分为管理员和普通用户时,管理员客户端和服务器进行通讯的隧道为虚拟专用通讯网络隧道,而普通用户客户端和服务器进行通讯的隧道为普通网络访问,这样,当客户端和服务器建立会话时,只需识别会话的来源隧道即可判定会话所属的角色的身份信息。

s14:根据当前会话对应的会话权限控制当前系统调用。

进一步地,还可以根据需要在根据会话权限控制当前系统调用的基础上,判断系统调用是否符合系统的系统自身权限。在本文中,会话可以指示该会话属于哪个角色,即该会话所属的客户端或者用户,而不同的角色根据在系统中的身份拥有一组操作权限配置。不同的会话对应各自的会话权限。当用户想要进行系统调用时,就需要进行会话权限的检查,通过会话权限的检查来判断该会话对应的角色的数据访问权限,而系统自身访问权限的检查用来判断系统可以提供给该角色的数据访问权限,只有当系统调用的数据能通过会话权限的检查时才能够执行当前系统调用。

在本实施方式中,以一个具体的实施例为例进行说明。

设有一http服务器s,ip地址200.200.0.1,应用了该基于文件描述符和会话的权限控制方法,指定了源ip地址192.168.0.1拥有管理员角色(对所有文件有可写权限),其它来源地址为普通用户角色(对所有文件只读)

假设用户从ip地址为192.168.0.2的一个终端发送http请求:post/changepasswd.php?user=test&pass=test,其目的是更改用户test的密码,程序的逻辑将打开磁盘上的文件并进行修改。

其整个过程如下:

1.用户从192.168.0.2发起了到200.200.0.1连接请求;

2.服务器接受了该连接请求,此时一个文件描述符被创建,相应的会话信息也被创建,且该会话信息关联了这个文件描述符;

3.会话根据用户发起终端的ip地址查询得到,这个用户角色为普通用户;

4.用户发送post/changepasswd.php?user=test&pass=test,服务器程序开始执行修改密码逻辑;

5.服务器程序打开密码文件,得到该密码文件的文件描述符,依据本发明的方法,得知这个描述符同属于用户192.168.0.2的会话(步骤2中创建);

6.服务器程序对密码文件进行写入,这时检查会话权限,得知该用户不允许文件写入;

7.返回服务器程序写入失败,权限不足的信息;

8.用户修改密码的尝试失败;

9.上面服务器程序以及用户尝试写入密码文件的过程被记录至数据库以用于后续的审计。

进一步,管理员从192.168.0.1上登录,则在步骤3中,用户角色识别为管理员,则后续的操作都会被放行。

需要说明的是,当用户修改密码失败之后,若还想提权再执行修改密码操作的话,可以通过以下方式进行:

a1:选择遂道或二次认证,这时发起的请求里带有隧道或认证信息,在步骤3中就会判断为其它角色,其它角色如果配置为允许修改这个密码文件,便能修改成功。

还需要说明的是,在提权之后主要是根据隧道或认证信息查看权限配置,提权后可以重新选择角色,该角色也可以是管理员。

其中,会话权限即表示了该会话对应的角色的访问权限,从而在判断系统调用是否符合权限时,无需再去判断系统调用的文件属性和进行运行的所属用户的属性,极大地简化了权限的判断过程。对于应用程序的进程对系统调用引入了会话权限的检查来对于服务器中进行系统调用时的权限进行检查校验,以控制应用程序的权限,实现了当进程执行系统调用时不局限于进程用户和文件的属性而进行权限的控制。

需要说明的是,在本文中的整个通讯服务过程中,系统调用主要包括应用程序对磁盘文件系统进行文件读写系统调用,和应用程序对数据库程序的数据库连接读写的系统调用。在这两种情况下进行系统调用时进行权限的检查判断。

还需要说明的是,系统调用还包括数据库程序对数据库数据进行数据读写的系统调用,由于在技术上权限检查的意义不大,因此,在本实施方式中,可以不对此处的系统调用进行权限检查判断。

请参考图3,图3为本发明一种具体实施方式所提供的基于文件描述符和会话的权限控制系统结构示意图。

相应地,本发明一种实施方式还提供了一种基于文件描述符和会话的权限控制系统,包括:预处理模块31,用于预先在接收系统调用的新连接信息时,建立与该新连接信息关联的连接文件描述符和会话,并通过该连接文件描述符对该会话进行标记;识别模块32,用于在应用程序的进程进行系统调用时,根据相应的连接文件描述符对系统调用按会话进行识别;权限识别模块33,用于对系统调用的所属当前会话的会话权限进行识别;系统调用模块34,用于根据当前会话对应的会话权限控制当前系统调用。

进一步地,预处理模块包括:描述符构建单元,用于预先在接收系统调用的新连接信息时,建立与该新连接信息关联的连接文件描述符;会话构建单元,用于建立与新连接信息关联的会话;第一映射单元,用于将各连接文件描述符一一映射到一个会话或者空会话中。

识别模块,包括:第一判断单元,用于在应用程序的进程进行系统调用时,判断当前系统调用是否包含预设的连接文件描述符;会话更新单元,用于在判定当前系统调用包含预设的连接文件描述符时,更新系统调用所属的当前会话为该预设的连接文件描述符所映射的会话;执行单元,用于执行当前系统调用;第二判断单元,用于判断当前系统调用是否产生了异于预设的连接文件描述符的新连接文件描述符;第二映射单元,则将该新连接文件描述符映射到当前会话。

在本发明的一种实施方式中,权限识别模块包括:第一获取单元,用于获取系统调用的当前会话的发起终端的ip地址;角色识别单元,用于根据ip地址和预设的角色配置信息,识别当前会话的所属角色;第一权限调取单元,用于根据当前会话的所属角色,调取该角色对应的会话权限配置。

在本实施方式中,通过读取会话的发起终端的ip地址来识别发起会话的客户端的身份。如当有两个客户端访问服务器时,客户端a的ip地址为192.168.1.1,其身份为管理员,预设的权限为“所有”;客户端b的ip地址为123.45.67.89.其身份为普通用户,预设的权限为“部分”。则当某一客户端访问服务器并发起会话时,服务器读取发起会话的客户端的ip地址,根据其ip地址即可获取该客户端的身份信息,如读取的是客户端a的ip地址,则判定此时的客户端为管理员,相应地,即可服务该客户端对应的权限来控制当前的系统调用。由于各客户端均具有一个唯一的、不同于其他客户端的ip地址,因此,通过识别发起会话的客户端的ip地址,即可识别客户端的身份,并调取对应的权限来控制系统调用。

在本发明的另一种实施方式中,权限识别模块包括:第三判断单元,用于判断当前会话的会话信息中是否包含预设的会话角色认证信息;第二获取单元,用于在第三判断单元判定当前会话的会话信息中包含预设的会话角色认证信息时,获取所述会话角色认证信息,并根据所述会话角色认证信息识别分析出该会话信息的发起终端的角色,获取该角色的会话权限配置。

在本实施方式中,使用二次认证来进行角色的识别。在二次认证中可以引入中间代理,中间代理即上述的会话权限识别模块,使得所有到达服务器的数据先经过中间代理,中间代理对连接进行认证后再传递给服务器进行请求。

具体地,客户端向中间代理发送请求内容,中间代理判断会话信息中是否包含预设的会话角色认证信息,若没有,则返回需要认证的提示信息,客户端再将带认证信息的请求内容发送至中间代理,在中间代理通过认证后,再将请求内容和相关的角色信息发送至服务器,服务器将答复内容返回至客户端。在这个过程中,由中间代理来识别发起会话的客户端的身份。

在本发明的另一种实施方式中,权限识别模块包括:通讯隧道建立单元,用于预先建立用于预设角色通讯的虚拟通讯网络隧道;来源隧道识别单元,用于对当前会话的来源隧道进行识别,以判断当前会话所属的角色;第二权限调取单元,用于根据当前会话所属的角色调取对应的会话权限配置。

在本实施方式中,采用隧道方式进行角色识别。在该过程中,客户端通过与服务器建立虚拟专用通讯网络隧道,通过区分来源隧道来进行角色的识别。如当客户端角色分为管理员和普通用户时,管理员客户端和服务器进行通讯的隧道为虚拟专用通讯网络隧道,而普通用户客户端和服务器进行通讯的隧道为普通网络访问,这样,当客户端和服务器建立会话时,只需识别会话的来源隧道即可判定会话所属的角色的身份信息。

在本实施方式中,在服务进程接收到新连接后,即接收到新的任务时,创建与该新连接关联的连接文件描述符和会话,并通过该连接文件描述符标记该会话,这样,就可以对系统调用按会话进行识别,根据系统调用所涉及的连接文件描述符调整当前会话,以进行会话识别,根据识别的当前会话的会话权限控制当前系统调用。

在本文中,会话可以指示该会话属于哪个角色,即该会话所属的客户端或者用户,而不同的角色根据在系统中的身份拥有一组操作权限配置。不同的会话对应各自的会话权限。当用户想要进行系统调用时,就需要进行会话权限的检查,通过会话权限的检查来判断该会话对应的角色的数据访问权限,而系统自身访问权限的检查用来判断系统可以提供给该角色的数据访问权限,只有当系统调用的数据能通过会话权限的检查时才能够执行当前系统调用。

其中,会话权限即表示了该会话对应的角色的访问权限,从而在判断系统调用是否符合权限时,无需再去判断系统调用的文件属性和进行运行的所属用户的属性,极大地简化了权限的判断过程。对于应用程序的进程对系统调用引入了会话权限的检查来对于服务器中进行系统调用时的权限进行检查校验,以控制应用程序的权限,实现了当进程执行系统调用时不局限于进程用户和文件的属性而进行权限的控制。

综上所述,本发明所提供的基于文件描述符和会话的权限控制方法和系统,在服务进程接收到新连接后,即接收到新的任务时,创建与该新连接关联的连接文件描述符和会话,并通过该连接文件描述符标记该会话,这样,就可以对系统调用按会话进行识别,根据系统调用所涉及的连接文件描述符调整当前会话,以进行会话识别,根据识别的当前会话的会话权限控制当前系统调用。会话权限即表示了该会话对应的角色的访问权限,从而在判断系统调用是否符合权限时,无需再去判断系统调用的文件属性和进行运行的所属用户的属性,极大地简化了权限的判断过程。对于应用程序的进程对系统调用引入了会话权限的检查来对于服务器中进行系统调用时的权限进行检查校验,以控制应用程序的权限,实现了当进程执行系统调用时不局限于进程用户和文件的属性而进行权限的控制。

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

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