SELINUX知识点
SecurityEnhencedlinux
如果某个用户需要以root权限执行某条命令怎么办?
如果某个用户a想要与用户b共同享有某个文件的全部权限怎么办?
进程安全上下文context
进程是用户获取资源的代理
一个进程在运行过程中对哪些文件具有访问权限是由进程的发起者的权限决定的
试想如果你的web服务器是以webman这个用户的身份运行的他对系统中所有o上置r的文件都具有读权限如果某
个人劫持了web服务器那么他就获得了webman的所有权限他可以利用缓冲区溢出漏洞tuid等多种方式获得权限
提升进而劫持整个系统此时传统的DAC模式就无法防范这种攻击
DAC自主访问控制用户自主决定属于自己的文件权限
MAC强制访问控制内核定义了所有用户包括root的权限由linux决定由内核实现
当进程不运行时只是文件
Subject是正在内存中执行的进程
object动作承受者进程文件套接字
是否一个subject能够操作一个object取决于linux的定义
在一个进程需要运行以完成某种任务时linux为此进程规定了一个运行环境sandbox,此环境限制了此进程可以进
行的操作和可以访问的文件此时这个进程可以活动的范围就由linux限定如果是传统的DAC此进程的行为权限
则由运行它的用户的权限决定,此时它的活动范围是整个系统
linux将进程分类将资源分类定义了那个进程在哪个范围内运行只能访问哪些资源此时不管它对其它的资源有
读写权限此时只要linux不允许它就不能访问
(1)首先设置开启linux的全局设置:
查看和设置linux状态、配置文件、配置选项:
临时查看和设置:
#getenforce//查看linux状态
#status–bv//查看系统当前运行的linux的状态
#module–l//查看linux加载的内核模块
#alert-a/var/log/audit///查看linux错误日志
#system-config-linux//SElinux的图形化管理工具
#tenforce1/0//把linux临时设为enforcing/permissive
ls-Zps-Zid-Z//分别可以看到文件,进程和用户的SELinux属性
info//查询SElinux的policy信息
查看文件系统的扩展属性:getfattr
[root@linuxas~]#getfattr-m.-d/etc/passwd
getfattr:Removingleading'/'fromabsolutepathnames
#file:etc/passwd
x="system_u:object_r:etc_t:s0000"
查看的文件的x属性中储存了此文件的安全上下文,所以上面例子中的上下文就是
system_ubject_r:etc_t。
所有运行了SELinux的ext2/3文件系统上都有x这个属性。
内核可以直接接受linux参数所以也可以在中kernel行最后添加:
linux=0向内核传递参数禁用linux,如编辑/etc/:
titleRedHatEnterpriLinuxServer(5)
root(hd0,0)
kernel/5roroot=LABEL=/rhgbquietlinux=0
initrd/
SELINUXTYPE=targeted
此参数可选项:targeted和strice。分别是targeted只控制关键网络服务,strice控制所有的服务
如果linux已经启用想让它在开机立即进入某种状态
enforce=1/0状态为enforcing/premissive
永久设置:
配置文件位置:/etc/linux/config它还有个链接在/etc/sysconfig/linux
#SELINUX=cantakeoneofthethreevalues:
#enforcing-SELinuxcuritypolicyinforced.(强制限制状态)
#permissive-SELinuxprintswarningsinsteadofenforcing.(warn-mode,只警告并记录操作并不真正阻止)
#disabled-SELinuxisfullydisabled.(linux禁用状态)
例如设置:SELINUX=enforcing
#SELINUXTYPE=levaluesare:
#targeted-Onlytargetednetworkdaemonsareprotected.
#strict-FullSELinuxprotection.(高精细度控制模式)
例如设置:SELINUXTYPE=targeted
redhat将那些通常容易受攻击被利用的文件/进程默认置于linux标签此种规定范围是一种linux类型
redhat支持前两种类型:SELINUXTYPE=targeted/strict/mls普通控制级别/严格控制级别/军事级别
需要重启系统来启动SELinux新的工作模式
getbool#获取本机linux策略值,也称为bool值
#linux的设置一般通过两个部分完成的,一个是安全上下文,另一个是策略,策略值是对安全
上下文的补充
tbool-Pallow_ftpd_anon_write=1#-P是永久性设置,否则重启之后又恢复预设值。
示例:
#tbool-Pallow_ftpd_anon_write=1
#getboolallow_ftpd_anon_write
allow_ftpd_anon_write-->on
注意:如果仅仅是安全上下文中设置了vsftpd进程对某一个目录的访问,配置文件中也允许可写,
但是linux中策略中不允许可写,仍然不可写。所以基于linux保护的服务中,安全高很多。
yum-yinstallpolicycoreutils-newrole#Usage:System->Management->SElinux
star:就是tar在SELinux下的互换命令,能把文件的标签也一起备份起来。
cp可以跟-Z,--context=CONTEXT在拷贝的时候指定目的地文件的curitycontext
find可以跟–context查特定的type的文件。
(2)linux对文件/用户/进程的限制机制:
处于执行状态的进程/程序:subject(动作的发出者)
资源(fileprocesssocket...):object(动作的承受者)
各种subject之间的权限不同优先级不同所需要的资源不同,把具有相同权限的进程标识把具有相同权限的文件
标识。linux给每个进程按类划分role角色角色定义了谁可以访问哪些资源,给每个资源置上标签标签标明了哪
些角色可以访问。
linux利用ext3的扩展属性来标识这些资源
#lsattr查看文件扩展属性的标识位
-------------./
-------------./
-------------./
-------------./
-------------./
进程所属的类--domain资源所属的类--type
到底哪些domain中的subject可以访问哪些type中的object取决于linux的策略机制
策略(Policy)由Administrator定义(kernel2.6以后linux已经不再区分进程和资源)
标签label安全上下文context
标签(label)system_u:object_r:ur_home_t
安全上下文(context)一个进程运行的时候所属的域以及通过规则定义的它能够获取的所有资源(由标签来表现)
(3)文件的linux标签
#ls-Z查看文件标签--context(等同于-Z)或者--scontext(只显示安全上下文)或者--lcontext(意为
ll+context)
-rw-------rootrootsystem_u:object_r:ur_home_
ur:role:type
label通常由3段组成其实有5段ur_u:object_r:ur_home_t
.属主域(ur):角色域(objectrole):类型域(urtype):敏感度:类别
类型域很重要比如说tmp目录下的文件type字段通常都是tmp_t,type字段决定了哪些subject可以访问它
还有ur_home_dir_t等等。
在subject运行过程中还可以进行域切换进而完成自身对资源访问权限的切换
#
-rw-r--r--rootrootroot:object_r:ur_home_
#chcon意思是changecontext
-ttype类型
-Rrecursive递归(特别适用于改变某个目录下所有文件的context)
-uur
-rrole
--reference源文件目标文件#复制安全上下文
#chcon--reference=将b以a为准设置linux标签(以引用方式改变文件标签)
#将恢复默认标签
runcon使用特定的context来执行指令
#runcon-tur_home_tcat/etc/passwd
root:system_r:ur_home_t:SystemLow-SystemHighisnotavalidcontext
查看某种服务是否受到SELinux的保护
[root@linuxas~]#getbool-a(RHEL4:inactive受保护,active不受保护;RHEL5:off受保护,on不受保护)
(4)linux默认标签的定义文件
/etc/linux/targeted/
此目录下定义了targeted类型的linux所有策略和文件默认标签类型
/etc/linux/targeted/policy/
此目录显示了所有的policy(策略)
/etc/linux/targeted/contexts/files
此目录中的几个文件定义了在不同目录下创建文件的默认标签是什么
大多数文件都是ur_home_t目录为ur_dir_t
恢复默认标签的命令则是以此为准
(5)用户/进程的linux标签
#idstudent可以查看用户的linux标签
uid=500(student)gid=500(student)groups=500(student)
context=root:system_r:unconfined_t:SystemLow-SystemHigh
#psauxZ查看进程的linux标签
system_u:system_r:getty_troot24510.00.01664444tty3Ss+Jul290:00
/sbin/mingettytty3
其中有一种tpye叫做unconfined未定义的类型表示不受linux控制它的权限模型仍是DAC的
(6)查看和设置linux策略
roles(规则)组合起来就是策略策略就是规则的库
#getbool-a查看所有可以通过bool型变量控制linux状态的功能
qemu_u_usb-->on是否开启usb功能
allow_httpd_anon_write-->off是否开启httpd匿名写入功能
设置某个功能的linux状态:
#tboolpppd_for_ur1/0或者on/off临时设置开启/关闭
#tbool-Ppppd_for_ur1/0或者on/off永久设置开启/关闭
#system-config-linux图形化界面设置linux配置(不建议)
通过这种方式改变linux或者防火墙规则可能会被系统默认规则限制导致设置无效
#manage{login/ur/port/interface/fcontext/translation}-l[-options]强大的linux管理命令
例如#managelogin-l列出login功能中可用的子命令
#SElinux对服务的应用
linux的设置分为两个部分,修改安全上下文以及策略,下面收集了一些应用的安全上下文,
供配置时使用,对于策略的设置,应根据服务应用的特点来修改相应的策略值。
1.3.1SElinux与samba
1.samba共享的文件必须用正确的linux安全上下文标记。
chcon-R-tsamba_share_t/tmp/abc
如果共享/home/abc,需要设置整个主目录的安全上下文。
chcon-R-rsamba_share_t/home
2.修改策略(只对主目录的策略的修改)
tbool-Psamba_enable_home_dirs=1
tbool-Pallow_smbd_anon_write=1
getbool查看
samba_enable_home_dirs-->on
allow_smbd_anon_write-->on/*允许匿名访问并且可写*/
1.3.2SElinux与nfs
linux对nfs的限制好像不是很严格,默认状态下,不对nfs的安全上下文进行标记,而且在默认状态的策略下,nfs
的目标策略允许nfs_export_all_ro
nfs_export_all_ro
nfs_export_all_rw值为0
所以说默认是允许访问的。
但是如果共享的是/home/abc的话,需要打开相关策略对home的访问。
tbool-Pu_nfs_home_dirsboolean1
getboolu_nfs_home_dirs
1.3.3SElinux与ftp
1.如果ftp为匿名用户共享目录的话,应修改安全上下文。
chcon-R-tpublic_content_t/var/ftp
chcon-R-tpublic_content_rw_t/var/ftp/incoming
2.策略的设置
tbool-Pallow_ftpd_anon_write=1
getboolallow_ftpd_anon_write
allow_ftpd_anon_write-->on
1.3.4SElinux与http
apache的主目录如果修改为其它位置,linux就会限制客户的访问。
1.修改安全上下文:
chcon-R-thttpd_sys_content_t/home/html
由于网页都需要进行匿名访问,所以要允许匿名访问。
2.修改策略:
tbool-Pallow_ftpd_anon_write=1
tbool-Pallow_httpd_anon_write=1
tbool-Pallow_<协议名>_anon_write=1
关闭linux对httpd的保护
httpd_disable_trans=0
1.3.5SElinux与公共目录共享
如果ftp,samba,web都访问共享目录的话,该文件的安全上下文应为:
public_content_t
public_content_rw_t
其它各服务的策略的bool值,应根据具体情况做相应的修改。
(7)linux服务器配置文件
-P是永久有效的意思
===ftp===
//Ifyouwanttosharefilesanonymously
chcon-R-tpublic_content_t/var/ftp
//Ifyouwanttotupadirectorywhereyoucanuploadfiles
chcon-tpublic_content_rw_t/var/ftp/incoming
Youmustalsoturnonthebooleanallow_ftpd_anon_write
tbool-Pallow_ftpd_anon_write=1
//Ifyouarettingupthismachineasaftpdrverandwishtoallowurstoaccesstheirhomedirectorories
tbool-Pftp_home_dir1
//Ifyouwanttorunftpdasadaemon
tbool-Pftpd_is_daemon1
//YoucandisableSELinuxprotectionfortheftpddaemon
tbool-Pftpd_disable_trans1
===httpd===
//Ifyouwantaparticulardomaintowritetothepublic_content_rw_tdomain
tbool-Pallow_httpd_anon_write=1
or
tbool-Pallow_httpd_sys_script_anon_write=1
//httpdcanbetuptoallowcgiscriptstobeexecuted
tbool-Phttpd_enable_cgi1
//Ifyouwanttoallowaccesstourshomedirectories
tbool-Phttpd_enable_homedirs1
chcon-R-thttpd_sys_content_t~ur/public_html
//httpdisallowedaccesstothecontrolingterminal
//suchthatonehttpdrvicecannotinterferewithanother
tbool-Phttpd_unified0
//loadablemodulesrununderthesamecontextashttpd
tbool-Phttpd_builtin_scripting0
//httpdscriptsareallowedtoconnectouttothenetwork
tbool-Phttpd_can_network_connect1
//Youcandisablesuexectransition
tbool-Phttpd_suexec_disable_trans1
//YoucandisableSELinuxprotectionforthehttpddaemonbyexecuting
tbool-Phttpd_disable_trans1
rvicehttpdrestart
===named===
//Ifyouwanttohavenamedupdatethemasterzonefiles
tbool-Pnamed_write_master_zones1
//YoucandisableSELinuxprotectionforthenameddaemonbyexecuting
tbool-Pnamed_disable_trans1
rvicenamedrestart
===nfs===
//Ifyouwanttotupthismachinetosharenfspartitionsreadonly
tbool-Pnfs_export_all_ro1
//Ifyouwanttosharefilesread/write
tbool-Pnfs_export_all_rw1
//IfyouwanttouaremoteNFSrverforthehomedirectoriesonthismachine
tbool-Pu_nfs_home_dirs1
===samba===
//Ifyouwanttosharefilesotherthanhomedirectorie
chcon-tsamba_share_t/directory
//Ifyouwanttosharefileswithmultipledomains
tbool-Pallow_smbd_anon_write=1
//IfyouarettingupthismachineasaSambarverandwishtosharethehomedirectories
tbool-Psamba_enable_home_dirs1
//IfyouwanttouaremoteSambarverforthehomedirectoriesonthismachine
tbool-Pu_samba_home_dirs1
//YoucandisableSELinuxprotectionforthesambadaemonbyexecuting
rvicesmbrestart
===rsync===
//Ifyouwanttosharefilesusingthersyncdaemon
chcon-tpublic_content_t/directories
//Ifyouwanttosharefileswithmultipledomains
tbool-Pallow_rsync_anon_write=1
//YoucandisableSELinuxprotectionforthersyncdaemonbyexecuting
tbool-Prsync_disable_trans1
===kerberos===
//allowyoursystemtoworkproperlyinaKerberonvironment
tbool-Pallow_kerberos1
//IfyouarerunningKerberosdaemonskadmindorkrb5kdc
tbool-Pkrb5kdc_disable_trans1
rvicekrb5kdcrestart
===nis===
AllowyoursystemtoworkproperlyinaNISenvironment
tbool-Pallow_ypbind1
一:SElinux(安全增强linux简介)
1:使用SElinux可以将进程放入在特定的SElinux域,同时赋予系统上的资源(如文件,网络套接字,系统调用等)
SElinux上下文。装入SElinux的策略(通常作为系统启动过程的一部分),然后决定哪个进程域可以访问哪些资源上下
文。
2:在红帽企业版linux5中,有关SElinux的选择有下面几种:
(1)我是否需要启用SElinux
(2)一旦启用,我需要SElinux处于允许(permissive)还是强制(enforcing)状态。
(3)我需要在文件上赋予什么样的SElinux上下文。
3:在实际工作中,红帽企业版linux5支持一种SElinux策略,叫目标策略(targeted).这个策略在大多数应用之中。在
目标策略之中,只有目标进程受到SElinux的影响。而其他进程运行在非限制模式下。目标策略只影响常用的网络应用
程序。受到限制的服务在200个以上,有增加的趋势。SElinux限制的典型应用程序如下:
(1)dhcp
(2)httpd
(3)mysqld
(4)named
(5)nscd()
(6)ntpd()
(7)portmap
(8)postgres()
(9)snmpd()
(10)squid
(11)syslogd
4:启用SElinux
/etc/sysconfig/linuxtenforcegetenforce
/etc/sysconfig/linux
(1)强制(enforcing):任何违法SElinux的操作都被禁止。
(2)允许(permissive):任何违反SElinux的操作都会受到一个警告信息。但是行动可以继续。
(3)停用(disabled):不启用SElinux策略。
Setenforce和getenforce命令
Setenforce0/10表示允许;1表示强制
Getenforce查看当前SElinux的状态。
5:查看SElinux上下文
使用命令ps–Z和ls–Z
每个进程都属于个SElinux域;
每个文件都被赋予一个SElinux上下文。
相关的域和上下文可以使用ls和ps命令的命令选项–Z来显示
进程SElinux域和SElinux上下文,具有以下格式:
System_u:object_r:httpd_exec:s0
说明:
上面的字段以冒号作为分隔符,
第一个字段:用户
第二个字段:角色
第三个字段:类型
第四个字段:与MLS,MCS有关
说明:
SEliunx目标策略只于第三个字段有关,即类型字段(TYPE).
二:SElinux介绍
SElinux是美国国家安全局为linux系统设计的一项开放源码项目,主要是希望将其作为系统的最后一道防线,来抵御
黑客的攻击和入侵系统。
1.常见的读取控制
1.1DAC(DiscretionaryAccessControl)”任意式读取控制”。在DAC的架构下,每个对像都会记录一个拥有者的信
息。只要是对象的拥有者,就可以获得该对象的完全控制权限。DAC允许拥有者完全权限。其他需要读取该对象时候,
必须授予适当的权限。但是每个对象仅有一组拥有者的信息,如果需要更复杂的读取控制能力,必须使用ACL。ACL
的全名是“访问控制列表(AccessControlList)”.是DAC的延伸。在ACL环境下,你可以不同的用户设置一组权限。
如此一来,就可以对不同的用户设置不同的权限了。
1.2MAC(MandatoryAccessControl)“强制性读取控制”.在MAC架构下,会为每一个对象添置一个安全的上下文
(SecurityContext).进程和用户除了具备传统的的权限之外,还必须获得SElinux的授权,方能读取对象。
1.2.1RBAC
RBAC全称是“角色基础读取控制”(Role-badAccessControl),在此架构下,是以用户所属的角色进行读取权
限判定的动作的。如:老板的可以读取哪些对象,经理可以读取哪些对象。等
1.2.2MLS
MLS全名是“多层次安全”(Mulit-LevelSecurity),在此架构下,是以对象的机密等级来决定进程对该物的读取
权限的。
2:SElinux
SElinux是一个在内核中执行,提供MAC能力的子系统,以弥补传统的DAC架构的不足。SElinux子系统以“类
型强制性”读取控制机制为主,并融合RBAC,MLS与MCS3种MAC读取控制机制的特性。
2.1什么是类型强制性的读取控制机制?
在SElinux世界里,定义了许多的类型(TYPE).每一个进程,文件,设备,网络连线等,都必须标示其所属
的类型。进程仅能读取相同类型的文件,如果非相关的类型,且SEliunx不允许读取时,则无法读取。这就是类型强制
性的读取控制机制。
警告:SElinux的类型读取控制是在传统的DAC权限之后进行的。换言之,就是说在取得了DAC权限之后,再由SElinux
来进行类型的强制性控制了。
3:SElinux的术语
3.1对象
在SElinux里,所有可被读取的的皆为对象。
3.2主体
在SElinux里,把进程理解为主体
3.3类型
SElinux允许你为系统中的每一个主体或对象定义一个类型。
3.4领域
3.5用户
SElinux通过用户代表一些账号的识别数据。
3.6角色
角色用来代表某一些用户或对象的组合。
3.7安全策略
SElinux目前有三个安全策略:targeted,strict,mls3个安全策略,每一个安全策略的功能,用途和定位不同的。
3.7.1targeted:用来保护常见的网络服务###默认的redhatenterprilinux会自动安装。
3.7.2strict:用来提供符合RBAC机制的安全性能
3.7.3mls:用来提供符合MLS机制的安全性。
注意:本文档主要讲解安全策略targeted.
3.8安全上下文
SElinux系统中的每一个进程与对象都会记录一条安全上下文。
4:SElinux软件包
5:初始化SElinux程序
6:切换SElinux状态
6.1查看SElinux的状态
命令:status[-v]
7:停用和启用SElinux
7.1通过内核启动参数
如:kernel/vmlinuz„„„„..roroot=LABEL=/rhgbquietlinux=N(0/1)
0表示停用
1表示启用
7.2通过SElinux配置文件
/etc/sysconfig/linux连接文件
/etc/linux/config源文件
7.3手动启用或停用SElinux
三:管理安全上下文
REDHATENTERPRISELINUX的每一个对象都会存储其安全上下文。并将其作为SElinux判断进程能否读取的依据。
1:SElinux的安全上下文的格式:
USER:ROLE:TYPE:[LEVEL:[CATEGORY]]
1.1USER用户字段
这个字段用来记录用户登录系统后所属的SElinux的身份的。
USER通常以_u为后缀,常见的如下:
System_u系统账号类型的使用者
Ur_u真实用户类型的使用者
Root超级用户的使用者
说明:targeted安全策略并未支持USER字段
1.2ROLE角色字段
ROLE通常以_r为后缀
说明:targeted安全策略并未支持ROLE字段
1.3TYPE字段
TYPE类型字段通常以_t为后缀的。这个字段是SElinux安全上下文中最常用也是最重要的字段。常见的TYPE
字段如下:
下列表格列举了常见的TYPE字段
项目说明
Unconfiged_t未设置类别
Default_t默认类别
Mnt_t代表挂载点的类型,/mnt/中的文件属于这个类别
Boot_t作为开机文件的类型,/boot/中文件属于这个类别
Bin_t作为二进制执行文件,/bin中多数属于这个类别
Sbin_t作为系统管理类型的文件,/sbin中属于这个类别
Device_t代表设备文件./dev下属于这个类别
Lib_t连接库类型/lib下属于这个类别
Var_t
……
Usr_t
………
Etc_t
……..
Tty_device_t代表终端机或控制台设备
Su_exec_t具备SU功能的执行文件
Java_exec_tJAVA相关的执行文件
Public_content_t公共内容类型的文件。如:FTP,NFS等服务器文件
Shadow_t代表存储密码文件的类型
Httpd_t作为HTTP文件的相关类别
1.4LEVEL(层次)和CATEGORY(分类)字段(略过)
2:安全上下文的默认值
REDHATLINUX系统如何产生每一个对象的安全上下文?从进程和文件两方面加以分析:
2.1进程默认安全上下文
子进程继承父进程的安全上下文,除外子进程修改了自己的安全上下文。
2.2文件默认的安全上下文
2.2.1安装RPM包说产生的文件
因为RPM包里面就记录了每一个文件的安全上下文的数据,所以在安装RPM包的时候,RPM工具就
会自动配置安装包里面的文件的上下文到系统目录里面。
2.2.2手动建立的新文件
在什么目录下建立新文件,就沿用什么目录的安全上下文。
3:查看文件和进程的安全上下文
使用命令:id–Z(查看账号的);ls–Z(查看文件的);ps–Z(查看进程的)。
4:修改安全上下文
修改对象(文件)的安全上下文,使用命令:chcon
命令格式:
Chcon[OPTIONS…]CONTEXTFILES…..
Chcon[OPTIONS…]–reference=PEF_FILESFILES…
说明:
CONTEXT为要设置的安全上下文
FILES对象(文件)
--reference参照的对象
PEF_FILES参照文件上下文
FILES应用参照文件上下文为我的上下文。
OPTIONS如下:
-f强迫执行
-R递归地修改对象的安全上下文
-rROLE修改安全上下文角色的配置
-tTYPE修改安全上下文类型的配置
-uUSER修改安全上下文用户的配置
-v显示冗长的信息
5:修复安全上下文
5.1
5.1.1先使用命令matchpathcon找出对象的安全上下文,然后再使用命令chcon命令修改对象的安全上下文。
5.1.2使用命令fixfiles工具仅修复RPM包里的对象的安全上下文
使用工具fixfiles来修复RPM包文件的安全上下文。
命令格式:fixfiles[-RPACKAGES„][check|restore]
参数说明:
-RPACKEAGES指定仅修复PACKAGES软件包;如果没有指定这个参数,表示修复所有的软件包
Check仅检查指定的软件包中错误的安全上下文
Restore除了检查之外,还修复错误的安全上下文
命令使用:
Fixfiles-Rdmailcheck###检测ndmail错误的上下文
Fixfiles-Rdmailrestore###修复ndmail错误的上下文
5.1.3使用restorecon还原文件的上下文
说明:非RPM包的文件安全上下文修复。(5.1.1也可)
命令格式:restorecon[OPTIONS„][FILES„]
6:重新生产安全上下文
只需两步:
6.1建立空文件/.autorelabel
6.2重新启动系统即可
本文发布于:2023-01-04 03:22:15,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/88298.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |