云智慧(北京)招聘信息

求职招聘信息OpenSkill 发表了文章 • 0 个评论 • 723 次浏览 • 2015-08-28 15:07 • 来自相关话题

  云智慧(北京)科技有限公司,是国内做SAAS服务的大厂,如果你有激情,对SAAS市场看好,就来加入我们吧!
我们目前主要有两款产品: 监控宝 和 透视宝 ,职位描述如下:
   Java架构师:
岗位职责:
1.负责相关产品系统架构设计、改进与优化,解决开发中主要的技术难点;
2.负责系统框架和核心功能模块的代码开发及后期优化;
3.制定设计规范和开发规范;
4.负责对技术团队的培训及指导,定期介绍新技术促进团队技术提高;
5.协助QA测试、协助运维人员进行后续部署等。

任职要求:
1.至少5年以上开发经验,3年以上架构师经验;
2.精通数据结构,熟悉并掌握各种常见算法;
3.熟悉Linux操作系统及基于Linux平台和Java容器的负载均衡方案,熟悉数据共享、同步等的实现方案者更佳;
4.有以下经验者优先考虑:分布式队列、分布式任务分发框架、全文检索及分词技术、海量数据存储与分布式存储技术
职业诱惑:15k-25k 期权、年终奖、五险一金、商业险、租房补贴 高级PHP工程师:
岗位职责:
1.参与公司产品网站、服务和服务器监控产品开发;
2.参与架构和功能设计;
3.少量客户技术问题支持工作。

任职要求:
1.计算机及相关专业;
2.3年以上PHP开发经验;
3.精通PHP,熟悉常见的PHP开发框架和技术,了解Python和Java者尤佳;
4.精通Mysql,对于Memcached, Redis等常见的NoSQL数据存储比较熟悉;
5.熟悉HTML、JS、JQuery、AJAX、CSS等前端技术;
6.熟悉Linux和常见Linux命令。
职业诱惑:15k-30k 年终奖、五险一金、商业保险、期权Android工程师:
  岗位职责:
  1.负责公司产品相关Android端产品功能设计、开发和实现。

  任职要求:
  1.熟练掌握Java移动端应用开发;
  2.有2-3年Android原生开发经验;
  3.熟悉网络编程,理解http协议及scoket通信等网络编程技术;
  4.开发过图表及报表应用者优先;
  5.开发过消息推送应用者优先;
  6.有修改过Android系统源代码经验者优先;
  7.具有良好的沟通能力和团队合作精神。
职业诱惑:9k-18k 年终奖+五险一金+商业保险+期权对职位感兴趣的同学,可以加QQ:986978241 给予内推机会! 查看全部
  云智慧(北京)科技有限公司,是国内做SAAS服务的大厂,如果你有激情,对SAAS市场看好,就来加入我们吧!
我们目前主要有两款产品: 监控宝 和 透视宝 ,职位描述如下:
  
 Java架构师:
岗位职责:
1.负责相关产品系统架构设计、改进与优化,解决开发中主要的技术难点;
2.负责系统框架和核心功能模块的代码开发及后期优化;
3.制定设计规范和开发规范;
4.负责对技术团队的培训及指导,定期介绍新技术促进团队技术提高;
5.协助QA测试、协助运维人员进行后续部署等。

任职要求:
1.至少5年以上开发经验,3年以上架构师经验;
2.精通数据结构,熟悉并掌握各种常见算法;
3.熟悉Linux操作系统及基于Linux平台和Java容器的负载均衡方案,熟悉数据共享、同步等的实现方案者更佳;
4.有以下经验者优先考虑:分布式队列、分布式任务分发框架、全文检索及分词技术、海量数据存储与分布式存储技术
职业诱惑:15k-25k 期权、年终奖、五险一金、商业险、租房补贴
 高级PHP工程师:
岗位职责:
1.参与公司产品网站、服务和服务器监控产品开发;
2.参与架构和功能设计;
3.少量客户技术问题支持工作。

任职要求:
1.计算机及相关专业;
2.3年以上PHP开发经验;
3.精通PHP,熟悉常见的PHP开发框架和技术,了解Python和Java者尤佳;
4.精通Mysql,对于Memcached, Redis等常见的NoSQL数据存储比较熟悉;
5.熟悉HTML、JS、JQuery、AJAX、CSS等前端技术;
6.熟悉Linux和常见Linux命令。
职业诱惑:15k-30k 年终奖、五险一金、商业保险、期权
Android工程师:
  岗位职责:
  1.负责公司产品相关Android端产品功能设计、开发和实现。

  任职要求:
  1.熟练掌握Java移动端应用开发;
  2.有2-3年Android原生开发经验;
  3.熟悉网络编程,理解http协议及scoket通信等网络编程技术;
  4.开发过图表及报表应用者优先;
  5.开发过消息推送应用者优先;
  6.有修改过Android系统源代码经验者优先;
  7.具有良好的沟通能力和团队合作精神。
职业诱惑:9k-18k 年终奖+五险一金+商业保险+期权
对职位感兴趣的同学,可以加QQ:986978241  给予内推机会!

浅谈docker文件系统分层与隔离

大数据/云计算采菊篱下 发表了文章 • 0 个评论 • 1450 次浏览 • 2015-08-28 01:27 • 来自相关话题

   
    Docker 的很多特性都表现在它所使用的文件系统上,比如大家都知道docker的文件系统是分层的,所以它可以快速迭代,可以回滚。下面就聊一下我对docker文件系统的理解
 
    Docker 使用的支持的文件系统有以下几种: aufs、devicemapper、btrfs  Vfs 我们先来介绍一下aufs

一、  Aufs(advanced multi layered unification filesystem)

    Aufs直译过来就是高级分层统一文件系统。做为一种Union FS 它支持将不同的目录挂载到同一个虚拟文件系统下. 这个怎么理解呢。通过一条命令我们来看一下吧。mount -t aufs -o br=/tmp/dir1=ro:/tmp/dir2=rw none /tmp/newfs
[]-o 指定mount传递给文件系统的参数[/][]br 指定需要挂载的文件夹,这里包括dir1和dir2[/][]ro/rw 指定文件的权限只读和可读写[/][]none 这里没有设备,用none表示[/]
    这个结果是什么样子的呢。 就是把/tmp/dir1 t和/tmp/dir2  合并之后挂载到/tmp/newfs ,如果这时在/tmp/dir1 下创建一个文件a  /tmp/dir2下创建一个文件b 则  在/tmp/newfs 会看到a,b 这两个文件,并且a 是只读的, 如果有相同的文件则以先挂载的为准,后面挂载的操作会被忽略掉
 
   通过对Aufs的理解,大家可以想像一下docker所谓的“layer”的概念。还是实际的例子说明一下。

    一个镜像通过docker save  保存之后 会被打成一个tar 包,我们来看下这个tar包里都有些什么?docker save cloud_jiankongbao:01.tar cloud_jiankongbao:01    通过上面的语句我们把镜像保存出下来。可以看到,保存下来的是tar 包。 不是.iso文件^_^,镜像解压之后是什么呢?ls .
a005304e4e74c1541988d3d1abb170e338c1d45daee7151f8e82f8460634d329
d9bde94c518a16a886514758b6b4431200145ecd58e30c5633ac3c0256544d77
f1b10cd842498c23d206ee0cbeaa9de8d2ae09ff3c7af2723a9e337a6965d639
fb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5777fde6f
repositories    出现了四个目录文件,再通过docker images --tree
└─f1b10cd84249 Virtual Size: 0 B
└─fb9cc58bde0c Virtual Size: 203.1 MB
└─a005304e4e74 Virtual Size: 203.1 MB
└─d9bde94c518a Virtual Size: 1.957 GB Tags: cloud_jiankongbao:01    大家可以看到,4个目录其实分别是4个ID(注每次使用docker commit 提供对docker的修改之后就会产生一个新的id,就是通过这个ID可以实现对镜像的回滚)。每个目录下有json  layer.tar  VERSION 这三个文件。我们再看一下layer.tar cd fb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5777fde6f;tar -xf layer.tar;ls

ls fb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5777fde6f/
bin etc json lib lost+found mnt proc sbin srv tmp var
dev home layer.tar lib64 media opt root selinux sys usr VERSION    这里存放的系统文件。

    我们再看一下镜像的4个不同ID的系统。

    f1b10cd84249 这个镜像是初始镜像,大小为0, fb9cc58bde0c 这个镜像是在f1b10cd84249基础上创建新的镜像,a005304e4e74是以fb9cc58bde0c为基础创建新的镜像。是树状继承的关系。我们再看下bin目录下的文件ls a005304e4e74c1541988d3d1abb170e338c1d45daee7151f8e82f8460634d329/bin/
gtar tarls fb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5777fde6f/bin/
arch cpio egrep gunzip logger mountpoint raw sleep true
awk cut env gzip login mv readlink sort umount
basename date ex hostname ls netstat rm stty uname
bash dd false ipcalc lsblk nice rmdir su unlink
cat df fgrep iptables-xml mkdir nisdomainname rpm sync usleep
chgrp dmesg find iptables-xml-1.4.7 mknod ping rvi taskset vi
chmod dnsdomainname findmnt kill mktemp ping6 rview touch view
chown domainname gawk link more ps sed tracepath ypdomainname
cp echo grep ln mount pwd sh tracepath6 zcat
    a005304e4e74 只有两个文件 fb9cc58bde0c包括了大部分bin下的文件,这就是Aufs,理解起来感觉有点像增量备份。

二、简单的说一下devicemapper 

    devicemapper是利用了Snapshot 和Thinly-Provisioned Snapshot两种原理。将多个快照挂在同一个卷下从而实现文件系统的分层。不过使用devicemapper 的话一个container的大小最大只能是10G。
 
    在启动docker daemon时用参数-s 指定:  docker -d -s devicemapper
 
    关于隔离是怎么实现的呢,当容器基于镜像启动之后,每个容器都会获得自己的写读可写的文件系统层。原镜像的那部分文件系统是只读的,从而实现每个容器的在文件系统上的离隔。
 
   平时大家都在说dokcer 是弱隔离的,为什么呢?因为他没有隔离的很彻底,比如内核,内核是跟大家共用的,跟宿主机共用同一个内核,SELinux、 Cgroups以及/sys、/proc/sys、/dev/sd*等目录下的资源是与宿主机共用的。

   如果要隔离的彻底那就是VM了,而且如果dockers要想实现这些隔离就必然要牺牲一下现在轻量级的特性。那还不如直接用虚拟机好了!
文章转载出处 查看全部
df1.png
   
    Docker 的很多特性都表现在它所使用的文件系统上,比如大家都知道docker的文件系统是分层的,所以它可以快速迭代,可以回滚。下面就聊一下我对docker文件系统的理解
 
    Docker 使用的支持的文件系统有以下几种: aufs、devicemapper、btrfs  Vfs 我们先来介绍一下aufs


一、  Aufs(advanced multi layered unification filesystem)


    Aufs直译过来就是高级分层统一文件系统。做为一种Union FS 它支持将不同的目录挂载到同一个虚拟文件系统下. 这个怎么理解呢。通过一条命令我们来看一下吧。
mount -t aufs -o br=/tmp/dir1=ro:/tmp/dir2=rw none /tmp/newfs

    []-o 指定mount传递给文件系统的参数[/][]br 指定需要挂载的文件夹,这里包括dir1和dir2[/][]ro/rw 指定文件的权限只读和可读写[/][]none 这里没有设备,用none表示[/]

    这个结果是什么样子的呢。 就是把/tmp/dir1 t和/tmp/dir2  合并之后挂载到/tmp/newfs ,如果这时在/tmp/dir1 下创建一个文件a  /tmp/dir2下创建一个文件b 则  在/tmp/newfs 会看到a,b 这两个文件,并且a 是只读的, 如果有相同的文件则以先挂载的为准,后面挂载的操作会被忽略掉
 
   通过对Aufs的理解,大家可以想像一下docker所谓的“layer”的概念。还是实际的例子说明一下。

    一个镜像通过docker save  保存之后 会被打成一个tar 包,我们来看下这个tar包里都有些什么?
docker save cloud_jiankongbao:01.tar cloud_jiankongbao:01
    通过上面的语句我们把镜像保存出下来。可以看到,保存下来的是tar 包。 不是.iso文件^_^,镜像解压之后是什么呢?
ls . 
a005304e4e74c1541988d3d1abb170e338c1d45daee7151f8e82f8460634d329
d9bde94c518a16a886514758b6b4431200145ecd58e30c5633ac3c0256544d77
f1b10cd842498c23d206ee0cbeaa9de8d2ae09ff3c7af2723a9e337a6965d639
fb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5777fde6f
repositories
    出现了四个目录文件,再通过
docker images --tree
└─f1b10cd84249 Virtual Size: 0 B
└─fb9cc58bde0c Virtual Size: 203.1 MB
└─a005304e4e74 Virtual Size: 203.1 MB
└─d9bde94c518a Virtual Size: 1.957 GB Tags: cloud_jiankongbao:01
    大家可以看到,4个目录其实分别是4个ID(注每次使用docker commit 提供对docker的修改之后就会产生一个新的id,就是通过这个ID可以实现对镜像的回滚)。每个目录下有json  layer.tar  VERSION 这三个文件。我们再看一下layer.tar 
cd fb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5777fde6f;tar -xf layer.tar;ls

ls fb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5777fde6f/
bin etc json lib lost+found mnt proc sbin srv tmp var
dev home layer.tar lib64 media opt root selinux sys usr VERSION
    这里存放的系统文件。

    我们再看一下镜像的4个不同ID的系统。

    f1b10cd84249 这个镜像是初始镜像,大小为0, fb9cc58bde0c 这个镜像是在f1b10cd84249基础上创建新的镜像,a005304e4e74是以fb9cc58bde0c为基础创建新的镜像。是树状继承的关系。我们再看下bin目录下的文件
ls a005304e4e74c1541988d3d1abb170e338c1d45daee7151f8e82f8460634d329/bin/
gtar tar
ls fb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5777fde6f/bin/
arch cpio egrep gunzip logger mountpoint raw sleep true
awk cut env gzip login mv readlink sort umount
basename date ex hostname ls netstat rm stty uname
bash dd false ipcalc lsblk nice rmdir su unlink
cat df fgrep iptables-xml mkdir nisdomainname rpm sync usleep
chgrp dmesg find iptables-xml-1.4.7 mknod ping rvi taskset vi
chmod dnsdomainname findmnt kill mktemp ping6 rview touch view
chown domainname gawk link more ps sed tracepath ypdomainname
cp echo grep ln mount pwd sh tracepath6 zcat
    a005304e4e74 只有两个文件 fb9cc58bde0c包括了大部分bin下的文件,这就是Aufs,理解起来感觉有点像增量备份。


二、简单的说一下devicemapper 


    devicemapper是利用了Snapshot 和Thinly-Provisioned Snapshot两种原理。将多个快照挂在同一个卷下从而实现文件系统的分层。不过使用devicemapper 的话一个container的大小最大只能是10G。
 
    在启动docker daemon时用参数-s 指定:  docker -d -s devicemapper
 
    关于隔离是怎么实现的呢,当容器基于镜像启动之后,每个容器都会获得自己的写读可写的文件系统层。原镜像的那部分文件系统是只读的,从而实现每个容器的在文件系统上的离隔。
 
   平时大家都在说dokcer 是弱隔离的,为什么呢?因为他没有隔离的很彻底,比如内核,内核是跟大家共用的,跟宿主机共用同一个内核,SELinux、 Cgroups以及/sys、/proc/sys、/dev/sd*等目录下的资源是与宿主机共用的。

   如果要隔离的彻底那就是VM了,而且如果dockers要想实现这些隔离就必然要牺牲一下现在轻量级的特性。那还不如直接用虚拟机好了!
文章转载出处

Ucloud DevOps Workshop互联网企业的运维进化论嘉宾资料分享

学习资源采菊篱下 发表了文章 • 0 个评论 • 901 次浏览 • 2015-08-28 01:05 • 来自相关话题

肖力




西山居 IT运维经理 嘉宾介绍:肖力,金山西山居系统运维经理,前盛大游戏研究员。15年工作经验,10年游戏行业运维经验,5年KVM虚拟化运维经验维护有微信订阅号:“KVM虚拟化实践”著有《深度实践KVM》一书,预计9月份出版。

王津银(老王)




UC IT运维经理 嘉宾介绍:老王,先后在腾讯、YY、UC(1年多)从事各种业务、各种架构服务的运维工作。目前通过公众号【互联网运维杂谈】来分享自己的运维历程,倡导价值化运维理念。

崔玉明




腾讯 数据库工程师/管理员 嘉宾介绍:腾讯游戏DBA TEAMLeader。从事技术运营工作13年,2007年加入腾讯公司互动娱乐运营部从事DBA岗位工作,现任DBA组及SA组负责人。在腾讯前6年,带领团队负责腾讯海量游戏Mysql及云存储的运维从0到1,从1到云的服务化平台建设。最近一年多主要精力在参与互娱成本优化以及系统运维工作。介绍的技术点:
[]肖力:虚拟化项目运维实践[/][]老王:我的互联网运维理论与实践[/][]崔玉明:仓管员发展自白[/]
三位嘉宾的PPT下载地址:http://pan.baidu.com/s/1wPakY
 
开源技术社区QQ群号:372476089  欢迎加入互相学习
扫码关注微信号: 查看全部


肖力


up1.jpg
西山居 IT运维经理 嘉宾介绍:肖力,金山西山居系统运维经理,前盛大游戏研究员。15年工作经验,10年游戏行业运维经验,5年KVM虚拟化运维经验维护有微信订阅号:“KVM虚拟化实践”著有《深度实践KVM》一书,预计9月份出版。


王津银(老王)


up2.jpg
UC IT运维经理 嘉宾介绍:老王,先后在腾讯、YY、UC(1年多)从事各种业务、各种架构服务的运维工作。目前通过公众号【互联网运维杂谈】来分享自己的运维历程,倡导价值化运维理念。


崔玉明


up3.jpg
腾讯 数据库工程师/管理员 嘉宾介绍:腾讯游戏DBA TEAMLeader。从事技术运营工作13年,2007年加入腾讯公司互动娱乐运营部从事DBA岗位工作,现任DBA组及SA组负责人。在腾讯前6年,带领团队负责腾讯海量游戏Mysql及云存储的运维从0到1,从1到云的服务化平台建设。最近一年多主要精力在参与互娱成本优化以及系统运维工作。
介绍的技术点:
    []肖力:虚拟化项目运维实践[/][]老王:我的互联网运维理论与实践[/][]崔玉明:仓管员发展自白[/]

三位嘉宾的PPT下载地址:http://pan.baidu.com/s/1wPakY
 
开源技术社区QQ群号:372476089  欢迎加入互相学习
扫码关注微信号:
opsk.jpg

兄弟连Linux基础教学视频

学习资源采菊篱下 发表了文章 • 0 个评论 • 891 次浏览 • 2015-08-26 23:51 • 来自相关话题

    此次分享给大家的是兄弟连最新版本的Linux基础教学视频,因为兄弟连是做PHP培训起家的学校,所以它教的Linux的知识是比较入门级别的。但是作为Linux初学者,这个视频对你还是非常有帮助的,如果你是一个持续学习Linux的爱好者,学习完本视频后,你可以接着学习我之前分享的老男孩中高级Linux学习视频,老男孩中高级学习视频下载地址请看:http://openskill.cn/article/76
 
   本次分享的兄弟连Linux基础学习视频下载地址:http://pan.baidu.com/s/1c02k6wo
 
   开源技术社区QQ群号:372476089  欢迎加入互相学习
   扫码关注微信号:




  查看全部
linuxjc.png

    此次分享给大家的是兄弟连最新版本的Linux基础教学视频,因为兄弟连是做PHP培训起家的学校,所以它教的Linux的知识是比较入门级别的。但是作为Linux初学者,这个视频对你还是非常有帮助的,如果你是一个持续学习Linux的爱好者,学习完本视频后,你可以接着学习我之前分享的老男孩中高级Linux学习视频,老男孩中高级学习视频下载地址请看:http://openskill.cn/article/76
 
   本次分享的兄弟连Linux基础学习视频下载地址:http://pan.baidu.com/s/1c02k6wo
 
   开源技术社区QQ群号:372476089  欢迎加入互相学习
   扫码关注微信号:
opsk.jpg

 

Docker主机间怎么共享数据卷

大数据/云计算OpenSkill 发表了文章 • 0 个评论 • 2120 次浏览 • 2015-08-26 00:07 • 来自相关话题

     Docker容器在不同的主机间共享数据是一件很棘手的事情。本文从"Docker容器实践"中采取,我们将研究一个轻量级,一个更复杂的方式在不同的主机间共享Docker数据卷。
     尽管容器之间共享同一台主机上的数据变得更为简便,跨主机间共享Docker数据卷比较棘手。数据容器是解决这个问题的一个方法,但如果数据经常变化或特别大,这样做会变得笨拙。
     我们要考察两个解决这个问题的方法。第一个是一个轻量级的分布式解决方案使用BitTorrent协议,仅仅需要安装Docker。 第二是使用NFS,并引入基础设施的容器的概念的更复杂的解决方案。

方法一:分布式数据卷BitTorrent的同步

     当Docker在一个组中实验,希望在组内共享大量数据,但是可能共享服务器没有足够的能力分配资源。懒惰的解决方案是在你需要他们的时候复制其他团队成员的最新文件,这将对一个更大的组失去控制。
     对此的解决方案是使用一个分散的工具共享文件–没有专门的资源要求。
问题:
     你想在互联网上共享跨主机的卷
解决方法:
     使用BitTorrent同步image共享卷
讨论:
    下面说明图显示了我们的目标,结束与设置:



    A - 该BTSync服务器是一个拥有我们将要共享的/data数据卷Docker容器
B - 在同一主机上设置一个容器从BTSync服务器上挂载数据卷
C - 在一个单独的网络中的其他主机,在BTSync服务器生成一个密钥,客户端可以通过引用BitTorrent协议来访问共享数据。
D - 在另外一台主机上的BTSync客户端,从第一主机BTSync服务器挂载数据同步更新/data数据。
E - 容器从BTSync客户端挂载数据卷     最终的结果是卷/data-即方便地同步在互联网上,而不需要任何复杂的设置。
     在您的主服务器上运行这些命令来设置第一台主机上的容器:[host1]$ [#A]docker run -d -p 8888:8888 -p 55555:55555 --name btsync ctlc/btsync
$ [#B]docker logs btsync
Starting btsync with secret: [#C]ALSVEUABQQ5ILRS2OQJKAOKCU5SIIP6A3 By using this application, you agree to our Privacy Policy and Terms. http://www.bittorrent.com/legal/privacy http://www.bittorrent.com/legal/terms-of-use
total physical memory 536870912 max disk cache 2097152 Using IP address 172.17.4.121
[host1]$ [#D]docker run -i -t --volumes-from btsync ubuntu /bin/bash
$ touch /data/shared_from_server_one [#E] $ ls /data shared_from_server_one     A -运行发表CTLC / btsync image btsync守护程序容器调用并打开所需的端口
     B -获取 btsync容器的输出,所以我们可以记下key
     C -记下key-不同的运行产生有所不同
     D-启动一个交互式的容器从btsync服务器的卷
     E-添加文件到/data
     在第二个服务器上打开一个终端,运行以下命令来设置数据同步[host2]$ docker run -d
--name btsync-client -p 8888:8888 -p
55555:55555 ctlc/btsync ALSVEUABQQ5ILRS2OQJKAOKCU5SIIP6A3 [#A]
[host2]$ docker run -i -t --volumes-from btsync-client ubuntu bash [#B] $ ls /data shared_from_server_one [#C] $ touch /data/shared_from_server_two [#D] $ ls /data
shared_from_server_one shared_from_server_two     A -启动 btsync客户端容器与host1上的守护程序运行生成的密钥守护进程
     B -启动安装卷从我们的客户守护进程的互动容器
     C - host1上创建的文件已被转移到主机2
     D -创建 host2上的第二个文件
     回到主机1的运行容器,我们应该看到的文件,就像第一次是在主机之间进行同步:$ ls /data
shared_from_server_one shared_from_server_two      注:文件同步是没有时间保证,所以你可能要等待同步数据。这是特别真实的更大的文件。

      警告:由于数据被发送到互联网和处理的协议,你没有控制,不要依赖于此,如果你有任何有意义的安全性,可扩展性或性能约束。

方法二:通过NFS共享数据

      在一些大公司极有可能已经在使用NFS,NFS是一种行之有效的选项作为文件中心服务。Docker想要工作,它能够访问这些共享文件通常是很重要的!
      然而,Docker不支持NFS开箱即用和每个集装箱上安装NFS客户端,以便能够挂载远程文件夹不被认为是最佳时实践。相反,建议的方法是有一个容器用作从NFS翻译为Docker更友好的概念–卷!
问题:
      你要无缝访问远程文件系统通过NFS
解决方法:
      使用基础设施的数据容器代理访问
讨论
      这种技术建立在数据容器技术之上。
下图给出了这个抽象的概念:




      NFS服务器暴露内部目录的文件夹/出口,这是安装在主机绑定。Docker主机再将这个文件夹使用NFS协议mount到/mnt文件夹。然后,一个所谓的基础设施容器被创建,它结合了安装文件夹。
     这似乎有点过度设计乍一看,但好处是,它提供了一个间接层就Docker容器而言:他们需要做的是安装卷从预先约定的基础设施的容器,谁是负责基础设施可以担心的内部管道,可用性,网络等。
     彻底处理NFS是超出了本书的范围。然而,我们去通过一台主机上建立这样一个共享的步骤(即NFS服务器的元素在同一主机作为Docker容器)。这已经在Ubuntu 14.04测试。
     想象一下,你想分享你的主机/opt/test/db,其中包含的文件mybigdb.db。
     使用root,安装NFS服务器创建/export目录,并开放权限:apt-get install nfs-kernel-server mkdir /export chmod 777 /export     现在挂载db目录/opt/test/db到/export$ mount --bind /opt/test/db /export     现在你应该可以看到 /opt/test/db中的挂载的内容
     现在加入这一行到您的etc/exports文件中/export [#A]127.0.0.1([#B]ro,fsid=0,insecure,no_subtree_check,async)      A -对于这个概念证明的例子中我们对127.0.0.1,这违背了对象有点安装在本地。 在真实的场景中,你会锁定下来的一类IP地址,如192.168.1.0/24的。 如果你真的很喜欢玩火,你可以打开它的世界,而不是127.0.0.1!
     B -为安全起见,我们安装件只读这里,*但是你可以用RW更换RO安装读写。 请记住,如果你这样做,那么你就需要异步标志出现后添加no_root_squash会标志 - 但考虑安全性在此之前沙坑外面去!
挂载NFS上的目录/ mnt目录,出口,我们在指定的文件系统的/ etc / exports的上面,然后重新启动NFS服务,拿起变化: $ mount -t nfs 127.0.0.1:/export /mnt
$ exportfs -a
$ service nfs-kernel-server restart     现在您已经准备好运行基础设施的容器:$ docker run -ti --name nfs_client --privileged -v /mnt:/mnt busybox /bin/true      TODO:检查一个以上要求
      现在,我们可以运行 - 没有特权,或底层实现知识 - 目录,我们希望访问:$ docker run -ti --volumes-from nfs_client debian /bin/bash root@079d70f79d84:/# ls /mnt myb root@079d70f79d84:/# cd /mnt root@079d70f79d84:/mnt# touch asd touch: cannot touch `asd': Read-only file system     提示:如果你有很多这些容器来管理使用的运营效率的命名约定,你可以通过命名约定管理操作更容易,例如——名为nfs_client_opt_database_live容器暴露/opt/database/live路径。
这种模式的一个共享资源,在多个容器中使用的其他人使用的共享资源,是一个强大的,可以使开发工作流程更简单。
原文地址 查看全部
dk1.png

     Docker容器在不同的主机间共享数据是一件很棘手的事情。本文从"Docker容器实践"中采取,我们将研究一个轻量级,一个更复杂的方式在不同的主机间共享Docker数据卷。
     尽管容器之间共享同一台主机上的数据变得更为简便,跨主机间共享Docker数据卷比较棘手。数据容器是解决这个问题的一个方法,但如果数据经常变化或特别大,这样做会变得笨拙。
     我们要考察两个解决这个问题的方法。第一个是一个轻量级的分布式解决方案使用BitTorrent协议,仅仅需要安装Docker。 第二是使用NFS,并引入基础设施的容器的概念的更复杂的解决方案。


方法一:分布式数据卷BitTorrent的同步


     当Docker在一个组中实验,希望在组内共享大量数据,但是可能共享服务器没有足够的能力分配资源。懒惰的解决方案是在你需要他们的时候复制其他团队成员的最新文件,这将对一个更大的组失去控制。
     对此的解决方案是使用一个分散的工具共享文件–没有专门的资源要求。
问题:
     你想在互联网上共享跨主机的卷
解决方法:
     使用BitTorrent同步image共享卷
讨论:
    下面说明图显示了我们的目标,结束与设置:
dk2.png
   
     A - 该BTSync服务器是一个拥有我们将要共享的/data数据卷Docker容器
B - 在同一主机上设置一个容器从BTSync服务器上挂载数据卷
C - 在一个单独的网络中的其他主机,在BTSync服务器生成一个密钥,客户端可以通过引用BitTorrent协议来访问共享数据。
D - 在另外一台主机上的BTSync客户端,从第一主机BTSync服务器挂载数据同步更新/data数据。
E - 容器从BTSync客户端挂载数据卷
     最终的结果是卷/data-即方便地同步在互联网上,而不需要任何复杂的设置。
     在您的主服务器上运行这些命令来设置第一台主机上的容器:
[host1]$ [#A]docker run -d -p 8888:8888 -p 55555:55555 --name btsync ctlc/btsync
$ [#B]docker logs btsync
Starting btsync with secret: [#C]ALSVEUABQQ5ILRS2OQJKAOKCU5SIIP6A3 By using this application, you agree to our Privacy Policy and Terms. http://www.bittorrent.com/legal/privacy http://www.bittorrent.com/legal/terms-of-use
total physical memory 536870912 max disk cache 2097152 Using IP address 172.17.4.121
[host1]$ [#D]docker run -i -t --volumes-from btsync ubuntu /bin/bash
$ touch /data/shared_from_server_one [#E] $ ls /data shared_from_server_one
     A -运行发表CTLC / btsync image btsync守护程序容器调用并打开所需的端口
     B -获取 btsync容器的输出,所以我们可以记下key
     C -记下key-不同的运行产生有所不同
     D-启动一个交互式的容器从btsync服务器的卷
     E-添加文件到/data
     在第二个服务器上打开一个终端,运行以下命令来设置数据同步
[host2]$ docker run -d
--name btsync-client -p 8888:8888 -p
55555:55555 ctlc/btsync ALSVEUABQQ5ILRS2OQJKAOKCU5SIIP6A3 [#A]
[host2]$ docker run -i -t --volumes-from btsync-client ubuntu bash [#B] $ ls /data shared_from_server_one [#C] $ touch /data/shared_from_server_two [#D] $ ls /data
shared_from_server_one shared_from_server_two
     A -启动 btsync客户端容器与host1上的守护程序运行生成的密钥守护进程
     B -启动安装卷从我们的客户守护进程的互动容器
     C - host1上创建的文件已被转移到主机2
     D -创建 host2上的第二个文件
     回到主机1的运行容器,我们应该看到的文件,就像第一次是在主机之间进行同步:
$ ls /data
shared_from_server_one shared_from_server_two
      注:文件同步是没有时间保证,所以你可能要等待同步数据。这是特别真实的更大的文件。

      警告:由于数据被发送到互联网和处理的协议,你没有控制,不要依赖于此,如果你有任何有意义的安全性,可扩展性或性能约束。


方法二:通过NFS共享数据


      在一些大公司极有可能已经在使用NFS,NFS是一种行之有效的选项作为文件中心服务。Docker想要工作,它能够访问这些共享文件通常是很重要的!
      然而,Docker不支持NFS开箱即用和每个集装箱上安装NFS客户端,以便能够挂载远程文件夹不被认为是最佳时实践。相反,建议的方法是有一个容器用作从NFS翻译为Docker更友好的概念–卷!
问题:
      你要无缝访问远程文件系统通过NFS
解决方法:
      使用基础设施的数据容器代理访问
讨论
      这种技术建立在数据容器技术之上。
下图给出了这个抽象的概念:
dk3.png

      NFS服务器暴露内部目录的文件夹/出口,这是安装在主机绑定。Docker主机再将这个文件夹使用NFS协议mount到/mnt文件夹。然后,一个所谓的基础设施容器被创建,它结合了安装文件夹。
     这似乎有点过度设计乍一看,但好处是,它提供了一个间接层就Docker容器而言:他们需要做的是安装卷从预先约定的基础设施的容器,谁是负责基础设施可以担心的内部管道,可用性,网络等。
     彻底处理NFS是超出了本书的范围。然而,我们去通过一台主机上建立这样一个共享的步骤(即NFS服务器的元素在同一主机作为Docker容器)。这已经在Ubuntu 14.04测试。
     想象一下,你想分享你的主机/opt/test/db,其中包含的文件mybigdb.db。
     使用root,安装NFS服务器创建/export目录,并开放权限:
apt-get install nfs-kernel-server mkdir /export chmod 777 /export
     现在挂载db目录/opt/test/db到/export
$ mount --bind /opt/test/db /export
     现在你应该可以看到 /opt/test/db中的挂载的内容
     现在加入这一行到您的etc/exports文件中
/export       [#A]127.0.0.1([#B]ro,fsid=0,insecure,no_subtree_check,async)
      A -对于这个概念证明的例子中我们对127.0.0.1,这违背了对象有点安装在本地。 在真实的场景中,你会锁定下来的一类IP地址,如192.168.1.0/24的。 如果你真的很喜欢玩火,你可以打开它的世界,而不是127.0.0.1!
     B -为安全起见,我们安装件只读这里,*但是你可以用RW更换RO安装读写。 请记住,如果你这样做,那么你就需要异步标志出现后添加no_root_squash会标志 - 但考虑安全性在此之前沙坑外面去!
挂载NFS上的目录/ mnt目录,出口,我们在指定的文件系统的/ etc / exports的上面,然后重新启动NFS服务,拿起变化: 
$ mount -t nfs 127.0.0.1:/export /mnt
$ exportfs -a
$ service nfs-kernel-server restart
     现在您已经准备好运行基础设施的容器:
$ docker run -ti --name nfs_client --privileged -v /mnt:/mnt busybox /bin/true
      TODO:检查一个以上要求
      现在,我们可以运行 - 没有特权,或底层实现知识 - 目录,我们希望访问:
$ docker run -ti --volumes-from nfs_client debian /bin/bash root@079d70f79d84:/# ls /mnt myb root@079d70f79d84:/# cd /mnt root@079d70f79d84:/mnt# touch asd touch: cannot touch `asd': Read-only file system
     提示:如果你有很多这些容器来管理使用的运营效率的命名约定,你可以通过命名约定管理操作更容易,例如——名为nfs_client_opt_database_live容器暴露/opt/database/live路径。
这种模式的一个共享资源,在多个容器中使用的其他人使用的共享资源,是一个强大的,可以使开发工作流程更简单。
原文地址

老男孩中高级Linux学习视频

学习资源采菊篱下 发表了文章 • 0 个评论 • 983 次浏览 • 2015-08-25 21:17 • 来自相关话题

  
 这次分享给大家下载的是,老男孩的Linux运维中高级教学视频,希望对刚学习Linux的同学和需要温故Linux知识的同学有帮助!
   视频资料下载地址:http://pan.baidu.com/s/1i3JBkUh
 
开源技术社区QQ群号:372476089  欢迎加入
扫码关注微信号:




  查看全部
linuxs.jpg
  
 这次分享给大家下载的是,老男孩的Linux运维中高级教学视频,希望对刚学习Linux的同学和需要温故Linux知识的同学有帮助!
   视频资料下载地址:http://pan.baidu.com/s/1i3JBkUh
 
开源技术社区QQ群号:372476089  欢迎加入
扫码关注微信号:
weixin.jpg

 

Python异常处理的三种常用方法

编程语言koyo 发表了文章 • 0 个评论 • 561 次浏览 • 2015-08-25 20:47 • 来自相关话题

如果你在写python程序时遇到异常后想进行如下处理的话,一般用try来处理异常,假设有下面的一段程序:try:
语句1
语句2
.
.
语句N
except .........:
do something .......但是你并不知道"语句1至语句N"在执行会出什么样的异常,但你还要做异常处理,且想把出现的异常打印出来,并不停止程序的运行,那么"except ......"这句应怎样写?
总结了一下3个方法:

方法一:捕获所有异常

try:
a=b
b=c
except Exception,e:
print Exception,":",e



方法二:采用traceback模块查看异常

#引入python中的traceback模块,跟踪错误
import traceback
try:
a=b
b=c
except:
traceback.print_exc()

方法三:采用sys模块回溯最后的异常

#引入sys模块
import sys
try:
a=b
b=c
except:
info=sys.exc_info()
print info[0],":",info[1]但是,如果你还想把这些异常保存到一个日志文件中,来分析这些异常,那么请看下面的方法:
把traceback.print_exc() 打印在屏幕上的信息保存到一个文本文件中import traceback
try:
a=b
b=c
except:
f=open("c:log.txt",'a')
traceback.print_exc(file=f)
f.flush()
f.close() 查看全部
如果你在写python程序时遇到异常后想进行如下处理的话,一般用try来处理异常,假设有下面的一段程序:
try:
语句1
语句2
.
.
语句N
except .........:
do something .......
但是你并不知道"语句1至语句N"在执行会出什么样的异常,但你还要做异常处理,且想把出现的异常打印出来,并不停止程序的运行,那么"except ......"这句应怎样写?
总结了一下3个方法:


方法一:捕获所有异常


try:  
a=b
b=c
except Exception,e:
print Exception,":",e



方法二:采用traceback模块查看异常


#引入python中的traceback模块,跟踪错误
import traceback
try:
a=b
b=c
except:
traceback.print_exc()


方法三:采用sys模块回溯最后的异常


#引入sys模块
import sys
try:
a=b
b=c
except:
info=sys.exc_info()
print info[0],":",info[1]
但是,如果你还想把这些异常保存到一个日志文件中,来分析这些异常,那么请看下面的方法:
把traceback.print_exc() 打印在屏幕上的信息保存到一个文本文件中
import traceback
try:
a=b
b=c
except:
f=open("c:log.txt",'a')
traceback.print_exc(file=f)
f.flush()
f.close()

明教教主版Vsphere5.0学习视频和文档

学习资源采菊篱下 发表了文章 • 0 个评论 • 607 次浏览 • 2015-08-24 21:09 • 来自相关话题

绝对的大放送,干货视频和文档放送,资源下载地址:http://pan.baidu.com/s/1c0yM6ZI
vsphere_logo.jpg

绝对的大放送,干货视频和文档放送,资源下载地址:http://pan.baidu.com/s/1c0yM6ZI

多交流多阅读,淡化手机症

互联网资讯采菊篱下 发表了文章 • 0 个评论 • 648 次浏览 • 2015-08-23 11:24 • 来自相关话题

首先我们来看一个已经在网上疯传的视频,希望你有所启迪,由于本编辑器不支持此视频格式,请点击链接地址观看,我想你会有收获的。视频地址如下:
告别手机党

你中枪了吗

     早晨起来第一件事是摸手机,晚上睡前最后一件事是放下手机,你中枪没?数据显示,全球人均6分半钟看一次手机,你中枪没?
      悲催的我站着、坐着、躺着……全中枪。
      不看不知道,一看吓一跳。全球总共有多少部智能手机?18.3亿。每位手机用户平均每天查看多少次手机?150次。换言之,除了休息时间外,每人平均每6分半钟查看一次手机。
      微信、挂Q、发微博、看新闻……我和众多手机用户还没写申请书就入了"低头党"。中国手机网民规模达5亿, "低头党" 少说也上亿人,而我们光荣的共产党党员才8512.7万。
      手机,成了生活的一部分。看手机,成了人生的一部分。
       在上班走路,有看手机撞过人、撞过树、撞过电线杆。上班坐地铁,在拥挤的空间里拿出吃奶的力气左推右搡看手机。
       不论蹲坑还是坐马桶,不管有无信号或是WIFI,我上厕所都要看手机。因为看手机,我糗事一大堆,双腿无数次麻木,手机多次掉到厕所里。
      春晚一年不如一年,但必须得看,爸妈用电视看春晚,现在的我们用手机吐槽春晚。像得了强迫症一样,要是不看一眼手机,我们就觉得心里很不踏实。找不到手机就心烦意乱,手机没电很紧张,手机没信号很抓狂……,你中枪没?
      其实,离开手机一整天或一段时间,生活也没有缺少什么。
      "时间都去哪儿了,还没好好感受年轻就老了……"马年春晚,一曲《时间都去哪儿了》让人动容。我不禁要问问时间到底都去哪儿了?
      先来看看我们习主席的答案:"我个人的时间都去哪儿了?当然是都被工作占去了。现在,我经常能做到的是读书,读书已成了我的一种生活方式。"再看看我们手机党的答案,都被手机偷去啦,真是自惭形秽,多向习主席学习。








































编者感言:在这个互联网+的环境中,在这个信息时代,手机已经深深的影响到了我们的生活,成为了“必需品”。记得以前我们的童年是在玩泥巴、跳皮筋、跳房子、捉迷藏等游戏中和我们的小伙伴们开心的玩耍交流中度过的,而现在的孩子们在父母的影响下,也变成了手机党。现在都市生活中,父母陪孩子的时间越来越少,回家有时间也是盯着手机,在这种氛围下,让我们的孩子也受到了影响,没事在家就是打开平板电脑或者手机玩游戏,他们交朋友的方式更多的是通过玩游戏、互联网社交,而那种纯粹的交友方式淡化了。作为一个IT从业者,我想大家除了工作的时间,大部分时间也花在手机上吧?早晨起床,打开手机微信朋友圈先溜一圈,早晨的推文叫做“营养早餐”,美好的一天开始吗,到了中午快要到中午吃午饭了,这时候大家又开始打开手机,看朋友圈,看微信群,淡淡比,中午的推文叫做“自助餐”,到了晚上,朝九晚五的一天就要结束了,大家不约而同的打开了微博、微信、QQ等,哎哟,这个土豪又在发红包,真高兴,抢到了1.5,而这时候一波推文又开始了,晚餐前的推文叫做“晚餐甜点”,因为你下班了,有时间了,可以细细品味了。一天手机带你度过,我也是一名手机党,我不是说手机党有什么不好,而是说我们要看到它的优点,发扬优点,去其糟粕,吸其精华。在我们的微信朋友圈,确实有不少的干货、好的文章,这些都值得我们细细品读,如果你只是转发一下,大概看一下大体,这就失去了意义。我们应该向习大大学习,多读书、多和别人交流、多思考! 查看全部
sjd1.jpg

首先我们来看一个已经在网上疯传的视频,希望你有所启迪,由于本编辑器不支持此视频格式,请点击链接地址观看,我想你会有收获的。视频地址如下:
告别手机党


你中枪了吗


     早晨起来第一件事是摸手机,晚上睡前最后一件事是放下手机,你中枪没?数据显示,全球人均6分半钟看一次手机,你中枪没?
      悲催的我站着、坐着、躺着……全中枪。
      不看不知道,一看吓一跳。全球总共有多少部智能手机?18.3亿。每位手机用户平均每天查看多少次手机?150次。换言之,除了休息时间外,每人平均每6分半钟查看一次手机。
      微信、挂Q、发微博、看新闻……我和众多手机用户还没写申请书就入了"低头党"。中国手机网民规模达5亿, "低头党" 少说也上亿人,而我们光荣的共产党党员才8512.7万。
      手机,成了生活的一部分。看手机,成了人生的一部分。
       在上班走路,有看手机撞过人、撞过树、撞过电线杆。上班坐地铁,在拥挤的空间里拿出吃奶的力气左推右搡看手机。
       不论蹲坑还是坐马桶,不管有无信号或是WIFI,我上厕所都要看手机。因为看手机,我糗事一大堆,双腿无数次麻木,手机多次掉到厕所里。
      春晚一年不如一年,但必须得看,爸妈用电视看春晚,现在的我们用手机吐槽春晚。像得了强迫症一样,要是不看一眼手机,我们就觉得心里很不踏实。找不到手机就心烦意乱,手机没电很紧张,手机没信号很抓狂……,你中枪没?
      其实,离开手机一整天或一段时间,生活也没有缺少什么。
      "时间都去哪儿了,还没好好感受年轻就老了……"马年春晚,一曲《时间都去哪儿了》让人动容。我不禁要问问时间到底都去哪儿了?
      先来看看我们习主席的答案:"我个人的时间都去哪儿了?当然是都被工作占去了。现在,我经常能做到的是读书,读书已成了我的一种生活方式。"再看看我们手机党的答案,都被手机偷去啦,真是自惭形秽,多向习主席学习。
sjd2.png

sjd3.png

sjd4.png

sjd5.png

sjd6.png

sjd7.png

sjd8.png

sjd9.png

sjd10.png

sjd11.png

编者感言:
在这个互联网+的环境中,在这个信息时代,手机已经深深的影响到了我们的生活,成为了“必需品”。记得以前我们的童年是在玩泥巴、跳皮筋、跳房子、捉迷藏等游戏中和我们的小伙伴们开心的玩耍交流中度过的,而现在的孩子们在父母的影响下,也变成了手机党。现在都市生活中,父母陪孩子的时间越来越少,回家有时间也是盯着手机,在这种氛围下,让我们的孩子也受到了影响,没事在家就是打开平板电脑或者手机玩游戏,他们交朋友的方式更多的是通过玩游戏、互联网社交,而那种纯粹的交友方式淡化了。作为一个IT从业者,我想大家除了工作的时间,大部分时间也花在手机上吧?早晨起床,打开手机微信朋友圈先溜一圈,早晨的推文叫做“营养早餐”,美好的一天开始吗,到了中午快要到中午吃午饭了,这时候大家又开始打开手机,看朋友圈,看微信群,淡淡比,中午的推文叫做“自助餐”,到了晚上,朝九晚五的一天就要结束了,大家不约而同的打开了微博、微信、QQ等,哎哟,这个土豪又在发红包,真高兴,抢到了1.5,而这时候一波推文又开始了,晚餐前的推文叫做“晚餐甜点”,因为你下班了,有时间了,可以细细品味了。一天手机带你度过,我也是一名手机党,我不是说手机党有什么不好,而是说我们要看到它的优点,发扬优点,去其糟粕,吸其精华。在我们的微信朋友圈,确实有不少的干货、好的文章,这些都值得我们细细品读,如果你只是转发一下,大概看一下大体,这就失去了意义。我们应该向习大大学习,多读书、多和别人交流、多思考!

SELinux防护KVM安全

大数据/云计算OpenSkill 发表了文章 • 0 个评论 • 961 次浏览 • 2015-08-23 01:40 • 来自相关话题

      SELinux最初是由美国安全局NSA发起的项目,是基于强制访问控制(MAC)策略的,为每一个主体和客户都提供了个虚拟的安全“沙箱”,只允许进程操作安全策略中明确允许的文件。当Linux开启了SELinux安全策略,所有的主体对客户的访问必须同时满足传统的自主访问控制(DAC)和SELinux提供的强制访问控制(MAC)策略。
 
      在虚拟化环境下,通常是多个VM运行在同一个宿主机(物理机)上,通常由同一个用户启动多个VM管理进程(如:qemu-kvm或者vmx等),而这些VM可能为不同的租户服务,如果其中一个VM由于某些脆弱性被恶意控制了,而hypervisor层有缺陷,攻击者就有机会利用被控制的VM发起对同宿主机或其它VM进行恶意攻击。如下图:宿主机中的SELinux安全策略阻止了VM的Attack行为。





SELinux与KVM

      sVirt 项目集成SELinux强制访问控制 (MAC) 安全和基于 Linux 的KVM虚拟化。
确认SELinux策略正常开启




创建img文件
     通过dd命令创建两个大小为20GB的img文件,作为虚拟机的磁盘:dd if=/dev/zero of=/opt/vm/vm01.img bs=1M count=20480
dd if=/dev/zero of=/opt/vm/vm02.img bs=1M count=20480      查看img文件安全上下文




     从上图可知两个img文件的安全上下文,其中用户域为unconfined_u,表示不限制用户;角色域为object_r通常表示普通文件或目录;类型域为usr_t;MCS为s0;
qemu-kvm命令配合VNC​/usr/libexec/qemu-kvm -cpu qemu64 \
-drive file=/opt/vm/vm01.img \
-m 2048 \
-cdrom \
/opt/CentOS-6.5-x86_64-bin-DVD1.iso \
-vnc :1

/usr/libexec/qemu-kvm \
-cpu qemu64 \
-drive file=/opt/vm/vm02.img \
-m 2048 \
-cdrom \
/opt/CentOS-6.5-x86_64-bin-DVD1.iso \
-vnc :2     给两个img文件安装上CentOS-6.5-x86_64操作系统并处于运行状态,此时的两个img文件的安全上下文还是与之前的保持不变。(注:实际在部署KVM虚拟机里以上步骤不是必须,这里是为了演示SELinux安全上下文的变化而考虑的)
virt-manager启动KVM虚拟机
     结束qemu-kvm进程,用专用的virsh或virt-manager工具(这里以图形工具virt-manager为例)启动两个虚拟机,先ssh –X连接到宿主机,再执行virt-manager命令:




     在弹出的窗口里“新建”一个虚拟机,输入名称,单选“Import existing disk image”根据向导创建并启动虚拟机:




     当两个虚拟机都通过virt-manager启动之后管理窗口如下:




确认安全上下文变化
     此时再看一下两个img文件的安全上下文,除了角色域object_r没有变化之外,用户域、类型域、MCS都发生了变化。




     再确认一下对应进程的安全上下文:




     可以看出img文件的MCS与进程的MCS是严格对应的,且对虚拟机进行重启操作时会自动给进程和img文件重新分配MCS。这种安全机制可以严格控制威胁的范围,提高云平台的安全性。

SELinux阻止非法访问

     介绍一下MCS不同时阻止相互访问,将/bin/bash拷贝一个为/opt/test_sh,并查看一下当前的安全上下文:




     由于在SELinux的默认安全策略里,使用svirt_t类型的入口程序必须类型为qemu_exec_t,这里修改一下test_sh的类型:




MCS为s0:c0,c1的操作
     以特定的SELinux安全策略来运行,这里切换一下类型为svirt_t和MCS为s0:c0,c1,并查看当前用户的安全上下文以确认,之后通过echo命令向/tmp/test文件(由于SELinux安全策略限制,此时只能向/tmp目录下写新建文件)里随便写内容,写成功后再查看一下/tmp/test的安全上下文。MCS都是一致的。




MCS为s0:c0,c2的操作
      再以特定的SELinux安全策略来运行,这里切换一下类型为svirt_t和MCS为s0:c0,c2,并查看当前用户的安全上下文以确认,之后通过echo命令向/tmp/test文件(这个文件是前一步创建的)里随便写内容,由于安全策略的限制会写入失败,提示:Permission denied(下图红线部分)。确认文件MCS与当前环境的MCS是不一致的。





来点感动自己的鸡汤

      所有被SELinux安全策略阻止的操作都会有相应的日志记录,当系统auditd服务启动时会记录在audit.log日志,否则记录在message日志里。 查看全部
se1.jpg

      SELinux最初是由美国安全局NSA发起的项目,是基于强制访问控制(MAC)策略的,为每一个主体和客户都提供了个虚拟的安全“沙箱”,只允许进程操作安全策略中明确允许的文件。当Linux开启了SELinux安全策略,所有的主体对客户的访问必须同时满足传统的自主访问控制(DAC)和SELinux提供的强制访问控制(MAC)策略。
 
      在虚拟化环境下,通常是多个VM运行在同一个宿主机(物理机)上,通常由同一个用户启动多个VM管理进程(如:qemu-kvm或者vmx等),而这些VM可能为不同的租户服务,如果其中一个VM由于某些脆弱性被恶意控制了,而hypervisor层有缺陷,攻击者就有机会利用被控制的VM发起对同宿主机或其它VM进行恶意攻击。如下图:宿主机中的SELinux安全策略阻止了VM的Attack行为。
se2.png


SELinux与KVM


      sVirt 项目集成SELinux强制访问控制 (MAC) 安全和基于 Linux 的KVM虚拟化。
确认SELinux策略正常开启
se3.png

创建img文件
     通过dd命令创建两个大小为20GB的img文件,作为虚拟机的磁盘:
dd if=/dev/zero of=/opt/vm/vm01.img bs=1M count=20480
dd if=/dev/zero of=/opt/vm/vm02.img bs=1M count=20480
      查看img文件安全上下文
se4.png

     从上图可知两个img文件的安全上下文,其中用户域为unconfined_u,表示不限制用户;角色域为object_r通常表示普通文件或目录;类型域为usr_t;MCS为s0;
qemu-kvm命令配合VNC​
/usr/libexec/qemu-kvm -cpu qemu64 \
-drive file=/opt/vm/vm01.img \
-m 2048 \
-cdrom \
/opt/CentOS-6.5-x86_64-bin-DVD1.iso \
-vnc :1

/usr/libexec/qemu-kvm \
-cpu qemu64 \
-drive file=/opt/vm/vm02.img \
-m 2048 \
-cdrom \
/opt/CentOS-6.5-x86_64-bin-DVD1.iso \
-vnc :2
     给两个img文件安装上CentOS-6.5-x86_64操作系统并处于运行状态,此时的两个img文件的安全上下文还是与之前的保持不变。(注:实际在部署KVM虚拟机里以上步骤不是必须,这里是为了演示SELinux安全上下文的变化而考虑的)
virt-manager启动KVM虚拟机
     结束qemu-kvm进程,用专用的virsh或virt-manager工具(这里以图形工具virt-manager为例)启动两个虚拟机,先ssh –X连接到宿主机,再执行virt-manager命令:
se5.png

     在弹出的窗口里“新建”一个虚拟机,输入名称,单选“Import existing disk image”根据向导创建并启动虚拟机:
se6.png

     当两个虚拟机都通过virt-manager启动之后管理窗口如下:
se7.png

确认安全上下文变化
     此时再看一下两个img文件的安全上下文,除了角色域object_r没有变化之外,用户域、类型域、MCS都发生了变化
se8.png

     再确认一下对应进程的安全上下文:
se9.png

     可以看出img文件的MCS与进程的MCS是严格对应的,且对虚拟机进行重启操作时会自动给进程和img文件重新分配MCS。这种安全机制可以严格控制威胁的范围,提高云平台的安全性。


SELinux阻止非法访问


     介绍一下MCS不同时阻止相互访问,将/bin/bash拷贝一个为/opt/test_sh,并查看一下当前的安全上下文
se10.png

     由于在SELinux的默认安全策略里,使用svirt_t类型的入口程序必须类型为qemu_exec_t,这里修改一下test_sh的类型:
se11.png

MCS为s0:c0,c1的操作
     以特定的SELinux安全策略来运行,这里切换一下类型为svirt_t和MCS为s0:c0,c1,并查看当前用户的安全上下文以确认,之后通过echo命令向/tmp/test文件(由于SELinux安全策略限制,此时只能向/tmp目录下写新建文件)里随便写内容,写成功后再查看一下/tmp/test的安全上下文。MCS都是一致的
se12.png

MCS为s0:c0,c2的操作
      再以特定的SELinux安全策略来运行,这里切换一下类型为svirt_t和MCS为s0:c0,c2,并查看当前用户的安全上下文以确认,之后通过echo命令向/tmp/test文件(这个文件是前一步创建的)里随便写内容,由于安全策略的限制会写入失败,提示:Permission denied(下图红线部分)。确认文件MCS与当前环境的MCS是不一致的。
se13.png


来点感动自己的鸡汤


      所有被SELinux安全策略阻止的操作都会有相应的日志记录,当系统auditd服务启动时会记录在audit.log日志,否则记录在message日志里。
se14.png