/bin/bash^M: bad interpreter: No such file or directory

/bin/bash^M: bad interpreter: No such file or directory 出现上面错误的原因之一是脚本文件是DOS格式的, 即每一行的行尾以\r\n来标识, 使用vim编辑器打开脚本, 运行: :set ff? 可以看到D...
继续阅读 »
/bin/bash^M: bad interpreter: No such file or directory
出现上面错误的原因之一是脚本文件是DOS格式的, 即每一行的行尾以\r\n来标识, 使用vim编辑器打开脚本, 运行:
:set ff?
可以看到DOS或UNIX的字样. 使用set ff=unix把它强制为unix格式的, 然后存盘退出, 即可.

 
 
 
  收起阅读 »

学习技术交流的净土绝对不是微信

今天查看微信订阅号,查看到了微信订阅号"运维帮"南非蜘蛛发布的一篇文章"纪念曾经一起上过的技术社区",文章最后的一句话明显是重点,前面说的都是铺垫,这么做的原因是什么,请看我的分析。 "纪念曾经一起上过的技术社区"文章原文如下:  不知道是现...
继续阅读 »


今天查看微信订阅号,查看到了微信订阅号"运维帮"南非蜘蛛发布的一篇文章"纪念曾经一起上过的技术社区",文章最后的一句话明显是重点,前面说的都是铺垫,这么做的原因是什么,请看我的分析。
"纪念曾经一起上过的技术社区"文章原文如下: 


       不知道是现在技术太成熟,还是大家都懒的交流,以前活跃的社区都歇菜了,比如Chinaunix、ITPUB、Linuxfans、Linuxform、Linuxeden、网易社区等等。
作为国内最大的技术社区Chinaunix,今天的数据统计是:
论坛共有 17794083 篇帖子(其中 1459640 篇主题) 今日发帖量为 139 篇
现在每天发帖量也不过200篇,都已经杂草丛生,无人管理,版主会议室也是常年无人发言,经常看到很多版主请辞,估计是不做这行了?也可能是精力不够。
社区之死是什么原因?无人知晓。
我个人还是比较喜欢bbs和邮件订阅形式的技术讨论,一是讨论的东西可以沉淀,留下历史记录,如果搜索引擎收录了,还可以帮助更多的人,二是想回答就回答,不想回答就潜水。QQ和微信讨论的好处是实时,但坏处也是实时,天天被人追着问问题,我心也不免狂躁,就算不回答,看着头像闪来闪去也闹心。
现在还有一些其它地方也可以讨论技术,反正只要有工程师活跃的地方,就有技术讨论。
微博讨论技术感觉是怪怪的,好像更适合发布一些消息,而且噪音太多,有用的东西很容易被淹没在明星的爆料中,微博娱乐属性更强一些,其次是科技新闻。
知乎这种问答社区也经常看到技术讨论,但是更多的是争吵和鄙视。

寻找一方净土,一起学习技术,看来只有yunweibang订阅号了,还有运维帮线下技术沙龙,准备开始第二期了,大家一起期待一下。

     上面的内容中有我共鸣的地方那就是,有好的东西,好的技术文章和好的解决方法我们应该分享出来,被搜索引擎收录,然后帮助跟我们一样,学习linux开源技术和编程语言等技术的后来者,可以让他们走很多弯路,减少痛苦,这何乐而不为呢?我相信就行开源的一些技术一样,如果它不开源出来,源代码不开放,你根本就不会了解到它核心的思想,和优秀的地方,也不会促进大家一起共享代码,共同推动技术的发展。

       确实现在好多技术社区已经不活跃了,基本上就是搜索引擎搜索到一些旧的文章和问题,带来这些社区的一些访问。我想原因有如下几点:
       1.现在很多做技术的人都有自己的博客了,所以他们主动逛这种社区类型的网站概率小了。
        2.就是现在主流做技术的人员比较活跃的人群的年龄阶段已经是80后到93之间的群体了,而这些人都是比较喜欢新鲜事物和追求一些geek精神的人,以前的站点旧式的bbs的页面,已经不能让这些人很好的接受了,因为这些界面拿现在来说,就是落后式,就是比较loss。
        3.现在的技术者平常很少关系站点的好坏和分享的问题,因为现在互联网信息传播的途径太多了QQ,微信,Qzone,微博,社区等。他们不该如何选择了,所以他们干脆就不选择了,随波逐流,看到好的技术文章和分享就赞和分享,所以导致技术者们没有专一的习惯了,所以以前的一些技术社区都在衰败中了。

        "南非蜘蛛"在文中还提到了知乎,以说知乎我其实不得不吐槽一下。恨一个人肯定是有原因的,要不是以前太爱了被伤害了,要不就是被虐待了,当然我吐槽知乎也是有历史原因的。当初我也是发现像"南非蚂蚁"所说的问题,就是大家纯分享技术的动力越来越少了,变成了聊天,侃大山不管是qq群还是微信群,真正做技术分享和帮助的社区网站太少了。所以当初我就拿着我朋友"采菊篱下"的openskill.cn这个域名到知乎提问,问题的内容是"大家好,我和我朋友有个域名openskill.cn,然后希望做一个技术分享的社区,让大家可以看到有货的一个社区,做一个分享的社区,希望有愿意和我们一起弄的同学,联系qq:912xxxx" ,但是后来知乎就给我发来一封私信"说我发的信息是广告等垃圾信息" ,后来我就无意间回了一封私信"你们公司 什么意思啊 我这个提问 认为是广告等垃圾信息,我违反什么了?",但是没有下文了,到最后也就这样了。这就是我吐槽知乎的原因。所以以后我再也不上知乎,也不看知乎里面的信息,当然就像"南非蜘蛛"提到的"知乎这种问答社区也经常看到技术讨论,但是更多的是争吵和鄙视",因为知乎现在的运营已经形成了这种恶劣的情况,谁是什么ceo,什么cto,高级dba,高级什么莫莫。这不是一个技术分享社区应该有的现象,这就是知乎自认为所谓的价值存在的地方,你看我们网站这么多人用,有谁,这个那个,cto,ceo,什么的,把分享和开源的精神都扭曲了,所以我不喜欢知乎。经过知乎这件事情后我和我朋友"采菊篱下"就一起创建了现在这个技术文章分享和工作中遇到的错误和技术难题解决方法和思路的一个,技术问答和文章分享的网站AfewBug 分享动力。虽然现在没有什么用户和跟我们有共同爱好的人来做这件事情,但是我们会坚持的,因为我们是爱分享和爱开源的人。希望可以帮助到后来者,我们发布的这些文章和错误的解决方法和方案!

       最后我们回到话题"寻找一方净土,一起学习技术,看来只有yunweibang订阅号了,还有运维帮线下技术沙龙,准备开始第二期了,大家一起期待一下。"南非蜘蛛同学明显实在为自己的订阅号,做广告和宣传吗,我不想深入说其中的缘由,都在互联网我想大家都应该知道。但是我希望大家做的事情都是正能量,可以让大家受益的,而不是极少数的人受益。

        当然我写这篇文章有人也会说,你是不是也在做广告和拉用户量,然后让你们网站火起来啊。我想说的是,不是,但是相不相信就看你自己心里怎么判断了。因为我写这篇文章的目的是想告诉大家,真正好的东西,应该大家一起分享。还有就是我个人认为微信真心不是学习技术的一份净土,它可能是很好的营销和市场宣传的一个很好的渠道和途径。因为现在微信已经是很多公司、微商、自媒体、网站等,传播知名度的一个很好的工具。无可厚非,微信并没有错,它是成功的,正是因为它的作用它才有存在的价值。所以南非蜘蛛写净土只有yunweibang订阅号了,他并没有说错,因为这是微信的作用。

        这篇文章纯属自己心血来潮,都是个人观点,不过欢迎大家拍砖。 收起阅读 »

OpenSSL CVE-2015-1793:中间人攻击

本周初,OpenSSL发布了CVE-2015-1793的漏洞更新包: 这些更新包在7月9日发布,它们将用于修复一个“高危漏洞”。这些漏洞不会影响1.0.0或者 0.9.8版本。--->Forthcoming OpenSSL releases 漏洞细节及修补...
继续阅读 »
本周初,OpenSSL发布了CVE-2015-1793的漏洞更新包:


这些更新包在7月9日发布,它们将用于修复一个“高危漏洞”。这些漏洞不会影响1.0.0或者 0.9.8版本。--->Forthcoming OpenSSL releases


漏洞细节及修补补丁的具体方法将在下面给出:
openssl.png

高危漏洞补丁


该补丁修复了一个高危漏洞。由OpenSSL团队出版,详情如下:
在证书验证期间,OpenSSL(1.0.1n到1.0.2b版本)将试图寻找一个证书验证链,如果没有找到,那么OpenSSL又会试图寻找另一个证书验证链。但是在这个逻辑的实现中却存在着一个错误,这个错误将导致攻击者可以使用不受信任的征收绕过检查。比如 CA 标识。这使他们能够使用无效的证书充当证书验证链中的叶子证书,比如 CA 和 "issue"。 
----->OpenSSL Security Advisory [9 Jul 2015]


这种漏洞允许黑客进行“中间人”攻击,并且能让程序在看到无效和不受信任的证书时让应用程序把该无效证书当成有效的。基本上,它可以让没个人都能成为他们自己的证书颁发机构(Certificate Authority.CA)。
这个Bug已被提交到: aae41f8c54257d9fa6904d3a9aa09c5db6cefd0d.
o2.png

还提交到了:2aacec8f4a5ba1b365620a7b17fcce311ada93ad.
o3.png
该问题确实相当严重,这意味着又它又被修复了一次。
不幸中的万幸是,它只有限地影响部分OpenSSL版本:OpenSSL 1.0.2c,1.0.2b,1.0.1n ,1.0.1o。
受影响的版本和操作系统有哪些?
该漏洞似乎只存在于OpenSSL在2015年6月以后发布的版本中。这貌似让如Linux这一类的系统相对比较安全。因为他们已经有很久没有更新OpenSSL了。
Red Hat,CentOS和Ubuntu完全不会受此漏洞影响,因为在2015年6月没有发布针对这几个系统的版本。
正如Red Hat宣布的:
OpenSSL项目已发布一个重要漏洞补丁(CVE-2015-1793),该漏洞影响OpenSSL的1.0.1n,1.0.1o,1.0.2b及1.0.2c版本。
上面的那些版本只能用一个月,考虑到Red Hat对重要漏洞的修复和功能选择的谨密政策,OpenSSL没有搭载任意一个上述功能。
Red Hat无需做任何东西去修复或减轻该漏洞(CVE-2015-1793),因为Red Hat不受该影响。

OpenSSL 7月9日安全修复(CVE-2015-1793)。
只是为了安全起见,如果可用,请尽快检查并进行更新。特别是如果你有软件使用了最新的OpenSSL源代码或其它库。
如何打补丁
和往常的补丁一样(参考:heartbleed(https://ma.ttias.be/patch-against-the-heartbleed-openssl-bug-cve-2014-0160/), CVE-2015-0291) https://ma.ttias.be/openssl-cve-2015-0291-cve-2015-0286/) and CVE-2015-0286),修复一般需要两步,首先你得更新操作系统的各种库。
04.png

由于是“中间人”攻击,所以建议你重新所有服务或者应用程序连接到的SSL/TLS远程端点。如果有人试图改变你的远程端点的DNS并且把URL指向到自己的服务器,那么,你的程序可能依然会认为它是一个有效的的SSL/TLS流。
原文地址 收起阅读 »

OpenSSH <=6.8 X11版本安全BUG

OpenSSH
继续阅读 »
sshbug.jpg


OpenSSH <=6.8中存在一个安全问题,允许通过ssh-X连接客户端的恶意服务器连接到SSH客户端的X服务器,而不受X11的安全限制。


X验证:
    有客户端连接到X服务器时需要验证。验证可通过说明直接的验证信息(在实践中,它通常意味着要使用MIT-MAGIC-COOKIE-1,要求用户将一个验证“cookie”发送到服务器中)来完成,但也可通过间接方式完成——比如,对于本地连接来说,服务器可能会基于客户端的UID允许客户端进来。

有意思的是,X 服务器会回退到间接验证方式,即使客户端已经直接说明了无效的验证数据。
X11SECURITY:
    X11安全机制允许用户创建magic cookies。当这些cookie用于X服务器验证时,它会限制客户端的行为。(这些cookie会阻止客户端使用不安全的X扩展并阻止访问不受限于X11 SECURITY 限制的windows,但不会阻止访问另外一个受限于X11 SECURITY限制的客户端windows。)

            由于所有带有X11 SECURITY限制的magic cookies都有相应的超时规定,如果cookie在超时规定的时间内没有被使用,它就会被删除。如果能够成功验证的客户端能够间接尝试通过过期且带有X11 SECURITY限制的cookie直接验证,那么直接验证就会失败,而且X服务器就会在没有X11 SECURITY的情况下回到间接验证!
 
(不受信任的) X 转发:
   当SSH客户端连接到带有ssh-X的SSH服务器时,SSH服务器能够通过已有的且客户端转发至本地X服务器的SSH隧道创建信道。X验证的处理如下:

当连接至SSH服务器时,SSH客户端会在X服务器上注册一个使用期为ForwardX11Timeout(默认:20分钟)新的MIT magic cookie。这个cookie受限于X11 SECURITY限制。以下我将其称为“受限的cookie”。

当连接至SSH服务器时,SSH客户端会创建一个看起来像MIT magic cookie的“虚拟cookie(dummy cookie)”。它会将这个字符串发送给SSH服务器,而位于SSH服务器上的X客户端在通过SSH验证X服务器时必须发送这个虚拟cookie。以下是蹩脚的一些ASCII信息流:
assh.png
   这种方法的一个明显问题在于,如果在ForwardX11Timeout规定的时间内,不存在X客户端通过SSH隧道连接至X服务器的情况,那么服务器就会忘掉cookie。如果SSH客户端允许随后创建新连接,那么X服务器就不会识别出magic cookie,并且会使用通过unix域套接字连接的UID返回简介验证,给予X客户端不带X SECURITY 限制的访问权限。正因如此,超时过期后,ssh拒绝新的X11信道请求。
问题
准确地说,问题在于,ssh并不一定要在超时过期后阻拦对X服务器的新连接——而是必须阻拦X11的验证尝试。Cookie可能会在创建X服务器连接后、X客户端发送验证请求之前仍然过期。虽然连接创建之后通常直接跟着验证,但恶意攻击者可任意将其删除。攻击如下:

    []受害者(SSH客户端)与带有ssh-X的攻击者(SSH服务器)连接.[/][]攻击者等待19.5分钟.[/][]攻击者开启对SSH服务器的X11连接,SSH服务器要求在SSH连接上创建一个新的X11信道,SSH客户端连接至X服务器.[/][]攻击者等待1分钟,超时过期,X服务器忘记“受限的cookie”。SSH客户端不再允许新的X11信道.[/][]攻击者发送带有虚拟cookie的验证请求,SSH客户端发送带有“受限的cookie”的验证请求.[/][]攻击者与未受限于X SECURITY限制的X服务器互动.[/]

在实际操作中,可通过在调试器下及_xcb_get_auth_info启动一些X客户端的情况下创建一分钟的延时。等1分钟过后,让程序继续运行。
 
影响
   没有受限于X11限制的程序可以跟所有已打开的程序互动,就像这个程序就是你自己一样。例如,它能够访问所有你的所有公开终端windows并且使用XTEST扩展输入任意命令,这可能会允许SSH服务器完全攻陷任何与ssh-X连接的客户端。
例如,攻击者可以将任意内容发送给活跃的窗口,如:
bssh.png

修复方案:
   OpenSSH 6.9修复了这个问题,方法是:在SSH服务器请求一个新的X11信道时以及SSH服务器发送X11验证数据时检查超时过期。此外,由于“从一开始(off-by-one)”或时间倾斜在这里非常重要,因此MIT cookie的超时会增加一分钟,而ssh拒绝X11连接/验证尝试后超时不会发生变化。
原文地址 收起阅读 »

OpenSSL发布最新安全补丁解决高危漏洞

Openssl 7月9日发布了 OpenSSL 1.0.2 和OpenSSL 1.0.1 两个主线版本的更新,其中修复了一个高危安全问题(CVE-2015-1793)。漏洞危害: 特定版本的OpenSSL在证书校验的逻辑中存在安全漏洞,使得攻击...
继续阅读 »
opjj.jpg

Openssl 7月9日发布了 OpenSSL 1.0.2  和OpenSSL 1.0.1 两个主线版本的更新,其中修复了一个高危安全问题(CVE-2015-1793)。
漏洞危害:
特定版本的OpenSSL在证书校验的逻辑中存在安全漏洞,使得攻击者可以绕过对不可信证书的检查。
影响范围 :​

    []OpenSSL 1.0.2c [/]
    []OpenSSL 1.0.2b[/]
    []OpenSSL 1.0.1n[/]
    []OpenSSL 1.0.1o[/]
    []OpenSSL 0.9.8/1.0.0不受影响[/]

 
修复方案:
OpenSSL 1.0.2c/1.0.2b 的用户请升级到 1.0.2d

OpenSSL 1.0.1h/1.0.1o 的用户请升级到1.0.2p

前往http://www.openssl.org/ 下载相应版本自行编译升级。
该问题由Adam Langley/David Benjamin (Google/BoringSSL)于6月24日报告。
OpenSSL 安全公告:http://www.openssl.org/news/secadv_20150709.txt
原文地址 收起阅读 »

Elasticsearch 安装

因为ES是java语言编写的程序,所以安装Elasticsearch唯一的要求是安装官方新版的Java下载地址 64位系统java安装脚本如下:#!/usr/bin/env bash java_install () { rpm -qa | grep...
继续阅读 »
es_install.png

因为ES是java语言编写的程序,所以安装Elasticsearch唯一的要求是安装官方新版的Java下载地址
64位系统java安装脚本如下:
#!/usr/bin/env bash

java_install () {
rpm -qa | grep -i JDK;if [ $? -eq 0 ];then rpm -qa | grep -i JDK | xargs -n 1 -t rpm -e --nodeps;fi
os=$(uname -m)

if [ $os == "x86_64" ];then
cd /usr/local/src/
wget -c http://118.186.221.78:8080/jdk-7u51-linux-x64.gz (ip地址不是有效的,你换成你jdk下载地址就好)
tar zxf jdk-7u51-linux-x64.gz -C /usr/local/

sed -i 's@jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024@#jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024@g' /usr/local/jdk1.7.0_51/jre/lib/security/java.security
ls /usr/bin/java* > /dev/null 2>&1;

if [ $? -eq 0 ];then
ls /usr/bin/java* | xargs -n 1 -t rm -rf
else
ln -s /usr/local/jdk1.7.0_51/bin/java /usr/bin/java
ln -s /usr/local/jdk1.7.0_51/bin/javac /usr/bin/javac
ln -s /usr/local/jdk1.7.0_51/bin/javadoc /usr/bin/javadoc
ln -s /usr/local/jdk1.7.0_51/bin/javaws /usr/bin/javaws
fi

cd /usr/local/jdk1.7.0_51/
echo "export JAVA_HOME=/usr/local/jdk1.7.0_51/" >> /root/.bashrc
source /root/.bashrc
echo "export PATH=$JAVA_HOME/bin:$PATH" >> /root/.bashrc
echo "export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar" >> /root/.bashrc
source /root/.bashrc
echo "export JAVA_HOME=/usr/local/jdk1.7.0_51/" >> /etc/rc.local
fi

}
java_install
安装开始
你可以从 Downloads | Elasticsearch下载最新版本的Elasticsearch,进行安装:
curl -L -O “http://download.elasticsearch.org/PATH/TO/VERSION.zip”
unzip elasticsearch-$VERSION.zip
cd elasticsearch-$VERSION
Downloads | Elasticsearch 获得最新可用的版本号并填入URL中


在生产环境安装时,除了以上方法,你还可以使用Debian或者RPM安装包,地址在这里:downloads page,或者也可以使用官方提供的Puppet module或者Chef cookbook


安装Marvel
Marvel是Elasticsearch的管理和监控工具,在开发环境下免费使用。它包含了一个叫做Sense的交互式控制台,使用户方便的通过浏览器直接与Elasticsearch进行交互。
 
Elasticsearch线上文档中的很多示例代码都附带一个View in Sense的链接。点击进去,就会在Sense控制台打开相应的实例。安装Marvel不是必须的,但是它可以通过在你本地Elasticsearch集群中运行示例代码而增加与此书的互动性。
Marvel是一个插件,可在Elasticsearch目录中运行以下命令来下载和安装:
./bin/plugin -i elasticsearch/marvel/latest
你可能想要禁用监控,你可以通过以下命令关闭Marvel:
echo 'marvel.agent.enabled: false' >> ./config/elasticsearch.yml
运行Elasticsearch
Elasticsearch已经准备就绪,执行以下命令可在前台启动:
./bin/elasticsearch
如果想在后台以守护进程模式运行,添加-d参数。
 
打开另一个终端进行测试:
curl 'http://localhost:9200/?pretty'
你能看到以下返回信息:
{
"status": 200, //状态码
"name": "Shrunken Bones", //默认集群名称
"version": {
"number": "1.4.0", //ES版本号
"lucene_version": "4.10" //lucene版本号
},
"tagline": "You Know, for Search"
}
这说明你的ELasticsearch集群已经启动并且正常运行,接下来我们可以开始各种实验了。
 
集群和节点
[b]节点(node)[/b]是一个运行着的Elasticsearch实例。[b]集群(cluster)[/b]是一组具有相同cluster.name的节点集合,他们协同工作,共享数据并提供故障转移和扩展功能,当然一个节点也可以组成一个集群。

你最好找一个合适的名字来替代cluster.name的默认值,比如你自己的名字,这样可以防止一个新启动的节点加入到相同网络中的另一个同名的集群中。

你可以通过修改config/目录下的elasticsearch.yml文件,然后重启ELasticsearch来做到这一点。当Elasticsearch在前台运行,可以使用Ctrl-C快捷键终止,或者你可以调用shutdown API来关闭:


查看Marvel和Sense
如果你安装了Marvel(作为管理和监控的工具),就可以在浏览器里通过以下地址访问它:
http://localhost:9200/_plugin/marvel/

你可以在Marvel中通过点击dashboards,在下拉菜单中访问Sense开发者控制台,或者直接访问以下地址:
http://localhost:9200/_plugin/marvel/sense/ 收起阅读 »

Elasticsearch介绍

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。   但是,Lucene只是一个库。想要使用它,你必须使用J...
继续阅读 »
es.png

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。
 
但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。
 
Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
 
不过,Elasticsearch不仅仅是Lucene和全文搜索,我们还能这样去描述它:

    []分布式的实时文件存储,每个字段都被索引并可被搜索[/]
    []分布式的实时分析搜索引擎[/]
    []可以扩展到上百台服务器,处理PB级结构化或非结构化数据[/]

而且,所有的这些功能被集成到一个服务里面,你的应用可以通过简单的RESTful API、各种语言的客户端甚至命令行与之交互。
 
上手Elasticsearch非常容易。它提供了许多合理的缺省值,并对初学者隐藏了复杂的搜索引擎理论。安装即可使用,只需很少的学习既可在生产环境中使用。
 
Elasticsearch在Apache 2 license下许可使用,可以免费下载、使用和修改。
 
随着你对Elasticsearch的理解加深,你可以根据不同的问题领域定制Elasticsearch的高级特性,这一切都是可配置的,并且配置非常灵活。
 
ES诞生模糊记忆:
多年前,一个叫做Shay Banon的刚结婚不久的失业开发者,由于妻子要去伦敦学习厨师,他便跟着也去了。在他找工作的过程中,为了给妻子构建一个食谱的搜索引擎,他开始构建一个早期版本的Lucene。

直接基于Lucene工作会比较困难,所以Shay开始抽象Lucene代码以便Java程序员可以在应用中添加搜索功能。他发布了他的第一个开源项目,叫做“Compass”。

后来Shay找到一份工作,这份工作处在高性能和内存数据网格的分布式环境中,因此高性能的、实时的、分布式的搜索引擎也是理所当然需要的。然后他决定重写Compass库使其成为一个独立的服务叫做Elasticsearch。

第一个公开版本出现在2010年2月,在那之后Elasticsearch已经成为Github上最受欢迎的项目之一,代码贡献者超过300人。一家主营Elasticsearch的公司就此成立,他们一边提供商业支持一边开发新功能,不过Elasticsearch将永远开源且对所有人可用。

Shay的妻子依旧等待着她的食谱搜索…… 收起阅读 »

未披露的0day高危漏洞,再一次心脏滴血OpenSSl

OpenSSL官方发布漏洞预警,提醒系统管理员做好OpenSSL的升级准备。最新版本OpenSSL将于7月9日(本周四)发布,修复了一个未经披露的高危漏洞。不少安全专家推测,这个高危漏洞将可能是另一个心脏滴血 神秘的高危0day漏洞 OpenSSL是...
继续阅读 »
afw.png

OpenSSL官方发布漏洞预警,提醒系统管理员做好OpenSSL的升级准备。最新版本OpenSSL将于7月9日(本周四)发布,修复了一个未经披露的高危漏洞。不少安全专家推测,这个高危漏洞将可能是另一个心脏滴血
神秘的高危0day漏洞
OpenSSL是一个广泛使用的开源软件库,它使用SSL和TLS为大多数网站提供加密的互联网连接。

OpenSSL项目团队在本周一宣布,即将发布的OpenSSL加密库新版本1.0.2d和1.0.1p中解决了一个被定位于“高危”的安全漏洞。

关于这个神秘的安全漏洞,除了知道它并不影响1.0.0或0.9.8版本之外,目前还没有更详细的消息。在前天公开的一封邮件列表中,开发者Mark J Cox陈述道:
“OpenSSL项目团队宣布即将发布OpenSSL新版本1.0.2d和1.0.1p,这两个新版本将于7月9日发布。值得注意的是,这两个新版本中都修复了一个安全等级评定为“高危”的漏洞。不过,这个漏洞并不影响1.0.0或0.9.8版本。”
OpenSSL官方在发布新版本前发出预警,很可能是为了防止在更新补丁发布给大众之前,黑客利用该漏洞进行攻击。
不少安全专家推测,这个高危漏洞将可能是另一个心脏滴血(Heartbleed)漏洞或POODLE漏洞,而这两者曾被认为是最糟糕的TLS/SSL漏洞,直到今天人们认为它们仍然在影响互联网上的网站。
 
OpenSSL高危漏洞回顾
心脏滴血漏洞:该漏洞去年4月份被发现,它存在于OpenSSL早期版本中,允许黑客读取受害者加密数据的敏感内容,包括信用卡详细信息,甚至能够窃取网络服务器或客户端软件的加密SSL密钥。

POODLE漏洞:几个月后,在古老但广泛应用的SSL 3.0加密协议中发现了另一个被称为POODLE(Padding Oracle On Downgraded Legacy Encryption)的严重漏洞,该漏洞允许攻击者解密加密连接的内容。
 
OpenSSL在今年3月份的一次更新中修复了一批高严重性的漏洞,其中包括拒绝服务漏洞(CVE-2015-0291),它允许攻击者攻击在线服务并使其崩溃;此外还有FREAK漏洞(CVE-2015-0204),它允许攻击者迫使客户端使用弱加密方式。
 
转载出自 收起阅读 »

Libvirt的三种CPU配置模式

Kvm
CPU配置模式可以有以下几种模式1. custom模式 <cpu mode='custom' match='exact'> <modelfallback='allow'>kvm64</model> ... ...
继续阅读 »

CPU配置模式可以有以下几种模式

1. custom模式


<cpu mode='custom' match='exact'>
<modelfallback='allow'>kvm64</model>
...
<featurepolicy='require' name='monitor'/>
</cpu>

2. host-model 模式
根据物理CPU的特性,选择一个最靠近的标准CPU型号,如果没有指定CPU模式,默认也是使用这种模式,xml配置文件为:

<cpu mode='host-model' />

3. host-passthrough 模式
直接将物理CPU 暴露给虚拟机使用,在虚拟机上完全可以看到的就是物理CPU的型号,xml配置文件为:

<cpu mode='host-passthrough'/>

使用host-model看到的VCPU:


processor       : 3
vendor_id : GenuineIntel
cpu family : 6
model : 44
model name : WestmereE56xx/L56xx/X56xx (Nehalem-C)
...

使用host-passthrough看到的VCPU:


processor       : 3
vendor_id : GenuineIntel
cpu family : 6
model : 44
model name : Intel(R)Xeon(R) CPU X5650 @ 2.67GHz

可以看到,使用host-model模式,Libvir会根据物理CPU的型号,从规定的CPU中选择一种最接近的CPU型号,而使用host-passthrough模式直接看到的就物理CPU的型号。

收起阅读 »

Linux系统安装后的基础优化-基于CentOS(5.8/6.4)

在运维工作中,我们发现Linux系统安装之后并不能立即投入生产环境使用,往往需要先经过我们运维人员的优化才行。 下面我就为大家简单讲解几点关于Linux系统安装后的基础优化操作。 注意:本次优化都是基于CentOS(5.8/6.4)。关于5.8和6.4两者优...
继续阅读 »

在运维工作中,我们发现Linux系统安装之后并不能立即投入生产环境使用,往往需要先经过我们运维人员的优化才行。


下面我就为大家简单讲解几点关于Linux系统安装后的基础优化操作。



注意:本次优化都是基于CentOS(5.8/6.4)。关于5.8和6.4两者优化时的小区别,我会在文中提及的。



优化条目:


修改ip地址、网关、主机名、DNS等
关闭selinux,清空iptables
添加普通用户并进行sudo授权管理
更新yum源及必要软件安装
定时自动更新服务器时间
精简开机自启动服务
定时自动清理/var/spool/clientmqueue/目录垃圾文件,防止inode节点被占满
变更默认的ssh服务端口,禁止root用户远程连接
锁定关键文件系统
调整文件描述符大小
调整字符集,使其支持中文
去除系统及内核版本登录前的屏幕显示
内核参数优化

1、修改ip地址、网关、主机名、DNS等

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 #网卡名字
BOOTPROTO=static #静态IP地址获取状态 如:DHCP表示自动获取IP地址
IPADDR=192.168.1.113 #IP地址
NETMASK=255.255.255.0 #子网掩码
ONBOOT=yes #引导时是否激活
GATEWAY=192.168.1.1

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.113
NETMASK=255.255.255.0
ONBOOT=yes
GATEWAY=192.168.1.1

[root@localhost ~]# vi /etc/sysconfig/network
HOSTNAME=c64 #修改主机名,重启生效
GATEWAY=192.168.1.1 #修改默认网关,如果上面eth0里面不配置网关的话,默认就使用这里的网关了。

[root@localhost ~]# cat /etc/sysconfig/network
HOSTNAME=c64
GATEWAY=192.168.1.1
我们也可以用 hostname c64 来临时修改主机名,重新登录生效

[root@localhost ~]# vi /etc/resolv.conf #修改DNS信息
nameserver 114.114.114.114
nameserver 8.8.8.8
[root@localhost ~]# cat /etc/resolv.conf #查看修改后的DNS信息
nameserver 114.114.114.114
nameserver 202.106.0.20

[root@localhost ~]# service network restart #重启网卡,生效
重启网卡,也可以用下面的命令
[root@localhost ~]# /etc/init.d/network restart

2、关闭selinux,清空iptables

关闭selinux


[root@c64 ~]# sed –i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config     #修改配置文件则永久生效,但是必须要重启系统。
[root@c64 ~]# grep SELINUX=disabled /etc/selinux/config
SELINUX=disabled #查看更改后的结果
[root@c64 ~]# setenforce 0 #临时生效命令
[root@c64 ~]# getenforce #查看selinux当前状态
Permissive

清空iptables


[root@c64 ~]# iptables –F     #清理防火墙规则
[root@c64 ~]# iptables –L #查看防火墙规则
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@c64 ~]#/etc/init.d/iptables save #保存防火墙配置信息
[root@c64 ~]#service iptables off #开机不自动启动

3、添加普通用户并进行sudo授权管理

[root@c64 ~]# useradd sunsky
[root@c64 ~]# echo "123456"|passwd --stdin sunsky && history –c
[root@c64 ~]# visudo
在root ALL=(ALL) ALL 此行下,添加如下内容
sunsky ALL=(ALL) ALL

4、更新yum源及必要软件安装

yum安装软件,默认获取rpm包的途径从国外官方源,改成国内的源。


国内较快的两个站点:搜狐镜像站点网易镜像站点
法1:自己配置好安装源配置文件,然后上传到linux。

法2:使用镜像站点配置好的yum安装源配置文件


[root@c64 ~]# cd /etc/yum.repos.d/
[root@c64 yum.repos.d]# /bin/mv CentOS-Base.repo CentOS-Base.repo.bak
[root@c64 yum.repos.d]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

接下来执行如下命令,检测yum是否正常


[root@c64 yum.repos.d]# yum clean all  #清空yum缓存
[root@c64 yum.repos.d]# yum makecache #建立yum缓存

然后使用如下命令将系统更新到最新


[root@c64 yum.repos.d]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*       #导入签名KEY到RPM
[root@c64 yum.repos.d]# yum upgrade -y #更新系统内核到最新

接下来就要安装几个必要的软件了


[root@c64 yum.repos.d]# yum install lrzsz ntpdate sysstat -y

lrzsz是一个上传下载的软件
ntpdate是用来与远程时间服务器进行时间更新的软件
sysstat是用来检测系统性能及效率的工具


5、定时自动更新服务器时间


提示:CentOS 6.4的时间同步命令路径不一样, 6是/usr/sbin/ntpdate, 5是/sbin/ntpdate



扩展:在机器数量少时,以上定时任务同步时间就可以了。如果机器数量大时,可以在网内另外部署一台时间同步服务器NTP Server。此处仅提及,不做部署。
时间同步服务器架构图:

6、精简开机自启动服务

刚装完操作系统可以只保留crond,network,syslog,sshd这四个服务。(Centos6.4为rsyslog)


[root@c64 ~]# for sun in `chkconfig --list|grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $sun off;done
[root@c64 ~]# for sun in crond rsyslog sshd network;do chkconfig --level 3 $sun on;done
[root@c64 ~]# chkconfig --list|grep 3:on
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

7、定时自动清理/var/spool/clientmqueue/目录垃圾文件,防止inode节点被占满

本优化点,在6.4上可以忽略不需要操作即可!


[root@c64 ~]# mkdir /server/scripts -p
[root@c64 ~]# vi /server/scripts/spool_clean.sh
#!/bin/sh
find /var/spool/clientmqueue/ -type f -mtime +30|xargs rm -f

然后将其加入到crontab定时任务中


[root@c64 ~]# echo '/30    * /bin/sh /server/scripts/spool_clean.sh >/dev/null 2>&1' >>/var/spool/cron/root

8、变更默认的ssh服务端口,禁止root用户远程连接

[root@c64 ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
[root@c64 ~]# vim /etc/ssh/sshd_config
Port 52113 #ssh连接默认的端口
PermitRootLogin no #root用户黑客都知道,禁止它远程登录
PermitEmptyPasswords no #禁止空密码登录
UseDNS no #不使用DNS
[root@c64 ~]# /etc/init.d/sshd reload #从新加载配置
[root@c64 ~]# netstat -lnt #查看端口信息
[root@c64 ~]# lsof -i tcp:52113

9、锁定关键文件系统

[root@c64 ~]# chattr +i /etc/passwd
[root@c64 ~]# chattr +i /etc/inittab
[root@c64 ~]# chattr +i /etc/group
[root@c64 ~]# chattr +i /etc/shadow
[root@c64 ~]# chattr +i /etc/gshadow

使用chattr命令后,为了安全我们需要将其改名


[root@c64 ~]# /bin/mv /usr/bin/chattr /usr/bin/任意名称

10、调整文件描述符大小

[root@localhost ~]# ulimit –n        #查看文件描述符大小
1024
[root@localhost ~]# echo '* - nofile 65535' >> /etc/security/limits.conf

配置完成后,重新登录即可查看。


提示:也可以把ulimit -SHn 65535命令加入到/etc/rc.local,然后每次重启生效


[root@c64 ~]# cat >>/etc/rc.local<<EOF
#open files
ulimit -HSn 65535
#stack size
ulimit -s 65535
EOF

扩展:文件描述符



文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于Unix、Linux这样的操作系统。


习惯上,标准输入(standard input)的文件描述符是 0,标准输出(standard output)是 1,标准错误(standard error)是 2。尽管这种习惯并非Unix内核的特性,但是因为一些 shell 和很多应用程序都使用这种习惯,因此,如果内核不遵循这种习惯的话,很多应用程序将不能使用。



11、调整字符集,使其支持中文

sed -i 's#LANG="en_US.UTF-8"#LANG="zh_CN.GB18030"#' /etc/sysconfig/i18n
source /etc/sysconfig/i18n

扩展:什么是字符集?



简单的说就是一套文字符号及其编码。常用的字符集有:
GBK 定长双字节不是国际标准,支持系统不少
UTF-8 非定长 1-4字节广泛支持,MYSQL也使用UTF-8


12、去除系统及内核版本登录前的屏幕显示

[root@c64 ~]# >/etc/redhat-release
[root@c64 ~]# >/etc/issue

13、内核参数优化

说明:本优化适合apache,nginx,squid多种等web应用,特殊的业务也可能需要略作调整。


[root@c64 ~]# vi /etc/sysctl.conf
#by sun in 20131001
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time =600
net.ipv4.ip_local_port_range = 4000 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
#一下参数是对iptables防火墙的优化,防火墙不开会有提示,可以忽略不理。
net.ipv4.ip_conntrack_max = 25000000
net.ipv4.netfilter.ip_conntrack_max = 25000000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
[root@localhost ~]# sysctl –p #使配置文件生效

提示:由于CentOS6.X系统中的模块名不是ip_conntrack,而是nf_conntrack,所以在/etc/sysctl.conf优化时,需要把net.ipv4.netfilter.ip_conntrack_max 这种老的参数,改成net.netfilter.nf_conntrack_max这样才可以。



即对防火墙的优化,在5.8上是:


net.ipv4.ip_conntrack_max = 25000000
net.ipv4.netfilter.ip_conntrack_max = 25000000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120

在6.4上是


net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_tcp_timeout_established = 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
  1. 5.8版本:
    error: "net.ipv4.ip_conntrack_max" is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_max" is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_established" is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait" is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait" is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait" is an unknown key
    这个错误可能是你的防火墙没有开启或者自动处理可载入的模块ip_conntrack没有自动载入,解决办法有二,一是开启防火墙,二是自动处理开载入的模块ip_conntrack
    modprobe ip_conntrack
    echo "modprobe ip_conntrack" >> /etc/rc.local
  2. 6.4版本上
    error: "net.nf_conntrack_max" is an unknown key
    error: "net.netfilter.nf_conntrack_max" is an unknown key
    error: "net.netfilter.nf_conntrack_tcp_timeout_established" is an unknown key
    error: "net.netfilter.nf_conntrack_tcp_timeout_time_wait" is an unknown key
    error: "net.netfilter.nf_conntrack_tcp_timeout_close_wait" is an unknown key
    error: "net.netfilter.nf_conntrack_tcp_timeout_fin_wait" is an unknown key
    这个错误可能是你的防火墙没有开启或者自动处理可载入的模块ip_conntrack没有自动载入,解决办法有二,一是开启防火墙,二是自动处理开载入的模块ip_conntrack
    modprobe nf_conntrack
    echo "modprobe nf_conntrack" >> /etc/rc.local
  3. 6.4版本上
    error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
    error: "net.bridge.bridge-nf-call-iptables" is an unknown key
    error: "net.bridge.bridge-nf-call-arptables" is an unknown key
    这个错误是由于自动处理可载入的模块bridge没有自动载入,解决办法是自动处理开载入的模块ip_conntrack
    modprobe bridge
    echo "modprobe bridge" >> /etc/rc.local
收起阅读 »