等保测评windows主机加固
控制点 |
安全要求 |
要求解读 |
测评方法 |
预期结果或主要证据 |
身份鉴别 |
a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换 |
用户的身份标识和鉴别,就是用户向操作系统以一种安全的方式提交自己的身份证实,然后由操作系统确认用户的身份是否属实的过程,身份标识要求具有唯一性。在用户进入Windows桌面前,如果弹出一个用户登录界面,要求用户输入用户名和密码,Windows 操作系统对用户的用户名和密码进行验证通过后,用户可以登录操作系统。 猜测密码是操作系统最常遇到的攻击方法之-,因此对操作系统的密码策略提出要求,在Windows操作系统中,要求密码历史记录、密码最短长度、密码复杂度等,并要求定期更换。 |
1)用户需要输入用户名和密码才能登录 2)windows默认用户名具有唯一性 3)打开“控制面板”-》“管理工具”-》“计算机管理”一“本地用户机组”检查有哪些用户,并尝试空口令登录 4)打开“控制面板”-》“管理工具”-》 “本地安全策略”一》“账户策略”“密码策略” |
1)用户登录需输入用户名和密码 2)用户具备唯一性: 3)尝试使用空口令登录,未成功 4)结果如下: a)复杂性要求:已启用: b)密码长度最小值:长度最小值至少为8位 c)密码长度最长使用期限。不为0 d)密码最短使用期限:不为0 e)强制密码历史:至少记住5个密码以上 |
|
b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施 |
非法用户能够通过反复输入密码,达到猜测用户密码的目的,因此应该限制用户登录过程中连续输入错误密码的次数。 当用户多次输入错误密码后,操作系统应自动锁定该用户或一段时间内禁止该用户登录,从而增加猜测密码难度的目的。 Windows操作系统具备登录失败处理功能,可以通过适当的配置“账户锁定策略”来对用户的登录进行限制 |
1)打开“控制面板”-》 “管理工具”-》“本地安全策略”一》 “账户策略”一》“密码锁定策略” 2)右键点击桌面->“个性化”->“屏幕保护程序”,查看“等待时间”的长短以及“在恢复时显示登录屏幕”选项是否打钩 需要说明的是,如果系统按上面的方法合理的设置了密码策略,此项要求就不是很重要了,因为任何攻击者都不能在一段合理的时间内猜出密码。在仅使用大小写字母与数字,用户不使用词典单词并仅附加一个数字的情况下,如果每次猜测需要半秒钟时间,猜到密码要花3,461,760年。由于密码会定期更改,攻击者猜到密码的可能性非常小。事实上,如果每隔70天更改密码,攻击者将需要相当于52,000条T3传入被攻击系统的线路,才能在密码过期前猜到一个随机的密码(当然,需要假定该容码不是词典单词)换句话说,如果密码很弱,攻击者能在十次尝话内猜到,那么何题并不是在照户锁定策略,而是弱到极点的密码 |
1)结果如下: a)账户锁定时间:不为不适用 b)账户锁定阈值:不为不适用 2)启用了远程登录连接超时并自动退出功能 |
|
c)当进行远程管理时,应采取必要措施、防止鉴别信息在网络传输过程中被窃听 |
为方便管理员进行管理操作,众多服务器采用网络登录的方式进行远程管理操作,Windows一般使用“远程桌面 (Remote Desktop)”进行远程管理,《基本要求》中规定了这些传输的数据需要进行加密处理,目的是为了保障账户和口令的安全, Windows Server 2003 SP1中针对远程桌面提供了SSL加密功能,它可以基于SSL来实现以下两个功能:对RDP客户端提供终端服务器的服务器身份验证、加密和RDP客户端的通信。要使用远程桌面的SSL.加密功能,远程桌面必须使用RDP的版本是5.2或以上,即所远行的操作累统必须是Windows Server 2003 SPI或其后版本 |
1)如果是本地管理成KVM等硬件管理方式,此要求默认满足, 2)如果采用远程管理,则需采用带加密管理的远程管理方式。在命令行输入”pgedit.msc“弹出“本地组策略编辑器”窗口,查着“本地计算机策略一》计算机配置一>管理模板一>Windows组件一选程桌面服务>远程桌面会话主机-安全”中的相关项目 |
1)本地或VM,默认符合 2)远程运维,采取加密的RDP协议 |
|
d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现 |
对于第三级及以上的操作系统要求采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现 |
查看和询问系统管理员在登录操作系统的过程中使用了哪些身份鉴别方法,是否采用了两种或两种以上组合的鉴别技术,如口令、教字证书Ukey、令牌、指纹等,是否有一种鉴别方法在鉴别过程中使用了密码技术 记录系统管理员在登录操作系统使用的身份鉴别方法,同时记录使用密码的鉴别方法 |
除口令之外,采用了另外一种鉴别机制,此机制采用了密码技术,如调用了密码机或采取SM1-SM4等算法 |
访问控制 |
a)应对登录的用户分配账户和权限 |
访问控制是安全防范和保护的主要策略,操作系统访问控制的主要任务是保证操作系统资源不该非法使用和访向,使用访问控制的目的在于通过限制用户对特定资源的访问来保护系统资源。在操作系统中的每一个文件或目录都包含有访问权限, 这些访可权限决定了谁能访问和如何访问这些文件和目录。对于操作系统中一些重要的文件,则需要严格控制其访问权限,从而加强系统的安全性。因此,为了确保系统的安全,需要对登录的用户分配账户,并合理配置账户权限。 在Windows系统中,重要目录不能对“everyone".账户开放,因为这样会带来很大的安全问题,在权限控制方面,尤其要注意当文件权限更改后对于应用系统的影响 |
访谈系统管理员,操作系统能够登录的账户,以及它们拥有的权限。 选择%systemdrive%\w indows \system、%systemroot %\system32\config等相应的文件夹,右键选择“属性”>“安全”,查看everyone组、users组和administrators组的权限设置 |
各用户具备最小角色,分别登录;不存在匿名用户,默认用户只许可管理员可以登录 |
|
b)应重命名或删除默认账户,修改默认账户的默认口令 |
对于操作系统的默认账户, 由于它们的某些权限与实际系统的要求可能存在差异,从而造成安全隐患,因此这些默认账户应重命名或被删除,并修改默认账户的默认口令。Windows 的系统管理员账户名称就是Administrator,在一定环境下,黑客可以省略猜测用户名这个步骤,直接破解密码。因此,允许默认账访问的危害性是显而易见的 |
在命令行输入"lusrmgr.msc"弹出“本地用户和组”窗口,查看“本地用户和组->用户”中的相关项目 |
1)查看右侧列表中Window系统的认账Administrato,是否枝被禁用或重命名 2)询问是否已修改默认账户口令 3)查看是否已经禁用guest账户 |
|
c)应及时删除或停用多余的、过期的账户,避免共享账户的存在 |
根据管理用户的角色对权限进行细致的划分,有利于各岗位细致协调工作,同时仅授予管理用户所需的最小权限,避免出现权限的漏洞使得一些高级用户拥有过大的权限 |
在命令行输入“lusmrgr.msc",弹出“本地用户和组”窗口,查看“本地用户和组一>用户”中的相关项目,查看右侧用户列表中的用户,询问各账户的用途,确认账户是否属于多余的、 过期的账户或共享账户名 |
不存在多余账户、测试过期账户。不存在多部门、多人共享账户情况 |
|
d)应授予管理用户所需的最小权限,实现管理用户的权限分离 |
操作系统的访问控制策略应由授权主体(如安全管理员)进行配置,非授权主体不得更改访问控制策略。访问控制策略规定操作系统用户对操作系统资源(如文件和目录)具有哪些权限,能进行哪些操作。通过在操作系统中配置访问控制策略,实现对操作系统各用户权限的限制 |
在命令行输入"secpol.msc" ,弹出“本地安全策略”窗口,查看“安全设置->本地策略>用户权限分配”中的相关项目。右侧的详细信息窗口即显示可配署的用户权限策略设置 |
设置系统管理员、安全员、审计员角色,根据管理用户的角色分配权限,实现管理用户的权限分离,仅授予管理用户所需的最小权限,角色的权限之间相互制约 |
|
d)应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则 |
操作系统的访问控制策略应由授权主体(如安全管理员)进行配置,非授权主体不得更改访问控制策略。访问控制策略规定操作系统用户对操作系统资源(如文件和目录)具有哪些权限,能进行哪些操作、通过在操作系统中配置访问控制策略,实现对操作系统各用户权限的限制 |
1) 访谈系统管理员,能够配置访问控制策略的用户 2)查看重点目录的权限配置,是否依据安全策略配置访问规则 |
1)由安全管理员授权设置规则 2)配置主体对客体的访问控制规则,并统一管理 |
|
e)访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级 |
明确提出访问控制的粒度要求,重点目录的访问控制的主体可能为某个用户或某个进程,应能够控制用户或进程对文件、数据库表等客体的访问 |
选择%systemdrive%\program files 、%systemdrive% \system32等重要的文件夹,以及%systemdrive%\Windows \system32 conf ig 、%systemdrive%\Windows\system32\secpol等重要的文件,右键选择“属性”>“安全”,查看访问权限设置 |
users权限设置合理,用户依据访问控制策略,对各类文件和数据库表级进行访问 |
|
f)应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问 |
敏感标记是强制访问控制的依据,主客体都有,它存在的形式无所谓,可能是整形的数字,也可能是字母,总之它表示主客体的安全级别。敏感标记是由强认证的安全管理员进行设置的,通过对重要信息资源设置敏感标记,决定主体以何种权限对客体进行操作,实现强制访问控制。 当操作系统具备了能对信息资源设置敏感标记的功能前提下,应该严格按照安全策略来控制用户对相关资源的操作 |
1)查看操作系统功能手册或相关文档,确认操作系统是否具备能对信息资源设置敏感 2)询问管理员是否对重要信息资源设置敏感标记 3)询问或查看目前的敏感标记策略的相关设置,如:如何划分敏感标记分类,如何设定访问权限等 |
1)系统中有敏感数据,不同层面人员设置强制访问控制策略,若无敏感数据,本条N/A 2)3)在主客体层面分别设置不同的敏感标记,并在基于这些标记上,由管理员设置访问控制路径,是否采取第三方主机加固系统或对操作系统内核进行二次开发加固,并实际查看系统可视化界面。部署第三方主机加固系统,可设置对主客体安全标记,并控制主体对客体的访问路径 |
安全审计 |
a)应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计 |
安全审计通过关注系统和网络日志文件、目录和文件中不期望的改变、程序执行中的不期望行为、物理形式的入侵信息等,用以检查和防止虚假数据和欺骗行为,是保障计算机系统本地安全和网络安全的重要技术,对审计信息的分析可以为计算机系统的脆弱性评估、 责任认定、损失评估、系统恢复提供关键性信息,所以审计覆盖范围必须要覆盖到每个操作系统用户。 Windows操作系统通过配置开启安全审计功能,合理地配置安全审计内容,对重要的用户行为和重要安全事件进行审计,能够及时准确地了解和判断安全事件的内容和性质,并且可以极大地节省系统资源 |
1)查看系统是否开启了安全审计功能 在命令行输入“"secpol.msc”,弹出“本地安全策略”窗口,查看“安全设置->本地策略->审计策略”中的相关项目。右侧的详细信息窗格即显示审计策略的设置情况。 2)询问并查看是否有第三方审计工具或系统 |
1)结果如下: a)审核策略更改:成功,失败 b)审核登录事件:成功,失败 c)审核对象访问:成功,失败 d)审核进程跟踪:成功,失败 e)以审核目录服务访问:失败 f)审核特权使用:失败 g)审核系统事件:成功,失败 h)审核账户登录事件:成功,失败 i)审核账户管理:成功,失败 2)部署第三方审计工具,实现对用户的全覆盖,主要针对用户操作行为的审计 |
|
b)审计记录应包括事件的日期和时间,用户、事件类型,事件是否成功及其他与审计相关的信息 |
详细的审计记录才能实现有效的审计,审计记录应该包括事件的日期、时间、类型、主体标识、客体标识和结果等。通过记录中的详细信息,能够帮助管理员或其他相关检查人员准确的分析和定位事件。 |
查看审计记录是否包含要求的信息 1)在命令行输入"eventvwr.msc",弹出“事件查看器”窗口,“事件查看器(本地)->Windows日志"下包括“应用程序”、“安全”、“设置”、“系统”几类记录事件类型,点击任意类型事件,查看日志文件是否满足此项要求 2) 如果安装了第三方审计工具,则:查看审计记录是否包括日期、时间,类型、主体标识、客体标识和结果 |
1) Windows操作系统事件查看器中的审计记录默认满足 2)第三方审计工具中,查看审计记录,审计信息包含日期、主客体、类型等信息 |
|
c)应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等 |
非法用户进入系统后的第一件事情就是去清理系统日志和审计日志,而发现入侵的最简单最直接的方法就是去看系统记录和安全审计文件。因此,必须对审计记录进行安全保护,避免受到未预期的删除修改或覆盖等 |
1)如果日志数据本地保存,则询问审计记录备份周期,有无异地备份。在命令行输入“eventvwr. msc”,弹出“事件查看器”窗口,“事件查看器(本地)->Windows 日志”下包括“应用程序” 、” 安全”、“设置”、“系统”几类记录事件类型,右键点击类型事件,选择下拉菜单中的“属性”,查看日志存储策略 2)如果日志数据存放在日志服务器上并且审计策略合理,则该要求为符合 |
1)日志本地存储,可查看存储目录,周期和相关策略等 2)若部署有日志服务器,可查看存储路径等 |
|
d)应对审计进程进行保护,防止未经授权的中断 |
保护好审计进程,当事件发生时,能够及时记录事件发生的详细内容。Windows系统具备了在审计进程自我保护方面功能 |
1)访谈是否有第三方方审计进程监控和保护的措施 2)在命令行输入"secpol.msc",弹出“本地安全策略”窗口,点击“安全设置->本地策略->用户权限分配”,右键点击策略中的“管理审核和安全日志”,查看是否只有系统审计员或系统审计员所在的用户组 |
1)默认符合 2)其他非审计人员不可登录和操作日志,有专人负责审计日志的管理 |
入侵防范 |
a)应遵循最小安装的原则仅安装需要的组件和应用程序 |
Windows默认安装时会安装许多不必要的组件和应用程序, 为了避免由于多余组件和应用程序带来的安全风险,通常遵循最小安装原则,仅安装需要的组件和应用程序等。有些操作系统中运行的多余服务和应用程序,如:在一台只提供下载服务的FTP服务器上还启用了邮件服务,则该“邮件服务”对于此主机来说属于多余服务;一台文件服务器上安装了游戏软件, 这些游戏软件则属于多余的应用程序 |
1)访谈安装系统时是否遵循最小化安装原则,查看安装操作手册 2)使用命令“yum list installed" 查看操作系统中已安装的程序包,询问是否有目前不需要的组件和应用程序 |
1)系统安装遵循最小化安装原则 2)不存在业务所不需要的组件和应用程序 |
|
b)应关闭不需要的系统服务、默认共享和高危端口 |
Windows默认安装时会开启许多不必要的系统服务,为了避免由于多余的系统服务带来安全风险,通常可以将其禁用或卸载。Windows 会开启默认共享,例如C$、D$,为了避免默认共享带来的安全风险,应关闭Windows硬盘默认共享。通过查看监听端口,能够直观地发现并对比系统所运行的服务和程序,关闭高危端口,是操作系统常用的安全加固方式 |
1)查看系统服务。 在命令行输入"services. msc“,打开系统服务管理界面,查看右侧的服务详细列表中多余的服务, 如Alerter、Remote Registry Servicce Messsenger,Task Scheduler是否已启动。 2)查看监听端口。 在命令行输入"netstat -an”,查看列表中的监听端口,是否包括高危端口,如 TCP 135、139 、45、 593、1025端口,UDP 135、137、 138、445端口,-些流行病毒的后门端口,如TCP 2745、3127、6129端口。 3)查看默认共享。 在命令行输入"net share",查看本地计算机上所有共享资源的信息,是否打开了默认共享,例如C$、D$ 4)查看主机防火墙策略 在命令行输入"firewal1. cpl”打开Windows防火墙界面,查看Windows防火墙是否启用。点击左侧列表中的“高级设置”,打开“高级安全Windows防火墙”窗口。点击左侧列表中的”入站规则”,右侧显示Windows防火墙的入站规则,查看入站规则中是否阻止访问多余的服务,或高危端口 |
1)不存在多余的服务 2)未启用 不必要的端口 3)未开启默认共享 4)防火墙规则中阻止访问多余的服务,或高危端口 |
|
c)应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制 |
通过设定终端接入方式、 网络地址范围等条件限制终端登录,可以极大的节省系统资源,保证了系统的可用性,同时也提高了系统的安全性。对Windows自身来说, 可以通过主机防火墙或TCP/IP筛选来实现以 上功能 |
1)询间系统管理员管理终端的接入方式。 查看主机防火墙对登录终端的接入地址限制 在命令行输入"firewall.cpl”,打开Windows防火墙界面,查看Windowsd防火墙是否启用。点击左侧列表中的“高级设置”,打开“高级安全Windows防火墙”窗口,点击左侧列表中的“入站规则”,双击右侧入站规则中的“远程桌面一用户模式(TCP-In)",打开“远程桌面用户模式(TCP-In)属性" 窗口,选择“作用城”查看相关项目。 查看IP筛选器对登录终端的接入地址限制 在命令行输入“gpedit.msc"打开本地组策路编辑器界面,点击左侧列表中的“本地计算机策略->计算机配置Windows设置->安全设置->IP安全策略”,在本地计算机双击右侧限制登录终端地址的相关策略”,查看 “IP 筛选器列表”和“IP筛选器属性“ 2)网络方面对登录终端的接入方式和地址范围的限制 询问并查看是否通过网络设备或硬件防火墙对终端接入方式、网络地址范围等条件进行限 |
1)通过主机防火墙设置访问控制规则 2)通过网络防火墙、堡垒主机限制、ip段进行接入地址限制 |
|
d) 应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞 |
攻击者可能利用操作系统存在的安全漏洞对系统进行攻击,应对系统进行漏洞扫描,及时发现系统中存在的已知漏洞,并在经过充分测试评估后更新系统补丁,.避免遭受由系统漏洞带的风险 |
访谈系统管理员是否定期对操作系统进行漏洞扫描,是否对扫描发现的漏洞进行评估和补丁更新测试,是否及时进行补丁更新,更新的方法。 在命令行输入"appwiz.cp1" ,打开程序和功能界面,点击左侧列表中的“查看已安装的更新”,打开“已安装更新”界面,查看右侧列表中的补丁更新情况 |
对操作系统补丁进行测试和安装,补丁情况为较新稳定版本 |
|
e)应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警 |
要维护真正安全的环境,只具备安全系统还远远不够。如果假设自己不会受到攻击,或认为防护措施已足以保护自己的安全,都是非常危险的。要维护系统安全,必须进行主动监视,以检查是否发生了入侵和攻击。 一般意义上,入侵威胁分为外部渗透、内部渗透和不法行为三种,入侵行为分为物理入侵、系统入侵和远程入侵三种。此项中,关注的操作系统所面对的入侵成胁可能包含了三种造成入侵威胁的入侵行为主要是系统入侵和远程入侵两种。系统入侵,指入侵者在拥有系统的一个低级账号权限下进行的破坏活动。通常,如果系统没有及时更新最近的补丁程序,那么拥有低级权限的用户就可能利用系统漏洞获取更高的管理特权。远程入侵,指入侵者通过网络渗透到一个系统中。这种情况下,入侵者通常不具备任何特殊权限,他们通过漏洞扫扫描端口扫描等技术发现攻击目标,再利用相关技术执行破坏活动 |
1)访谈系统管理员是否安装了主机入侵检测软件,查看已安装的主机入侵检查系统的配置情况,是否具备报警功能 2)查看网络拓扑图,查看网络上是否部署了网络入侵检测系统,如IDS |
1)暂无安装主机入侵检测系统 2)网络上有IDS、IPS软件 4)若主机未部署主机IDS设备。可在网络链路上查香是否是IDS、 IPS. 发生入侵事件时,记录报警措施等 |
恶意代码防范 |
应采用免受恶意代码攻击的技术措施或主动免疫可信验证机制及时识别入侵和病毒行为,并将其有效阻断 |
作为Windows系统,木马和蠕虫的泛滥使得防范恶意代码的破坏显得尤为重一要,因此应采取避免恶意代码攻击的技术措施或采取可信验证技术,如在主机上部署防病毒软件或其他可信验证技术。基于网络和基于主机的防病毒软件在系统上应构成立体的防护结构,属于深层防御的一部分。因此基于网络的防病毒软件的病毒库应与基于主机的防病毒软件的病毒库不同。只有当所有主机都及时更新了病毒库才能够做到防止病毒的入侵。因此应有统一的病毒管理策略,统一更新病毒库,定时查杀,及时发现入侵行为有效阻断等 |
1)查看系统中安装的防病毒软件。询问管理员病毒库更新策略。查看病毒库的最新版本更新日期是否超过一个星期 2)查看系统中采取何种可信验证机制,访谈管理员实现原理等 3)询间系统管理员网络防病毒软件和主机防病毒软件分别采用什么病毒库 4)询问系统管理员是否果有统一的病毒更新策略和查杀策略 5)当发现病毒入侵行为时,如何发现,如何有效阻断等,报警机制等 |
)安装有网络版杀毒软件,病毒库最新 2)查看系统中采取何种可信验证机制,实现原理为基于可信根TPM技术等 3)网络版防病毒和主机防病毒均具备不同的病毒库,异构特点4)防病毒为网络版,统一更新病毒库 5)发现病毒入侵,有邮件报警机制 |
可信验证 |
可基于可信根对计算设备的系统引导程序、系统程序、重要配置参数和应用程序等进行可信验证,并在应用程序的关键执行环节进行动态可信验证,在检测到其可信性受到破坏后进行报警,并将验证结果形成审计记录送至安全管理中心 |
针对服务器设备,需要服务器在启动过程对预装软件(包括系统引导程序、系统程序、相关应用程序和重要配置参数)进行完整性验证或检测,确保对系统引导程序、系统程序、重要配置参数和关键应用程序的篡改行为能被发现,并报警便于后续的处置动作 |
1)核查服务器的启动,是否实现可信验证的检测过程,查看对那些系统引导程序、系统程序或重要配置参数进行可信验证 2)修改其中的重要系统程序之一和应用程序之一,核查是否能够检测到并进行报警 3)是否将验证结果形成审计记录送至安全管理中心 |
l)服务器具有可信根芯片或硬件 2)启动过程基于可信根对系统引导程序、系统程序,重要配置参数和关键应用程序等进行可信验证度量 3)在检测到其可信性受到破坏后进行报警,并将验证结果形成审计记录送至安全管理中心 4)安全管理中心可以接收设备的验证结果记录 |
数据备份恢复 |
应提供重要数据处理系统的热冗余,保证系统的高可用性 |
随着软件业的高速发展,高可用性(High Availability, HA)越来越受到人们的重视。高可用性这是关键系统最重要的要求之-一,它要求网络系统有失败(或异常)恢复的功能,能从网络系统上断开不能响应服务的节点及链路,而把服务转向备份的服务及链路,而当失败的服务及链路重新恢复的时候,它们就成了热备份系统。所以,网络系统要具备冗余的网络设备(服务器及链路等)系统以及失败(或异常)恢复管理设备 |
1)查看网络拓扑结构图,了解网络线路上服务器节点是否其他热备、集群等高可用设备 2)访谈管理员并查看资产列表, 待查服务器有无其他高可用方式 |
网络拓扑节点的重要服务器采取满足高可用的冗余方式,采用热备、集群等方式 |
本文来自博客园,作者:爱薇仔,转载请注明原文链接:https://www.cnblogs.com/zh2000/p/15218923.html