hadoop安全目录:

  1. kerberos(已发布)

  2. elasticsearch(已发布)http://blog.51cto.com/chenhao6/2113873

  3. knox

  4. oozie

  5. ranger

  6. apache sentry

简介:

从运维青铜到运维白银再到运维黄金,这里就要牵扯到方向问题也就是装备,根据自己的爱好,每个人都应该选择一个适合自己和喜欢自己的一个职业技术方向,如:大数据安全,开发运维,云计算运维等等。而掌握的越多前言技术也就是更多的装备,才能更好的在it行业混下去,毕竟it技术更新太快,初级篇和中级篇前面已介绍。

如果你想了解大数据的学习路线,想学习大数据知识以及需要免费的学习资料可以加群:784789432.欢迎你的加入。

初级篇:详解Linux运维工程师入门必备技能(青铜)

中级篇:详解Linux运维工程师打怪升级篇(白银)

现在给大家介绍大数据安全的正式面目:

1.大数据基本组件

2. Hadoop安全背景

 共享集群

 按照业务或应用的规则划分资源队列,并分配给

特定用户

 HDFS上存放各种数据,包括公共的、机密的

 安全认证:确保某个用户是自己声称的那个用户

 安全授权:确保某个用户只能做他允许的那些操作

如果你想了解大数据的学习路线,想学习大数据知识以及需要免费的学习资料可以加群:784789432.欢迎你的加入。

3. 设备说明

服务

IP

主机名

系统

Ambari

Kerberos

192.168.2.140

hdp140

CentOS 7.3

namenode

192.168.2.141

hdp141

CentOS 7.3

datanode

192.168.2.142

hdp142

CentOS 7.3

datanode

192.168.2.143

hdp143

CentOS 7.3

4. kerberos基本概念:

 Principal(安全个体):被认证的个体,有一个名字和口令

 KDC(key distribution center ) : 是一个网络服务,提供ticket 和临时会话密钥

 Ticket:一个票据,客户用它来向服务器证明自己的身份,包括客户标识、会话密钥、时间戳。

 AS (Authentication Server): 认证服务器

 TGS(Ticket Granting Server): 许可证服务器

 TGT:Ticket-granting Ticket

5. kerberos认证过程:

6. 集群启用Kerberos认证

装KDC Server

1. 安装一个新的KDC Server(任意一个集群主机,这里hdp141为例)

1
# yum install krb5-server krb5-libs krb5-workstation

2. 打开KDC Server的配置文件

# vi /etc/krb5.conf

修改文件中的[realms]部分,将为属性kdc和admin_server设置的默认值“kerberos.example.com”替换成实际KDC server的主机名。在下面的例子中,“kerberos.example.com”被替换成了 “my.kdc.server”。

1
2
3
4
5
[realms]
EXAMPLE.COM = {
kdc = my.kdc.server
admin_server = my.kdc.server
}

3. (可选)自定义realms配置(EXAMPLE.COM修改为CESHI.COM,下面例子都为CESHI.COM)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# vi /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 = CESHI.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
  
[realms]
 CESHI.COM = {
  kdc = hdp141
  admin_server = hdp141
 }
  
[domain_realm]
 .vrv.com = CESHI.COM
 vrv.com = CESHI.COM
# vi /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88
  
[realms]
CESHI.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 = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
 }

4.创建Kerberos数据库

创建过程中需要输入master key。

1
2
3
4
5
6
7
8
# kdb5_util create -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'CESHI.COM',
master key name 'K/M@CESHI.COM'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key: ceshi123456.
Re-enter KDC database master key to verify: ceshi123456.

5.启动KDC

1
2
3
4
# service krb5kdc start
# chkconfig krb5kdc on
# service kadmin start
# chkconfig kadmin on

6.创建kerberos Admin

通过创建一个admin principal创建KDC admin,需要输入principal的密码。

1
2
3
4
5
6
7
# kadmin.local -q "addprinc admin/admin"
Authenticating as principal root/admin@CESHI.COM.COM with password.
WARNING: no policy specified for admin/admin@CESHI.COM.COM; defaulting to no policy
Enter password for principal "admin/admin@CESHI.COM.COM": ceshi123456.
Re-enter password for principal "admin/admin@CESHI.COM.COM": ceshi123456.
Principal "admin/admin@CESHI.COM" created.
"admin/admin@CESHI.COM":ceshi123456.

打开KDC ACL文件,确认admin principal在KDC ACL中拥有权限,若没有对应的域则需要添加。

1
2
# vi /var/kerberos/krb5kdc/kadm5.acl
*/admin@VRV.COM *

如果修改了文件kadm5.acl,那么你就必须重启kadmin进程

1
# service kadmin restart

7.启用Kerberos保护

安装JCE

必须用官网下载的JCE覆盖本地已有的JCE,否则将缺少供Kerberos使用的加密方式

在Ambari server所在的主机和集群中的所有主机上,根据使用的JDK版本选择合适的JCE策略文件。

• Oracle JDK 1.7:

http://www.oracle.com/technetwork/java/javase/downloads/jce-7-

download-432124.html

• Oracle JDK 1.8:

http://www.oracle.com/technetwork/java/javase/downloads/jce8-

download-2133166.html

在Ambari Server所在主机和集群中的所有主机上,添加unlimited security policy JCE jars

到目录$AMBARI_SERVER_JAVA_HOME/jre/lib/security/下。

注意:在所有的主机上,JCE相关的包都必须解压到配置文件/etc/ambari-server/conf/ambari.properties中属性java.home所指定的JDK目录下

1
2
# JAVA_HOME=/usr/java/default
# unzip -o -j -q UnlimitedJCEPolicyJDK8.zip -d $JAVA_HOME/jre/lib/security/

重启Ambari Server(ambari server服务器hdp140)

1
# service ambari-server restart

8.运行Kerberos保护向导

1. 确认KDC已经安全和正确配置,并且已经在集群的所有主机上配置好JCE。

2. 登录Ambari Web,打开管理员 > Kerberos

3.点击启用Kerberos,启用安装向导,选择条件检查

4.提供关于KDC和管理员账号的信息

KDC相关信息请参考配置文件/etc/krb5.conf

5.ambari会在集群的主机上安装Kerberos客户端,然后通过测试是否能创建principal,生成keytab和分配Keytab来测试是否能连接KDC。

自定义Hadoop使用的Kerberos identities

6.确认你的配置。你可以通过页面下载自动创建的包含principals和Keytabs的CSV文件。

7.停止服务

8.启用kerberos

Keytabs保存在主机的/etc/security/keytabs目录下。

9.启动和测试服务

启动和测试服务成功后点击完成以结束Kerberos的启用。

10.查看已启用的Kerberos配置

到这里kerberos安装完成。

高级选项:

为Ambari Server设置Kerberos(可选项)

1. 使用kadmin在你的KDC所在的主机(hdp141)为Ambari Server创建一个principal。(ambari-server为自定义名)

1
# kadmin.local -q "addprinc -randkey ambari-server@CESHI.COM

2. 为此principal生成一个Keytab

1
# kadmin.local -q "xst -k ambari.server.keytab ambari-server@CESHI.COM"

3. 将单前目录生成的Keytab拷贝到Ambari Server所在的集群。确定该文件有合适的权限,能够被启动Ambari Server守护进程所访问。

1
2
3
# scp ambari.server.keytab hdp140:/etc/security/keytabs/
# ll /etc/security/keytabs/ambari.server.keytab
-r--r----- 1 root root 530 Dec 18 20:06 /etc/security/keytabs/ambari.server.keytab

4. 停止ambari server

1
# ambari-server stop

5. 运行setup-security命令,设置JAAS。标红部分为需要设置部分。

A. 选择3,Setup Ambari kerberos JAAS configuration

B. 输入第一步为Ambari Server设置的principal名

C. 输入Ambari principal的Keytab所在路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# ambari-server setup-security
Using python  /usr/bin/python2
Security setup options...
===========================================================================
Choose one of the following options:
  [1] Enable HTTPS for Ambari server.
  [2] Encrypt passwords stored in ambari.properties file.
  [3] Setup Ambari kerberos JAAS configuration.
  [4] Setup truststore.
  [5] Import certificate to truststore.
===========================================================================
Enter choice, (1-5): 3
Setting up Ambari kerberos JAAS configuration to access secured Hadoop daemons...
Enter ambari server's kerberos principal name (ambari@VRV.COM): ambari-server@VRV.COM
Enter keytab path for ambari server's kerberos principal: /etc/security/keytabs/ambari.server.keytab
Ambari Server 'setup-security' completed successfully.
重启Ambari Server
# ambari-server restart

开始实测:

1.新建测试用户

普通用户需要安装ranger(后面介绍)管理权限。

列出所有用户

1
2
3
4
5
6
7
# kadmin.local #在kdc服务器上执行
kadmin.local:  listprincs  #//列出所有用户
ambari-server@CESHI.COM
.................
nn/hdp140@CESHI.COM
zookeeper/hdp142@CESHI.COM
zookeeper/hdp143@CESHI.COM

创建测试用户

1
2
3
4
kadmin.local:  addprinc test
Enter password for principal "test@CESHI.COM": ceshi123456.
Re-enter password for principal "test@CESHI.COM": ceshi123456.
Principal "test@CESHI.COM" created.

登录验证

# kinit test  #登陆

ceshi123456.

退出登陆状态

1
注销:kdestroy

集群登录与授权(hdfs用户)

未使用kerberos用户认证前执行

1
# hadoop dfs -ls /

使用kerberos用户认证

1
2
3
# kinit test  #登陆
Password for test@CESHI.com #ceshi123456.
# hadoop dfs -ls /

此时test用户默认有查看权限,无目录授权

换到hdfs用户下,初始化hdfs

查看hdfs的Kerberos用户名

1
2
3
4
5
6
7
8
9
10
11
12
13
# klist -k /etc/security/keytabs/hdfs.headless.keytab
Keytab name: FILE:hdfs.headless.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   1 hdfs-test@CESHI.COM
   1 hdfs-test@CESHI.COM
   1 hdfs-test@CESHI.COM
   1 hdfs-test@CESHI.COM
   1 hdfs-test@CESHI.COM
初始化认证hdfs用户
# kinit -k hdfs-test@CESHI.COM -t /etc/security/keytabs/hdfs.headless.keytab 
创建目录:hadoop fs -mkdir  /test
查看目录属性:

改变目录属性:hadoop fs -chown test:hdfs  /test

使用test用户登录

修改密码和重新生成

1
2
3
4
5
6
7
8
#修改密码命令cpw test(KDC server上执行)
# kadmin.local
Authenticating as principal test/admin@CESHI.COM with password.
kadmin.local:  cpw test
Enter password for principal "test1@CESHI.COM": ceshi123
Re-enter password for principal "test1@CESHI.COM": ceshi123
change_password: Principal does not exist while changing password for "test@CESHI.COM".
kadmin.local:  exit

生成新的多用户使用keytab文件

创建keytab文件(生成到当前文件夹下)

案例:将hive和hdfs的keytab集成到同一个keytab文件中

1. 查看所有princs

1
2
3
4
5
# kadmin.local
Kadmin.local: listprincs
hbase/hdp143@CESHI.COM"
hdfs-vrvtest@CESHI.COM"
hive/hdp140@CESHI.COM"

2. 添加hdfs的princs的keytab到hdfs-hive.keytab

1
2
# kadmin.local 
Kadmin.local: xst -norandkey -k hdfs-hive.keytab hdfs-vrvtest@CESHI.COM

3. 添加hive的princs的keytab到hdfs-hive.keytab

1
2
# kadmin.local 
Kadmin.local: xst -norandkey -k hdfs-hive.keytab hive/hdp140@CESHI.COM

查看生成的hdfs-hive.keytab

使用生成的Keytab文件登录

1
# kinit -k -t hdfs-hive.keytab hive/hdp140@CESHI.COM

修改租期

1.修改全局租期

1
2
3
4
5
6
7
8
9
10
# vi /etc/krb5.conf
[libdefaults]
 default_realm = CESHI.COM
dns_lookup_realm = false  
dns_lookup_kdc = false
ticket_lifetime = 24h  
#ticket 租期时间
renew_lifetime = 7d 
#重新申请时间
frwardable = true

#重新启动

1
2
# service krb5kdc restart
# service  kadmin restart

2.手动修改用户租期时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#查看租期时间
可在kadmin命令行下用getprinc命令查看默认的最大时长,否则时长被限制在24小时,并且无法renew)
# kadmin.local
kadmin.local:getprinc hive/hdp141
Principal: hive/hdp141@CESHI
Expiration date: [never]
Last password change: Mon Dec 18 05:56:57 EST 2017
Password expiration date: [none]
Maximum ticket life: 1 day 00:00:00 #租期时间
Maximum renewable life: 0 days 00:00:00 #重新续租时间
Last modified: Mon Dec 18 05:56:57 EST 2017 (admin/admin@VRV.COM)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 8
Key: vno 1, aes256-cts-hmac-sha1-96
Key: vno 1, aes128-cts-hmac-sha1-96
Key: vno 1, des3-cbc-sha1
Key: vno 1, arcfour-hmac
Key: vno 1, camellia256-cts-cmac
Key: vno 1, camellia128-cts-cmac
Key: vno 1, des-hmac-sha1
Key: vno 1, des-cbc-md5
  
#更改租期时间命令(用户使用真实用户替换)
modprinc -maxrenewlife 300days 用户
modprinc -maxlife 300days 用户

#应用例子

1
modprinc -maxrenewlife 300days hive/hdp141@CESHI.com

1
modprinc -maxlife 300days hive/hdp141@CESHI.COM

退出后,重新启动

1
2
# service krb5kdc restart
# service  kadmin restart

3.使用spark任务测试kerberos下的作业提交

1.指定spark用户和密码

1
2
3
4
5
6
7
8
9
10
11
# cd /etc/security/keytabs
[root@hdp140 keytabs]# ll
-r--r----- 1 root      root   353 Oct 30 23:54 ambari.server.keytab
-r--r----- 1 hbase     hadoop 313 Oct 30 23:54 hbase.headless.keytab
-r-------- 1 hbase     hadoop 313 Oct 30 23:54 hbase.service.keytab
-r-------- 1 hdfs      hadoop 308 Oct 30 23:54 hdfs.headless.keytab
-r--r----- 1 hive      hadoop 308 Oct 30 23:54 hive.service.keytab
-r-------- 1 hdfs      hadoop 298 Oct 30 23:54 nn.service.keytab
-r--r----- 1 ambari-qa hadoop 333 Oct 30 23:54 smokeuser.headless.keytab
-r-------- 1 spark     hadoop 313 Oct 30 23:54 spark.headless.keytab
-r--r----- 1 root      hadoop 308 Oct 30 23:54 spnego.service.keytab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# klist -k spark.headless.keytab
Keytab name: FILE:spark.headless.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   1 spark-test@CESHI.COM
   1 spark-test@CESHI.COM
   1 spark-test@CESHI.COM
   1 spark-test@CESHI.COM
   1 spark-test@CESHI.COM
  
# kinit -k spark-vrvtest@VRV.COM -t spark.headless.keytab
#指定spark用户
[root@hdp140 keytabs]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: spark-vrvtest@VRV.COM
  
Valid starting       Expires              Service principal
10/31/2017 01:08:56  11/01/2017 01:08:56  krbtgt/VRV.COM@VRV.COM

上传spark文件到opt

1
2
3
4
# hdfs dfs -mkdir -p /tmp/sparkwordcount/
# hdfs dfs -mkdir -p /tmp/sparkwordcount/input
# hdfs dfs -put /opt/sparkwordcountinput.txt /tmp/sparkwordcount/input
# hdfs dfs -put /opt/spark_word_count.jar  /tmp/sparkwordcount/

#spark测试文件

1
sparkwordcountinput.txt  spark_word_count.jar

spark命令提交任务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 # spark-submit \
  --class com.vrv.bigdata.ml.DataExtract2 \
  --master yarn \
  --deploy-mode cluster \
  --principal spark-test@CESHI.COM \
  --keytab /etc/security/keytabs/spark.headless.keytab \
  hdfs://hdp140:8020/tmp/sparkwordcount/spark_word_count.jar \
  hdfs://hdp140:8020/tmp/sparkwordcount/input \
  hdfs://hdp140:8020/tmp/sparkwordcount/output/spark_work_count
17/10/31 01:15:28 INFO Client:
 client token: Token { kind: YARN_CLIENT_TOKEN, service:  }
 diagnostics: N/A
 ApplicationMaster host: 192.168.2.143
 ApplicationMaster RPC port: 0
 queue: default
 start time: 1509383715631
 final status: SUCCEEDED
 tracking URL: http://hdp141:8088/proxy/application_1509379053332_0014/
 user: spark
17/10/31 01:15:28 INFO ShutdownHookManager: Shutdown hook called
17/10/31 01:15:28 INFO ShutdownHookManager: Deleting directory /tmp/spark-40e868df-ca58-4389-b20c-03d2717516cc

疑难问题1:

1
2
3
4
5
Received Exception while testing connectivity to the KDC: Algorithm AES256 not enabled
**** Host: hdp261:88 (TCP)
java.lang.IllegalArgumentException: Algorithm AES256 not enabled
at sun.security.krb5.EncryptionKey.<init>(EncryptionKey.java:286)
at javax.security.auth.kerberos.KeyImpl.<init>(KeyImpl.java

解决:

1
2
3
4
5
6
7
1. 在Ambari server所在的主机和集群中的所有主机上,根据使用的JDK版本选择合适的JCE策略文件。
• Oracle JDK 1.7:
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-
download-432124.html
• Oracle JDK 1.8:
http://www.oracle.com/technetwork/java/javase/downloads/jce8-
download-2133166.html

疑难问题2:

1
org.apache.hadoop.security.authentication.client.AuthenticationException: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)

解决:

1
2
3
4
5
6
7
8
9
10
11
# kinit guest
Password for guest@CESHI.COM: ceshi123456.
  
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: guest@CESHI.COM
  
Valid starting       Expires              Service principal
11/28/2017 18:30:48  11/29/2017 18:30:48  krbtgt/CESHI.COM@CESHI.COM
11/28/2017 18:31:09  11/29/2017 18:30:48  HTTP/hdp140@
11/28/2017 18:31:09  11/29/2017 18:30:48  HTTP/hdp140@CESHI.COM

实战到此结束。后续再更新elasticsearcn安全实战。

总结:

1. Hadoop集群节点数多,配置和维护一个使用kerberos系统高性能,稳定的hadoop集群难度非常高。

2. Hadoop中的hdfs是一个文件系统,用户的认证和授权比较复杂,难度不低于linux系统的用户和组管理。

加上kerberos后,用户和用户组的管理更加复杂,通常一个合适的用户不能访问hdfs上的文件。

3. Hadoop加上kerberos后,通常原来的用户和文件,可能都失效导致数据流失。

详解Linux运维工程师高级篇(大数据安全方向).的更多相关文章

  1. 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路

    做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...

  2. 详解Linux运维工程师

    运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感知前方潮流变化.如:今年大数据,人工智能比较火……(相对表示就是 Python 比较火) 之前写过运维 ...

  3. 详解linux运维工程师入门级必备技能

    详解linux运维工程师入门级必备技能 | 浏览:659 | 更新:2013-12-24 23:23 | 标签:linux it自动化运维就是要很方便的运用各种工具进行管理维护,有效的实施服务器保护 ...

  4. 详解Linux运维工程师应具备的十大技能

    Linux系统如果是学习可以选用Redhat或CentOS,特别是CentOS在企业中用得最多,当然还会有其它版本的,但学习者还是以这2个版本学习就行,因为这两个版本都是兄弟,没区别的,有空可以再研究 ...

  5. 详解Linux运维工程师必备技能

    张戈大神是腾讯的一名运维,张戈博客也是我接触到第一个 Linux 运维师的博客,最近也在接触 Linux,说到工具,在行外可以说是技能,在行内一般称为工具,就是运维必须要掌握的工具. 我就大概列出这几 ...

  6. 详解Linux运维工具:运维流程管理、运维发布变更、运维监控告警

     概述 应用上线后,运维工作才刚开始,具体工作可能包括:升级版本上线工作.服务监控.应用状态统计.日常服务状态巡检.突发故障处理.服务日常变更调整.集群管理.服务性能评估优化.数据库管理优化.随着应用 ...

  7. 大厂0距离:网易 Linux 运维工程师面试真题,内含答案

    作为 Linux 运维工程师,进入大公司是开启职业新起点的关键,今天马哥 linux 运维及云计算智囊团的小伙伴特别分享了其在网易面试 Linux 运维及云计算工程师的题目和经历,希望对广大 Linu ...

  8. 高级Linux运维工程师必备技能(扫盲篇)

    高级Linux运维工程师必备技能(扫盲篇) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在了解文件系统之前,我们要学习一下磁盘存储数据的方式,大家都知道文件从内存若要持久化存储的 ...

  9. Linux 运维工程师学习成长路线上要经历哪四个阶段?

    之前曾看到一篇新闻,Linux之父建议大家找一份基于Linux和开源环境的工作.今天就来聊一聊我的想法,本人8年Linux运维一线经验,呆过很多互联网公司,从一线运维做到运维架构师一职,也见证了中国运 ...

随机推荐

  1. 学习笔记:IIS搭建PHP网站出现404错误的解决办法

    关于404错误提示相信大家都遇到过吧,记得我遇到这个问题的时候,弄得我焦头烂额的,今天给大家分享下,使用IIS大家PHP网站时出现404错误提示的处理方法,希望对各位朋友有所帮助.IIS搭建PHP出现 ...

  2. c#(winform)环境下使用动态链接库dll的详解

    1,什么是dll文件? DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被 ...

  3. 关于CATransform3D矩阵变换的简单解析

    关于CATransform3D矩阵变换的简单解析 效果图: 我能能够用上的CATransform3D其实很简单,并不复杂. CATransform3D有着4种东西我们可以设置. 1. 透视效果(由m3 ...

  4. 关于动态门户WEB博雅互动的源代码(HTML+CSS+javascript)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Exchange 2010 服务器邮件传输配额设置详解

    在企业的邮件系统管理中,传输邮件的大小配额关系到邮件队列.邮件传输速度以及关系到该附件是否能正常发送,直接关系到用户体验.为此,传输邮件大小的设置,也经常是企业邮件管理员比较迷惑的地方.如下: 1)  ...

  6. 沉淀,再出发:sublime中快捷键和html标签的使用和生成以及使用markdown

    沉淀,再出发:sublime中快捷键和html标签的使用和生成以及使用markdown 一.前言 工欲善其事,必先利其器.在软件代码的编写中,一定要知道IDE或者编辑器的快捷键的使用,这样可以提高很多 ...

  7. Azure 负载内部均衡器概述

    Azure 内部负载均衡器 (ILB) 仅将流量定向到云服务内的资源,或使用 VPN 来访问 Azure 基础结构. 在这一点上,ILB 与面向 Internet 的负载均衡器不同. Azure 基础 ...

  8. December 24th 2016 Week 52nd Saturday

    The first step is as good as half over. 第一步是最关键的一步. If one goes wrong at the first steps, what shoul ...

  9. mysql_fetch_row,mysql_fetch_array,mysql_fetch_object,mysql_fetch_assoc

    php从mysql中访问数据库并取得数据,取得结果的过程中用到好几个类似的方法,区别及用法值得区分一下,看下面的代码 代码如下: <?php $link=mysql_connect('local ...

  10. ECharts.js学习(三)交互组件

    ECharts.js 交互组件 ECharts.js有很多的交互组件,一般经常用到的组件有这些: title:标题组件,包含主标题和副标题. legend:图例组件,展现了不同系列的标记(symbol ...