Xen安全架构sHype/ACM策略配置图文教程


实验要求

1.     熟悉Xen虚拟化平台部署;

2.     Xen sHype/ACM安全架构中的Simple TE和Chinese Wall策略及事实上现机制的分析与验证。


第1章           Xen环境部署


1.1           版本号选择


因为Ubuntu使用广泛。软件包易于下载。我们选择Ubuntu系统进行Xen部署。

可选择的LTS系统例如以下[1]:

1)Ubuntu 10.04系统採用的是Linux 2.6.32内核,因为Linux 3.0下面内核不支持Xen[2],须要又一次编译内核。较为费时费力,内核编译后支持Xen 4.0;

2)Ubuntu 12.04系统採用Linux 3.2+内核,支持Xen 4.1;Xen从4.1開始将xm工具集列为deprecated[3]。而进行ACM/sHype策略方面的配置利用xm工具实现较为方便;

3)Ubuntu 12.04系统採用Linux 3.2+内核。支持Xen 4.2。从Xen 4.2開始,不再支持ACM安全模块。因此不合适。

4)Ubuntu 14.04系统採用Linux 3.13+内核,支持Xen 4.4;

5)Ubuntu 15.04系统採用Linux 3.19.3内核,支持Xen 4.5,Xen从4.5開始取消xm工具集(xend),用xl工具集进行取代[3]。


综合以上几点原因,Xen环境採用Ubuntu 12.04 x64部署较为合适,Xen版本号选择4.1,可是本文选择的是Ubuntu 14.04 x64 + Xen 4.1的组合,事实证明也是能够成功安装的。

依据文章[4]中的建议,应该选择64-bit的Ubuntu安装较为合理。

因此我们的安装镜像最后确定为ubuntu-14.04-desktop-amd64.iso。

因为Xen的dom0系统支持的显卡有限。不支持VMware Workstation虚拟机中的默认显卡,在安装Xen后重新启动会导致系统黑屏,无法使用。因此此实验不能选择VMware虚拟机,仅仅能选择物理机上安装Ubuntu进行实验。

利用[5]中的教程进行Ubuntu 14.04 LTS x64的U盘安装盘的制作。再利用该安装盘进行安装就可以。假设是与Windows双系统,则须要用EasyBCD恢复引导菜单,通过引导菜单进入Ubuntu系统。


1.2           Xen源代码下载及安装依赖包


因为Xen公布的二进制安装包默认不含有XSM功能,开启XSM功能必须改变编译选项并进行又一次编译。

因此本文须要从Xen源代码进行安装。

从2013年2月開始,Xen源代码採用git进行管理。其git库地址为:

git://xenbits.xen.org/xen.git


源代码下载採用的命令是:

git clone git://xenbits.xen.org/xen.git
cd xen
git checkout stable-4.1


编译须要用到git,须要提前安装好:

apt-get install git

接着安装依赖包:

apt-get install bcc bin86 gawk bridge-utils iproutelibcurl3 libcurl4-openssl-dev bzip2 module-init-tools transfig tgif texinfotexlive-latex-base texlive-latex-recommended texlive-fonts-extratexlive-fonts-recommended pciutils-dev mercurial build-essential make gcclibc6-dev zlib1g-dev python python-dev python-twisted libncurses5libncurses5-dev patch libvncserver-dev libsdl-dev libjpeg62-dev iasl libbz2-deve2fslibs-dev git-core uuid-dev ocaml libx11-dev bison flex binutils xorg-devudev gettext libgcrypt11-dev libssl-dev pciutils libglib2.0-dev  gcc-multilib fakeroot pkg-config libpci-devcrash crash kexec-tools makedumpfile

1.3           Xen源代码编译


1)在Xen 4.0以后,XSM有ACM和FLASK两个模块,默认都不开启,须要选择当中一个。然后进行编译,其Config.mk文件内容例如以下:

XSM_ENABLE ?= n
FLASK_ENABLE ?= n
ACM_SECURITY ?= n


2)从Xen 4.2開始,FLASK成为默认的XSM模块,当启用XSM时默认启用FLASK,而ACM默认不启动。其Config.mk文件内容例如以下:

XSM_ENABLE ?= n
FLASK_ENABLE ?

= $(XSM_ENABLE)

 

因为本文採用的版本号是Xen4.1,因此须要依照下面命令改动Config.mk:

XSM_ENABLE ?= y
FLASK_ENABLE ?= n
ACM_SECURITY ?

= y

 

然后执行例如以下命令进行编译:

make dist或make xen tools stubdom
make install-xen
make install-toolsPYTHON_PREFIX_ARG="--install-layout=deb"
make install stubdom

1.4           改动/etc/modules


改动/etc/modules文件,加入下面行:

xen-evtchn
xen-gntdev
xen-netback
xen-blkback
xenfs
blktap

1.5           加入Lib搜索路径


改动/etc/ld.so.conf.d/libc.conf文件,加入例如以下几行:

/usr/local/lib(已有)
/lib64
/usr/lib
/usr/lib64

执行ldconfig命令使改动生效。


1.6           改动grub启动项


步骤一:改动/etc/default/grub文件,将GRUB_TIMEOUT=10改动为GRUB_TIMEOUT=-1,将GRUB_HIDDEN_TIMEOUT=0改动为GRUB_HIDDEN_TIMEOUT=10。

步骤二:运行update-grub。

对于Ubuntu 14.04在/boot/grub/grub.cfg中能自己主动生成’Ubuntu, with Xen hypervisor’启动项。不须要像在Ubuntu 12.04中一样自己手动再配置。

重新启动系统。


1.7           測试Xen环境


首先启动xend:

//首先启动xencommons
service xencommons start
//启动xend之前关闭网卡启动xend之后重新启动网卡(假设不这样做会提示出错。原因暂不详)
ifconfig eth0 down
service xend start
ifconfig eth0 up

接着执行xm list命令。结果例如以下:


 

Name            ID   Mem      VCPUs         State      Time(s)
Domain-0     0     15610    8                   r-----       1305.5

改动/etc/xen/xend-config.sxp文件,去掉xend-unix-server no的凝视,并改为xend-unix-server yes,去掉xend-unix-path/var/lib/xend/xend-socket的凝视。


1.8           创建虚拟机


首先。须要制作虚拟机的磁盘文件,输入下面命令创建10GB的磁盘文件

dd if=/dev/zero of=vm1disk bs=1k seek=10000kcount=0
mkfs -t ext3 vm1disk
(当须要回复确认时,回答y)
mount -o loop vm1disk /mnt
cp -ax /{root,dev,var,etc,usr,bin,sbin,lib} /mnt
mkdir /mnt/{proc,sys,home,tmp}


然后对/mnt/etc/fstab,/mnt/etc/hostname进行自己定义的改动,这里省略不做改动。

umount /mnt


此时,虚拟机磁盘文件vm1disk就已创建完成,用类似的方式创建vm2disk。

接着,编辑虚拟机配置文件/root/domain1.xm,其内容例如以下所看到的:

kernel= "/boot/vmlinuz-3.13.0-24-generic.efi.signed"
memory = 512
name = "domain1"
dhcp = "dhcp"
disk = ['tap:aio:/root/vm1disk,sda1,w']
root = "/dev/sda1 ro xencons=tty"


最后,执行命令:

xm createdomain1.xm


正常情况下,虚拟机domain1应该已经启动。

通过xm console domain1命令能够打开虚拟机domain1的终端命令行,例如以下图所看到的。



接着类似地创建domain2.xm。再执行xm create domain2.xm启动domain2虚拟机。


1.9           測试ACM/sHype环境


改动/etc/xen/xend-config.sxp。添加(xsm_module_name acm)。否则,ACM策略类型将被觉得不支持(未指定使用的xsm类型),出错标识为执行xm getpolicy命令,提示Supported security subsystems :      None。改动源码中的xend-config.sxp似乎没有效果,仅仅能改动编译后的文件。

执行xensec_toolgetpolicy命令,结果例如以下,则说明ACM/sHype环境至此就搭建完毕了。


在Windows上安装Python 2.7 x64和wxPython 3.0 x64 for Python 2.7,当中wxPython的下载页面例如以下:http://www.wxpython.org/download.php#msw

相同在Ubuntu上安装wxPython:

apt-get install python-wxgtk2.8 python-wxtools


执行下面命令,假设能出现下图所看到的界面,说明策略配置工具安装完成。

python /usr/sbin/xensec_ezpolicy



第2章           ACM策略配置

在xensec_ezpolicy里,点击New Orgbutton。新增加三个组织:A-Bank、B-Bank和AutoCorp,而且在A-Bank下创建两个部门:SecurityUnderwriting和MarketAnalysis。然后选中__UNLABELED__、A-Bank和B-Bank三项,点击Create run-time exclusion rulefrom selectionbutton,将其增加到一个冲突集中,接着用类似方法将__UNLABELED__、A-Bank.MarketAnalysis和A-Bank.SecurityUnderwriting三项增加到一个冲突集中。终于结果例如以下图所看到的:


 

选择菜单里的File ->Save as Xen ACM Security Policy …将策略文件保存到路径:/etc/xen/acm-security/policies/mytest-security_policy.xml

该文件终于内容例如以下所看到的:


<?xml version="1.0" encoding="UTF-8"?

> <!-- Auto-generated by ezPolicy --> <SecurityPolicyDefinition xmlns="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com ../../security_policy.xsd "> <PolicyHeader> <PolicyName>mytest</PolicyName> <Date>Tue Jun 09 14:41:58 2015</Date> <Version>1.0</Version> </PolicyHeader> <SimpleTypeEnforcement> <SimpleTypeEnforcementTypes> <Type>SystemManagement</Type> <Type>__UNLABELED__</Type> <Type>A-Bank</Type> <Type>A-Bank.SecurityUnderwriting</Type> <Type>A-Bank.MarketAnalysis</Type> <Type>B-Bank</Type> <Type>AutoCorp</Type> </SimpleTypeEnforcementTypes> </SimpleTypeEnforcement> <ChineseWall priority="PrimaryPolicyComponent"> <ChineseWallTypes> <Type>SystemManagement</Type> <Type>__UNLABELED__</Type> <Type>A-Bank</Type> <Type>A-Bank.SecurityUnderwriting</Type> <Type>A-Bank.MarketAnalysis</Type> <Type>B-Bank</Type> <Type>AutoCorp</Type> </ChineseWallTypes> <ConflictSets> <Conflict name="RER"> <Type>__UNLABELED__</Type> <Type>A-Bank</Type> <Type>B-Bank</Type> </Conflict> <Conflict name="RER"> <Type>__UNLABELED__</Type> <Type>A-Bank.MarketAnalysis</Type> <Type>A-Bank.SecurityUnderwriting</Type> </Conflict> </ConflictSets> </ChineseWall> <SecurityLabelTemplate> <SubjectLabels bootstrap="SystemManagement"> <VirtualMachineLabel> <Name>SystemManagement</Name> <SimpleTypeEnforcementTypes> <Type>SystemManagement</Type> <Type>__UNLABELED__</Type> <Type>A-Bank</Type> <Type>A-Bank.SecurityUnderwriting</Type> <Type>A-Bank.MarketAnalysis</Type> <Type>B-Bank</Type> <Type>AutoCorp</Type> </SimpleTypeEnforcementTypes> <ChineseWallTypes> <Type>SystemManagement</Type> </ChineseWallTypes> </VirtualMachineLabel> <VirtualMachineLabel> <Name>__UNLABELED__</Name> <SimpleTypeEnforcementTypes> <Type>__UNLABELED__</Type> </SimpleTypeEnforcementTypes> <ChineseWallTypes> <Type>__UNLABELED__</Type> </ChineseWallTypes> </VirtualMachineLabel> <VirtualMachineLabel> <Name>A-Bank</Name> <SimpleTypeEnforcementTypes> <Type>A-Bank</Type> </SimpleTypeEnforcementTypes> <ChineseWallTypes> <Type>A-Bank</Type> </ChineseWallTypes> </VirtualMachineLabel> <VirtualMachineLabel> <Name>A-Bank.SecurityUnderwriting</Name> <SimpleTypeEnforcementTypes> <Type>A-Bank.SecurityUnderwriting</Type> </SimpleTypeEnforcementTypes> <ChineseWallTypes> <Type>A-Bank</Type> <Type>A-Bank.SecurityUnderwriting</Type> </ChineseWallTypes> </VirtualMachineLabel> <VirtualMachineLabel> <Name>A-Bank.MarketAnalysis</Name> <SimpleTypeEnforcementTypes> <Type>A-Bank.MarketAnalysis</Type> </SimpleTypeEnforcementTypes> <ChineseWallTypes> <Type>A-Bank</Type> <Type>A-Bank.MarketAnalysis</Type> </ChineseWallTypes> </VirtualMachineLabel> <VirtualMachineLabel> <Name>B-Bank</Name> <SimpleTypeEnforcementTypes> <Type>B-Bank</Type> </SimpleTypeEnforcementTypes> <ChineseWallTypes> <Type>B-Bank</Type> </ChineseWallTypes> </VirtualMachineLabel> <VirtualMachineLabel> <Name>AutoCorp</Name> <SimpleTypeEnforcementTypes> <Type>AutoCorp</Type> </SimpleTypeEnforcementTypes> <ChineseWallTypes> <Type>AutoCorp</Type> </ChineseWallTypes> </VirtualMachineLabel> </SubjectLabels> <ObjectLabels> <ResourceLabel> <Name>SystemManagement</Name> <SimpleTypeEnforcementTypes> <Type>SystemManagement</Type> </SimpleTypeEnforcementTypes> </ResourceLabel> <ResourceLabel> <Name>__UNLABELED__</Name> <SimpleTypeEnforcementTypes> <Type>__UNLABELED__</Type> </SimpleTypeEnforcementTypes> </ResourceLabel> <ResourceLabel> <Name>A-Bank</Name> <SimpleTypeEnforcementTypes> <Type>A-Bank</Type> </SimpleTypeEnforcementTypes> </ResourceLabel> <ResourceLabel> <Name>A-Bank.SecurityUnderwriting</Name> <SimpleTypeEnforcementTypes> <Type>A-Bank.SecurityUnderwriting</Type> </SimpleTypeEnforcementTypes> </ResourceLabel> <ResourceLabel> <Name>A-Bank.MarketAnalysis</Name> <SimpleTypeEnforcementTypes> <Type>A-Bank.MarketAnalysis</Type> </SimpleTypeEnforcementTypes> </ResourceLabel> <ResourceLabel> <Name>B-Bank</Name> <SimpleTypeEnforcementTypes> <Type>B-Bank</Type> </SimpleTypeEnforcementTypes> </ResourceLabel> <ResourceLabel> <Name>AutoCorp</Name> <SimpleTypeEnforcementTypes> <Type>AutoCorp</Type> </SimpleTypeEnforcementTypes> </ResourceLabel> </ObjectLabels> </SecurityLabelTemplate> </SecurityPolicyDefinition>


下一步。关闭全部虚拟机,在命令行里运行下面命令,使刚才编辑的策略生效。

xm resetpolicy
xm setpolicy ACM mytest

以下,给domain1和domain2分别设置A-Bank和B-Bank的标签:

xm addlabel A-Bank dom domain1.xm
xm addlabel B-Bank dom domain2.xm

接着,给虚拟磁盘文件设置A-Bank和B-Bank的标签:

xm addlabel A-Bank res tap:aio:/root/vm1disk
xm addlabel B-Bank res tap:aio:/root/vm2disk

设置结果如图所看到的。

这样才干保证虚拟机domain1能訪问磁盘文件vm1disk,虚拟机domain1能訪问磁盘文件vm1disk,虚拟机才会创建成功,从而验证了STE策略。



然后创建domain1虚拟机,保持domain1开启的同一时候,再启动domain2虚拟机:

xm create domain2.xm
xm create domain2.xm


这时我们会发现domain2虚拟机创建失败。例如以下图所看到的,提示Error: Domain inconflict set with running domain?




这是因为在ChineseWall策略里,虚拟机domain1的标签为A-Bank,虚拟机domain2的标签为B-Bank,而A-Bank和B-Bank在同一个利益冲突类(Run-time Exclustion Rules)中,因此无法同一时候在同一个主机中执行。


第3章           遇到的错误与解决方式


1. 编译tools时失败,提示check_python_devel函数检查失败。是个bug

解决方式:改动/xen/tools/check/check_python_devel文件。去掉里面的验证

 

2. 编译tools时失败。提示undefinedreference to symbol 'timer_settime@@GLIBC_2.3.3

解决方式:依照http://stackoverflow.com/questions/18286738/undefined-reference-to-symbol-timer-settimeglibc-2-3-3里的说明。将/xen/tools/ioemu-remote/Makefile.target里的LIBS+=-lm改动为LIBS+=-lz -lrt –lm


3. 编译tools时失败,提示xg_main.c:181:52:error: 'ulong' undeclared (first use in this

function)

解决方式:參照http://lists.xen.org/archives/html/xen-devel/2012-12/msg00429.html

改动/xen/tools/debugger/gdbsx/xg/xg_main.c。在文件开头增加#include <sys/types.h>


4. 编译tools时失败,提示ocamlfind:command not found

解决方式:apt-getinstall ocaml-findlib


5. 编译tools时失败,提示Error:Unbound module Xenbus

解决方式:改动/xen/tools/ocaml/xenstored/connection.ml里的Line:118,把那三行凝视掉。加入let is_backend_mmap con =false


6. Ubuntu怎样进行视频录制

解决方式:利用kazam进行视频录制。用法例如以下:

apt-get install kazam
apt-get install pulseaudio
pulseaudio //打开pulseaudioserver
kazam //执行视频录制软件

第4章           參考资料


[1] List of Ubuntu releases. http://en.wikipedia.org/wiki/List_of_Ubuntu_releases#Table_of_versions

[2] Ubuntu12.04安装Xen4. http://www.cppblog.com/LIULIANG/archive/2012/09/21/191481.html

[3] XEND. http://wiki.xen.org/wiki/XEND

[4] Ubuntu 10.04 (with grub2)安装 Xen 4.0.1. http://www.codesky.net/article/201107/174124.html

[5] 怎么用u盘安装ubuntu. http://jingyan.baidu.com/article/a3761b2b66fe141577f9aa51.html

 

 

转载于:https://www.cnblogs.com/mengfanrong/p/5345813.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java弹出虚拟键盘_JS实现电脑虚拟键盘的操作

本文实例为大家分享了JS实现电脑虚拟键盘的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下需求&#xff1a;1.当输入框光标聚焦时&#xff0c;电脑虚拟键盘弹出2.在输入框输入内容时&#xff0c;键盘跟着变化具体实现代码如下&#xff1a;Html部分&#xff1a;电脑键…

JBoss Drools –入门

这篇文章是关于我如何掌握JBoss Drools的 。 其背后的原因是&#xff1a;SAP收购了我公司当前的规则引擎&#xff0c;而Drools是我们将寻找的另一种选择&#xff0c;只要有人掌握了概念验证的技能即可。 尽管似乎有大量的文档&#xff0c;但是我总是会通过示例来发现它是有帮助…

android使用bintray发布aar到jcenter

前言 这两天心血来潮突然想把自己的android library的aar放到jcenter里面&#xff0c;这样一来自己便可以在任何时间任何地点通过internet得到自己的library的引用了&#xff0c;况且现在android studio已经默认使用jcenter的repositories作为依赖来源&#xff0c;以前的mavenc…

PHP 进程详解

PHP 进程详解PHP 进程详解 如下内容从《操作系统精髓与设计原理》中总结提炼得出&#xff0c;删除了大部分对于理解进程有干扰的文字&#xff0c;对进程知识结构进行的梳理。几乎所有内容为按照书本上摘抄下来的&#xff0c;我目前还总结提炼不出像作者这么深刻的见解。那么就先…

java都要caps标点_第 1 章 管理 Java CAPS 用户

第 1 章 管理 Java CAPS 用户在此处列出的主题提供了有关如何管理 Sun JavaTM Composite Application Platform Suite (Java CAPS) 中的用户的信息。如果您有任何问题&#xff0c;请参见 http://goldstar.stc.com/ 中的 Java CAPS Web 站点。管理系统信息库用户此类别包含以下用…

基于OpenCV 的美颜相机推送直播流

程序流程&#xff1a; 1.图像采集 先从opencv&#xff08;2.4.10版本&#xff09;采集回来摄像头的图像&#xff0c;是一帧一帧的 每一帧图像是一个矩阵&#xff0c;opencv中的mat 数据结构。 2.人脸的美化 人脸美化&#xff0c;我们用的皮肤检测&#xff0c;皮肤在颜色空间是特…

Spring线程池服务

线程池对于执行同步和异步过程非常重要。 本文介绍如何使用Spring开发和监视线程池服务。 创建线程池已通过两种替代方法进行了说明。 二手技术 &#xff1a; JDK 1.6.0_21 Spring3.0.5 Maven的3.0.2 步骤1&#xff1a;建立已完成的专案 创建一个Maven项目&#xff0c;如下…

我的世界java村民繁殖_我的世界:Java19w08a更新,村民加强守卫,小狐狸背叛

虽然这句话很绕口&#xff0c;其实意思很简单&#xff0c;那就是之前的隐身药水没有什么用&#xff0c;该被打还是被打。因为这个可是害惨了流浪商人&#xff0c;不过这次好了&#xff0c;流浪商人在喝了隐身药水之后就能安全度过晚上了。NO.3 皮革马铠马铠是属于马的盔甲&…

欧莱雅眉笔banner个人设计

眉笔名称&#xff1a;眉笔大师三头塑形眉笔 &#xff0c;之所以没用吧这个商品名称放大&#xff0c;是我觉得它是一个名称&#xff0c;而我把自己想的广告词“出彩只需一笔” 放大不仅能凸显出这只笔的强大&#xff0c;还表示了一种有了我这支眉笔你会更出彩更漂亮&#xff0c…

使用带有注释和JQuery的Spring MVC 3的Ajax

与Ajax一起工作对我来说一直很有趣&#xff01; 是不是 &#xff1f; 我将使您轻松将Ajax与Spring MVC 3和JQuery结合使用。 这篇文章将向您说明如何在工业编码的现实生活中使用Ajax。 和往常一样&#xff0c;我们将在Spring MVC 3框架中以Ajax的实际示例为例&#xff0c;并将其…

java百度云文件上传_关于如何在自己项目集成百度云BCE文件上传STS方案

1、 项目背景由于本人项目需要&#xff0c;需要在视频点播服务之中需要加载字幕文件(通用格式srt)&#xff0c;经过比较好几家的公有云服务&#xff0c;最后选择只有百度云提供字幕服务。字幕&#xff1a;我们通常在观看外语电影的是&#xff0c;没有国语版时候只能通过下载字幕…

hdu 3507 Print Article(斜率优化DP)

题目链接&#xff1a;hdu 3507 Print Article 题意&#xff1a; 每个字有一个值&#xff0c;现在让你分成k段打印&#xff0c;每段打印需要消耗的值用那个公式计算&#xff0c;现在让你求最小值 题解&#xff1a; 设dp[i]表示前i个字符需要消耗的最小值&#xff0c;那么有dp[i]…

第三章 consul服务注册与服务查询

1、定义一个服务 https://www.consul.io/docs/agent/services.html 该方法是服务注册中提供服务的最常用的方法。 关于服务的定义&#xff1a;服务的属性我们会在后边每出现一个总结一个&#xff0c;最后再做总结。 2、服务注册 2.1、创建服务文件所存放的文件夹 说明&#xff…

coreos 安装mysql_CoreOS 在 PC 上快速安装方法指南

意义能够以最快的速度安装部署Linux操作系统。安装快速简单&#xff0c;几乎不花时间就可以开始运行Docker。运行速度非常快。使用内存硬盘。我的情况win8 笔记本偶尔玩游戏&#xff0c;但是装Linux双系统可能需要我一天的时间来完成。我的所有业务都只需要在Docker中跑就可以了…

Session 的配置和特性

session的配置 对于session的配置是php.ini中配置 session数据都是保存在文本文件中 设置session文件的保存位置 说明&#xff1a; 默认是保存在windows/temp目录 设置session保存作为客户端标识的数据使用cookie 设置session保存客户端标识的数据&#xff0c;只使用cookie 说明…

OAuth与Spring Security

摘自Wikipedia&#xff1a; OAuth &#xff08; 开放式身份验证 &#xff09;是一种开放式身份验证标准。 它允许用户与其他站点共享存储在一个站点上的私有资源&#xff08;例如照片&#xff0c;视频&#xff0c;联系人列表&#xff09;&#xff0c;而不必发出其凭据&#xff…

UIViewController生命周期

UIViewController生命周期 UIViewController生命周期 posted on 2016-04-07 20:15 相而勿绝 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/fmdxiangdui/p/5365249.html

众筹源码 php,助创cms众筹源码系统v1.0

什么是助创cms众筹系统?使用“预约团购”的众筹方式给自己的创意争取大家的关注和支持&#xff0c;是近年来非常火热的一种融资模式&#xff0c;助创cms众筹系统可以10分钟帮你打造一个和京东众筹一样的平台&#xff0c;包含产品众筹和公益众筹两个部分&#xff0c;可以直接拿…

69 个经典 Spring 面试题和答案

Spring 概述 什么是spring?Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用&#xff0c;但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发&#xff0c;并通过POJO为基础的编程模型促进良好的编程习惯。使用Spring框架…

高性能MySql

1、索引是对DB优化最有效的方式 varchar(10)定义的是字符的个数&#xff0c;如果是utf-8的话&#xff0c;最大是3X10个字节 二、索引类型 1、MySql的索引是在存储引擎层实现的&#xff0c;各个存储引擎的的索引方式也是不同的 2、B-Tree索引 MyISAM索引通过数据的物理位置引用被…