CDH| 安全之Kerberos安全認證


 

 

1 Kerberos概述

 1 什么是Kerberos

Kerberos是一種計算機網絡授權協議,用來在非安全網絡中,對個人通信以安全的手段進行身份認證。這個詞又指麻省理工學院為這個協議開發的一套計算機軟件。軟件設計上采用客戶端/服務器結構,並且能夠進行相互認證,即客戶端和服務器端均可對對方進行身份認證。可以用於防止竊聽、防止重放攻擊、保護數據完整性等場合,是一種應用對稱密鑰體制進行密鑰管理的系統。

 2. Kerberos簡單了解

Kerberos中有以下一些概念需要了解:

  1KDC:密鑰分發中心,負責管理發放票據,記錄授權。

  2域:Kerberos管理領域的標識。

  3principal:當每添加一個用戶或服務的時候都需要向kdc添加一條principalprincipl的形式為:主名稱/實例名@領域名。

  4主名稱:主名稱可以是用戶名或服務名,還可以是單詞host,表示是用於提供各種網絡服務(如hdfs,yarn,hive)的主體。

  5實例名:實例名簡單理解為主機名。

  6領域:Kerberos的域。

3 Kerberos認證原理

1)客戶端初始驗證

                            

2)獲取服務訪問

                    

2 安裝

server節點安裝kerberos相關軟件

[root@hadoop101 ~]# yum install -y krb5-server krb5-workstation krb5-libs [root@hadoop101 ~]# rpm -qa | grep krb5 krb5-server-1.10.3-65.el6.x86_64 krb5-libs-1.10.3-65.el6.x86_64 krb5-workstation-1.10.3-65.el6.x86_64

client節點安裝

Hadoop102上的安裝:

[root@hadoop102 ~]# yum install -y krb5-workstation krb5-libs 已加載插件:fastestmirror, refresh-packagekit, security... 總下載量:1.6 M 下載軟件包: (1/3): krb5-libs-1.10.3-65.el6.x86_64.rpm                                                                                                           | 675 kB     00:00 (2/3): krb5-workstation-1.10.3-65.el6.x86_64.rpm                                                                                                    | 814 kB     00:00 (3/3): libkadm5-1.10.3-65.el6.x86_64.rpm                                                                                                            | 143 kB     00:00     
-------------------------------------------------------------------------- [root@hadoop102 ~]# rpm -qa | grep krb5   krb5-workstation-1.10.3-65.el6.x86_64   krb5-libs-1.10.3-65.el6.x86_64

 Hadoop103上的安裝:

[root@hadoop103 ~]# yum install -y krb5-workstation krb5-libs 已加載插件:fastestmirror, refresh-packagekit, security 設置安裝進程

 

配置kerberos

需要配置的文件有兩個為kdc.confkrb5.conf , 配置只是需要Server服務節點配置,即hadoop101.

1) kdc配置

[root@hadoop101 ~]# vim /var/kerberos/krb5kdc/kdc.conf [kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88 [realms] HADOOP.COM = { #master_key_type = aes256-cts acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab  supported_enctypes = aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal  }

說明:

HADOOP.COM:設定的realms,隨便起名,Kerberos支持多個realms,一般全用大寫

acl_file:admin的用戶權限。

admin_keytab:KDC進行校驗的keytab

supported_enctypes:支持的校驗方式。注意把aes256-cts去掉,JAVA使用aes256-cts驗證方式需要安裝額外的jar,所有這里不用。

2) krb5文件配置

[root@hadoop101 ~]# vim /etc/krb5.conf [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults]  default_realm = HADOOP.COM  dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d  udp_preference_limit = 1 [realms]  HADOOP.COM = { kdc = hadoop101 admin_server = hadoop101 } [domain_realm] .example.com = HADOOP.COM example.com = HADOOP.COM

說明:l

default_realm:默認的realm,設置 Kerberos 應用程序的默認領域,必須跟要配置的realm的名稱一致。如果有多個領域,只需向 [realms] 節添加其他的語句。

ticket_lifetime:表明憑證生效的時限,一般為24小時。

renew_lifetime : 表明憑證最長可以被延期的時限,一般為一個禮拜。當憑證過期之后,對安全認證的服務的后續訪問則會失敗。

udp_preference_limit= 1:禁止使用 udp,可以防止一個 Hadoop 中的錯誤

[realms]:列舉使用的 realm。

3)同步krb5Client節點

[root@hadoop101 ~]# xsync /etc/krb5.conf fname=krb5.conf pdir=/etc ------------------- hadoop102 -------------- sending incremental file list krb5.conf sent 506 bytes  received 37 bytes  362.00 bytes/sec total size is 429  speedup is 0.79
------------------- hadoop103 -------------- sending incremental file list krb5.conf sent 506 bytes  received 37 bytes  1086.00 bytes/sec total size is 429  speedup is 0.79

 

生成Kerberos數據庫

server節點執行

[root@hadoop101 ~]# kdb5_util create -s Loading random data Initializing database '/var/kerberos/krb5kdc/principal' for realm 'HADOOP.COM', master key name 'K/M@HADOOP.COM' You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter KDC database master key: 123456 Re-enter KDC database master key to verify: 123456

創建完成后/var/kerberos/krb5kdc目錄下會生成對應的文件 [root@hadoop101
~]# ls /var/kerberos/krb5kdc/ kadm5.acl kdc.conf principal principal.kadm5 principal.kadm5.lock principal.ok

  這里會在Loading random data卡很久,可以重新開啟一個窗口執行cat /dev/sda > /dev/urandom命令,加快消耗CPU,增加隨機數采集。

[root@hadoop101 ~]# cat /dev/sda > /dev/urandom

 

創建管理員主體/實例
[root@hadoop101 ~]# kadmin.local -q "addprinc admin/admin" Authenticating as principal root/admin@HADOOP.COM with password. WARNING: no policy specified for admin/admin@HADOOP.COM; defaulting to no policy Enter password for principal "admin/admin@HADOOP.COM": 123456 Re-enter password for principal "admin/admin@HADOOP.COM": 123456 Principal "admin/admin@HADOOP.COM" created. 


給管理員實例的所有主體授權 [root@hadoop101 ~]# vim /var/kerberos/krb5kdc/kadm5.acl #修改為以下內容: */admin@HADOOP.COM

說明:

*:全部的主體

/admin:admin實例

@HADOOP.COM:領域

最后*:全部權限。

這個授權的意思:就是授予admin實例的全部主體對應HADOOP.COM領域的全部權限。

也就是創建Kerberos主體的時候如果實例為admin,就具有HADOOP.COM領域的全部權限,比如創建如下的主體user1/admin就擁有全部的HADOOP.COM領域的權限。

啟動服務

#啟動krb5kdc

[root@hadoop101 ~]# [root@hadoop101 ~]# service krb5kdc start 正在啟動 Kerberos 5 KDC: [確定] [root@hadoop101 ~]# service kadmin start 正在啟動 Kerberos 5 Admin Server: [確定] [root@hadoop101 ~]# chkconfig krb5kdc on [root@hadoop101 ~]# chkconfig |grep krb5kdc krb5kdc 0:關閉 1:關閉 2:啟用 3:啟用 4:啟用 5:啟用 6:關閉 [root@hadoop101 ~]# chkconfig kadmin on [root@hadoop101 ~]# chkconfig |grep kadmin kadmin 0:關閉 1:關閉 2:啟用 3:啟用 4:啟用 5:啟用 6:關閉 [root@hadoop101 ~]# 

注意:啟動失敗時可以通過/var/log/krb5kdc.log/var/log/kadmind.log來查看。

kinit管理員驗證

[root@hadoop101 ~]# kinit admin/admin Password for admin/admin@HADOOP.COM: 123456 [root@hadoop101 ~]# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: admin/admin@HADOOP.COM  Valid starting Expires Service principal 04/05/20 23:39:44 04/06/20 23:39:44 krbtgt/HADOOP.COM@HADOOP.COM renew until 04/05/20 23:39:44

出現以上紅色admin/admin@HADOOP.COM說明沒問題

在其他機器嘗試:

[root@hadoop102 ~]# kinit admin/admin Password for admin/admin@HADOOP.COM: 123456 [root@hadoop102 ~]# kadmin admin/admin Authenticating as principal admin/admin@HADOOP.COM with password. Password for admin/admin@HADOOP.COM: 123456 kadmin: 如果出現:kadmin: GSS-API (or Kerberos) error while initializing kadmin interface,則重啟ntp服務: [root@hadoop102 ~]# service ntpd restart 關閉 ntpd: [確定] 正在啟動 ntpd: [確定]

 

常用命令

1 登錄Kerberos

service節點登錄:

[root@hadoop101 ~]# kadmin.local Authenticating as principal admin/admin@HADOOP.COM with password. kadmin.local: 

client節點登錄:

[root@hadoop102 ~]# kadmin admin/admin Authenticating as principal admin/admin@HADOOP.COM with password. 123456 Password for admin/admin@HADOOP.COM: kadmin: 

退出輸入:exit

創建Kerberos主體 [root@hadoop101 ~]# kadmin.local -q "addprinc kris" Authenticating as principal admin/admin@HADOOP.COM with password. WARNING: no policy specified for atguigu@HADOOP.COM; defaulting to no policy Enter password for principal "kris@HADOOP.COM": (輸入密碼) Re-enter password for principal "kris@HADOOP.COM": (輸入密碼) Principal "kris@HADOOP.COM" created.

修改主體密碼 [root@hadoop101 ~]# kadmin.local -q "cpw kris" Authenticating as principal admin/admin@HADOOP.COM with password. Enter password for principal "kris@HADOOP.COM": (輸入密碼) Re-enter password for principal "kris@HADOOP.COM": (輸入密碼) Password for "kris@HADOOP.COM" changed.

查看所有主體 [root@hadoop101 ~]# kadmin.local -q "list_principals" Authenticating as principal admin/admin@HADOOP.COM with password. K/M@HADOOP.COM admin/admin@HADOOP.COM kadmin/admin@HADOOP.COM kadmin/changepw@HADOOP.COM kadmin/hadoop102@HADOOP.COM krbtgt/HADOOP.COM@HADOOP.COM
kris@HADOOP.COM

生成keytab密鑰文件 生成主體kris的keytab文件到指定目錄/root/atguigu.keytab [root@hadoop101 ~]# kadmin.local -q "xst -k /root/kris.keytab kris@HADOOP.COM"


主體認證 使用kinit進行主體認證 [root@hadoop101 ~]# kinit admin/admin Password for admin/admin@HADOOP.COM: 查看認證憑證 [root@hadoop101 ~]# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: admin/admin@HADOOP.COM Valid starting Expires Service principal 08/27/19 15:41:28 08/28/19 15:41:28 krbtgt/HADOOP.COM@HADOOP.COM renew until 08/27/19 15:41:28


使用keytab進行認證 [root@hadoop101 ~]# kinit -kt /root/atguigu.keytab atguigu [root@hadoop101 ~]# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: atguigu@HADOOP.COM Valid starting Expires Service principal 08/27/19 15:45:09 08/28/19 15:45:09 krbtgt/HADOOP.COM@HADOOP.COM renew until 08/27/19 15:45:09


銷毀憑證 [root@hadoop101 ~]# kdestroy [root@hadoop101 ~]# klist klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_0)

 

安裝Kerberos可能出現的問題
1 Kerberos啟動后台日志提示異常:No such file or directory - while initializing database for realm HADOOP.COM /var/log/krb5kdc.log中發現No such file or directory - while initializing database for realm HADOOP.COM。
解決方法:
1)檢查kdc.conf和krb5.conf文件是否配置正確,修改配置,注意:配置文件的[kdcdefaults],[logging]、[libdefaults]等的里面不能有空格 2)停止服務 service krb5kdc stop service kadmin stop 3)刪除Kerberos數據庫重新創建數據庫 rm -rf /var/kerberos/krb5kdc/*principal* kdb5_util create -s -r HADOOP.COM 4)創建管理員 kadmin.local -q "addprinc admin/admin" 5)啟動服務 service krb5kdc start service kadmin start

2 kinit通過keytab認證出現異常 通過Linux的atguigu主體執行kinit -kt /root/atguigu.keytab atguigu出現下面情況: kinit: ???? while getting initial credentials 或者 kinit: Permission denied while getting initial credentials 解決方式: 1)使用root用戶修改kris.keytab的所屬用戶: chown kris/root/kris.keytab 2) 修改atguigu.keytab的權限為660 chmod 660 /root/kris.keytab

3 kinit認證時密碼輸入正確卻提示密碼錯誤 [root@hadoop101 ~]# kinit kris Password for kris@HADOOP.COM: kinit: Password incorrect while getting initial credentials 這是因為kris已經生成了keytab,所以此時通過這種方式不能認證,需要通過keytab文件來認證,或者修改密碼后再認證(修改密碼后之前的keytab文件會失效)。 [root@hadoop101 ~]# kinit -kt /root/kris.keytab atguigu [root@hadoop101 ~]# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: kris@HADOOP.COM Valid starting Expires Service principal 08/27/19 16:00:39 08/28/19 16:00:39 krbtgt/HADOOP.COM@HADOOP.COM renew until 08/27/19 16:00:39

4 創建數據庫異常 Bad krb5 admin server hostname while initializing kadmin interface 原因:在 krb5.conf 文件中為 admin_server 配置了無效的主機名。 解決辦法:修改krb5文件,檢查admin_server配置是否正確的主機名,修改后,重啟執行創建數據庫的命令。
5 異常問題:Configuration file does not specify default realm when parsing name admin/admin 這是由於krb5.conf文件被刪除或者不可用,重新創建即可

 

CDH添加Kerberos

1 創建超級管理員用戶

創建cloudera-scm/admin為CDH的Kerberos管理員主體。

[root@hadoop101 ~]# kadmin.local -q "addprinc cloudera-scm/admin"
Authenticating as principal admin/admin@HADOOP.COM with password.
WARNING: no policy specified for cloudera-scm/admin@HADOOP.COM; defaulting to no policy
Enter password for principal "cloudera-scm/admin@HADOOP.COM": 123456
Re-enter password for principal "cloudera-scm/admin@HADOOP.COM": 123456
Principal "cloudera-scm/admin@HADOOP.COM" created.

停止所有服務

開啟Kerberos

 

勾選全部

 

填寫配置

Kerberos 加密類型:aes128-ctsdes3-hmac-sha1arcfour-hmac

 

 

 cloudera-scm/admin

123456

 

 

 

 

等待完成

這里因為先停止了所有服務,所以第一二步會報錯,忽略。

 

 

查看主體

[root@hadoop101 ~]# kadmin.local -q "list_principals" Authenticating as principal cloudera-scm/admin@HADOOP.COM with password. HTTP/hadoop101@HADOOP.COM HTTP/hadoop102@HADOOP.COM HTTP/hadoop103@HADOOP.COM K/M@HADOOP.COM admin/admin@HADOOP.COM cloudera-scm/admin@HADOOP.COM hdfs/hadoop101@HADOOP.COM hdfs/hadoop102@HADOOP.COM hdfs/hadoop103@HADOOP.COM hive/hadoop101@HADOOP.COM hue/hadoop101@HADOOP.COM impala/hadoop101@HADOOP.COM impala/hadoop102@HADOOP.COM impala/hadoop103@HADOOP.COM kadmin/admin@HADOOP.COM kadmin/changepw@HADOOP.COM kadmin/hadoop101@HADOOP.COM kafka/hadoop101@HADOOP.COM kafka/hadoop102@HADOOP.COM kafka/hadoop103@HADOOP.COM krbtgt/HADOOP.COM@HADOOP.COM kris@HADOOP.COM mapred/hadoop101@HADOOP.COM oozie/hadoop101@HADOOP.COM sentry/hadoop101@HADOOP.COM yarn/hadoop101@HADOOP.COM yarn/hadoop102@HADOOP.COM yarn/hadoop103@HADOOP.COM zookeeper/hadoop101@HADOOP.COM zookeeper/hadoop102@HADOOP.COM zookeeper/hadoop103@HADOOP.COM

Sentry配置修改

1 停止所有服務

 

管理員組添加admin用戶和組

1)點擊sentry

 

2)點擊配置

 

3)搜索sentry.service.admin.group

 

4)添加admin並刪除其他,保留hiveadmin

 

3 連接用戶中添加admin用戶和組

搜索sentry.service.allow.connect添加admin,並保存。

 

Sentry 服務高級配置代碼段

搜索sentry-site.xml Sentry 服務,添加如下內容:

<property>
<name>sentry.service.processor.factories</name>
<value>org.apache.sentry.provider.db.service.thrift.SentryPolicyStoreProcessorFactory,org.apache.sentry.hdfs.SentryHDFSServiceProcessorFactory</value>
</property>
<property>
<name>sentry.policy.store.plugins</name>
<value>org.apache.sentry.hdfs.SentryPlugin</value>
</property>
<property>
<name>sentry.hdfs.integration.path.prefixes</name>
<value>/user/hive/warehouse</value>
</property>

 

 

 

1 進入hdfs配置頁面

 

 

開啟Hadoop安全身份驗證

搜索hadoop.security.authentication,將其改為kerberos

 

 

開啟Hadoop安全授權

搜索hadoop.security.authorization,將其勾選。

 

 

修改Hadoop組映射實現

搜索Hadoop.security.group.mapping修改值為:

org.apache.hadoop.security.ShellBasedUnixGroupsMapping

 

啟動訪問控制列表

搜索dfs.namenode.acls.enabled,將其勾選

 

啟動HDFS權限檢查,並啟動Sentry同步

1)搜索dfs.permissions,勾選HDFS

 

2搜索 Sentry 同步,勾選HDFS

 

修改管理員用戶和授權用戶

1修改管理員用戶

HDFS的配置頁面搜索“授權的管理員用戶”,默認是*,把*修改為admin,並添加hdfs

 

2)修改授權用戶

HDFS的配置頁面搜索“授權的用戶”,默認是*表示全部的Kerberos用戶,修改為:

Cloudera-scm,admin,hdfs,hbase,hive,spark,zookeeper,yarn,mapred,sqoop,sqoop2,oozie,

hue,kafka, flume,impala,storm,solr等,主要是看自己集群有哪些框架。

備注:這里基本常用的組件超級管理員都授權了,避免組件啟動異常。

 

 

 

Yarn配置修改

1 修改運行系統用戶

 

2 修改最小用戶ID

 

3 RM ACL

Yarn配置頁搜索“yarn.acl.enable”,修改其值為true

 

Hive配置修改

1 配置Sentry服務

搜索“Sentry 服務”中選擇“Sentry”

 

2 HiveServer2關閉模擬

搜索“Hive Impersonation”,取消勾選。

 

3 啟動Hive倉庫子目錄繼承權限

搜索“Hive.warehouse.subdir.inherit.perms”,將其勾選。

 

4 設置sentry.hive.testing.modefalse

搜索“hive-site.xml 的 Hive 服務高級配置代碼段(安全閥)”添加如下配置:

名稱:sentry.hive.testing.mode

值:false

 

4 設置hive.security.authorization.task.factory

搜索“hive-site.xml 的 HiveServer2 高級配置代碼段(安全閥)添加如下配置:

名稱:hive.security.authorization.task.factory

值:org.apache.sentry.binding.hive.SentryHiveAuthorizationTaskFactoryImpl

 

5 設置Hive Metastor Serverhive-site.xml

搜索“hive-site.xml 的 Hive Metastore Server 高級配置代碼段(安全閥)”添加如下配置:

<property>
<name>hive.metastore.client.impl</name>
<value>org.apache.sentry.binding.metastore.SentryHiveMetaStoreClient</value>
<description>Sets custom Hive Metastore client which Sentry uses to filter out metadata.</description>
</property>
<property>
<name>hive.metastore.pre.event.listeners</name>
<value>org.apache.sentry.binding.metastore.MetastoreAuthzBinding</value>
<description>list of comma separated listeners for metastore events.</description>
</property>
<property>
<name>hive.metastore.event.listeners</name>
<value>org.apache.sentry.binding.metastore.SentryMetastorePostEventListener</value>
<description>list of comma separated listeners for metastore, post events.</description>
</property>
<property>
<name>hive.metastore.filter.hook</name>
<value>org.apache.sentry.binding.metastore.SentryMetaStoreFilterHook</value>
</property>

 

10 Zookeeper配置修改

啟動Kerberos身份驗證。

在Zookeeper設置界面搜索“enableSecurity”,將其勾選。

 

Kafka配置修改

1 設置Kafka安全身份驗證

在Kafka的配置中搜索“kerberos.auth.enable”並將其勾選。

 

 

設置Kafka認證方式

在Kafka設置中搜索“security.inter.broker.protoco”修改其值為:SASL_PLAINTEXT。

 

配置kakfa.properties

l 在Kafka的配置頁面中搜索“kafka.properties 的 Kafka Broker 高級配置代碼段(安全閥)”其值添加如下內容:

authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer

super.users=User:kafka;User:admin;

 

Kafka支持命令行的kinit操作

1創建jaas文件

[root@hadoop101 ~]# vim /etc/kafka/kafka_client_jaas.conf fkaClient { com.sun.security.auth.module.Krb5LoginModule required useTicketCache=true; };

 

[root@hadoop101 ~]# xsync /etc/kafka/kafka_client_jaas.conf fname=kafka_client_jaas.conf pdir=/etc/kafka ------------------- hadoop102 -------------- sending incremental file list kafka_client_jaas.conf sent 180 bytes received 31 bytes 422.00 bytes/sec total size is 90 speedup is 0.43 ------------------- hadoop103 -------------- sending incremental file list kafka_client_jaas.conf sent 180 bytes received 31 bytes 422.00 bytes/sec total size is 90 speedup is 0.43

2)修改kafka-run-class.sh文件

JVM performance options參數的KAFKA_JVM_PERFORMANCE_OPTS中加入

-Djava.security.auth.login.config=/etc/kafka/kafka_client_jaas.conf

[root@hadoop101 ~]# vim /opt/cloudera/parcels/KAFKA/lib/kafka/bin/kafka-run-class.sh

 

[root@hadoop101 ~]# xsync /opt/cloudera/parcels/KAFKA/lib/kafka/bin/kafka-run-class.sh[root@hadoop101 ~]# vim /etc/kafka/conf/producer.properties ecurity.protocol=SASL_PLAINTEXT sasl.mechanism=GSSAPI sasl.kerberos.service.name=kafka

分發:

[root@hadoop101 ~]# xsync /etc/kafka/conf/producer.properties

 

4)生成consumer.properties文件 [root@hadoop101 ~]# vim /etc/kafka/conf/consumer.properties 添加 security.protocol=SASL_PLAINTEXT sasl.mechanism=GSSAPI sasl.kerberos.service.name=kafka 分發: [root@hadoop101 ~]# xsync /etc/kafka/conf/consumer.properties

5 設置zookeeper.chroot

kafka的配置頁面搜索“zookeeper.chroot”,將值修改為:/kafka,並保存更改。

 

 

6 取消Sentry服務

 

部署客戶端並啟動服務

 

 

 

 

設置windows瀏覽器授權

我們設置CDH支持kerberos后會出現下圖所示的情況:

可以登錄50070,但是不能查看目錄及文件,這是由於我們本地環境沒有通過認證。

接下來我們設置本地驗證。

注意:由於瀏覽器限制問題,我們這里使用火狐瀏覽器,其他如:谷歌,ie等均會出現問題。

 

 

 

 

 

 

 

3 安裝kfw

1)安裝提供的kfw-4.1-amd64.msi。

2)將集群的/etc/krb5.conf文件的內容復制到C:\ProgramData\MIT\Kerberos5\krb.ini中。

3)打開MIT,輸入主體名和密碼:

   https://www.cnblogs.com/kischn/p/7443343.html

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM