分类目录归档:服务器

安全问题还是不容忽视的

之前发生了两个事情,让我觉得有些怕。

第一个事情是上游供应商Hostigation那边坏硬盘,先是说节点挂了,但是数据没有丢失。后面又变成说Raid里面同一个组有两块盘都坏了,所以全部数据丢失,只给你重新开一台VPS,没有赔偿,甚至道歉都没有,去翻看一下TOS果然是自己要为自己的数据负责的。我在他家有两台VPS,还好重要的一台不在那个节点,挂的是我那个拿来实验的一台,万幸。

第二个事情就是SolusVM爆出注入漏洞,这个事情弄得非常蛋疼,漏洞危害程度非常高,Ramnode都因此被人拖库了,还丢了很多客户数据。这是一个开源的服务器控制面板,绝大部分OpenVZ的提供商还有很多其他类型VPS提供商都用这个东西,至少我买过的机器里面只有两家是自己写一个比较鸡肋的面板,大部分都用这个。然后我现在的两个VPS供应商幸好还是没受影响,其中一个到今天还没恢复SolusVM面板的访问。

便宜的东西就是有便宜的东西的坏处,对于我这种长期刷LowEndBox找供应商的人,我用得起的机器都是7刀每个月以下(虽然买了很多台),这类型平价VPS一般都是无管理型,或者说自己管理,不是上游的问题服务商基本不会管你,带管理的套餐多付个25刀左右一个月就有人理你了(高昂的人力成本,硬件相对很便宜)。有的还好一点供应商附送个central备份,但也是手工操作的,没备份就死了。实际上我用的基本上都是完全没有备份的。服务商不提供,我自己也没弄。

但是我知道,数据是无价的,没备份就跟坐车不系安全带一样,你可能一辈子都不出事,但是出事的时候势必都很惨。所以昨天正好LEB上面出来一个Backupsy的备份VPS优惠,我立刻就想出手了,5刀一个月的512 kvm(没用过kvm,我其他机器都是OpenVZ,因为它够便宜),还不算很贵(但是中移动收我30月租我就丫丫丫的骂贵),主打是250G大硬盘,Raid50,。为了防止冲动消费所以我请示了一下后院某人,理解万岁,在我说完购买理由之后她回我”你喜欢就去做吧”,莫名感动。

看了很多文章怎么倒数据库的数据出来啊,怎么rsync啊,怎么增量备份等等,然后就动刀登上久未管理的1号服务器。以前给艳遇配服务器的时候他曾经跟我说你要注意算上那个运维的成本,我也知道。但是一般我这种小机器小需求,长时间load 0 0 0的,经常只是初装那会一顿折腾,折腾好基本就没什么事情了,也不会摊上什么大事,但昨天好像出了点问题。

我登入1号服服务器之后随手看了一下进程,发现有好几个sendmail的进程,而且本地的root用户里面有几百兆的邮件,去查sendmail的日志发现尼玛呀都是垃圾邮件。然后去查下sendmail反垃圾邮件那档事情,大量文章都提到的基本有一点就是不要open relay,就是不要让你的sendmail为匿名的公众转发邮件,其实sendmail后期的版本基本上都关了这个设置的,基本都只能从本机发出去,外部来的邮件不做转发。我重启过sendmail服务,我清空过邮件队列,但是很快又有一堆垃圾邮件进来。我当时还傻乎乎的想去监视一下外网谁在连我的25端口,netstat过几次之后到时傻傻的没看到sendmail只监听了localhost的25端口,没有监听公网,这么说邮件必然是内部发出来的。

内部除了php的环境也基本没什么东西啊,当时在想是不是有人写了发垃圾邮件的脚本,于是找了一个sendmail wrapper的方案,简单的来说就是自己写一个脚本来wrap sendmail,在里面做记录,包括发的什么邮件标题、正文、发到哪里等、还有重要的一个就是env的信息,可以知道是从哪里(工作目录)调用的sendmail,写好这个脚本还要在php.ini里面设置哈。我tail下输出日志终于发现了邮件的源头,居然是来自艳遇的博客(wordpress)的官方主题目录,隐藏的够深的,不过那个目录只有两个文件,有一个help.php看文件名就觉得不对,然后这货居然有执行权限我吓尿了。

打开这个文件略微分析了一下,首先这个文件是混淆过的,非常不好看,但是基本能够看到跟发spam的关系,这个脚本竟然是接收post信息然后发邮件的,还有什么后门我没有详细分析。当时我看这个文件修改时间是3天前,于是我用find全盘查找最近五天修改过的文件,一大堆,但是一点一点排除之后也基本只有这一个有问题的东西。然后去查apache的日志,大片的help.php访问记录,当时我在想必然有个开始,必然是上传或者其他什么写入方式弄好这个后门,再去利用,就想找第一次的访问再看看那之前发生了什么,一找又吓尿了,第一是这个记录条数有17万多,发了多少垃圾邮件啊你妹,哭了。第二是这个文件首次post的记录居然在半个月以前,但是这个文件的修改时间是3天前哦,意味着这个脚本还被更新过或者修改过,倒吸一口凉气。至于访问这个后门的ip,很多,遍布全球,查了5个都不重样的,马来西亚,泰国,荷兰,以色列,斯洛伐克(ip138的数据)。

封了这个东西之后开始全盘找问题,发现问题还真不少,用简单的grep搜索看到好多一句话后门的eval $_post一类的东西,这里插播一个知识,很多人说要禁用eval函数,其实用disable_function是禁不了eval的,因为这不是函数而是一种语法结构,而且还挖到不少是模板系统类的在用eval,正常使用的eval本身问题不大,问题是用eva来执行l一些其他的危险的函数。

再去检查一下发现我的php配置真的是很不安全的说,根本不像一个合格的生产环境,没有disable_function,error也直接输出来,后面一怒之下升级了php版本,打上suhosin,做好应该做的安全设置,其实原来的安全配置也不是一点都没有,php有open_basedir,所以除了艳遇的站其他站都没有受影响,另外服务器是公钥加密登陆的,禁止使用密码登陆。所以服务器这个层次上面倒是没有什么入侵的问题。

晚上一直折腾弄得很夜,显示吧备份弄好了,弄了rsync等还有配套的脚本,然后用各种方法去找客户的网站里面都有哪些后门,这个工作一直弄到今天我才明白了一个道理,然后放弃了。那就是管理,你下面这么多用户这么多网站,你不能保证他们的代码都不出问题,就像一个郭嘉,林子这么大你不能去保证没有坏鸟,你要保证的是就算有人故意干坏事也不能或者尽量少的影响其他人,影响大局。所以我还是专心调教好服务器的安全配置好了,艳遇你的网站见鬼去吧……虽然你说一手把它关掉就行,但是我喜欢折腾寻根问底。而且你都不搞清楚发生了什么事情,难保还原之后问题就不存在了。

白天还折腾了gitolite和owncloud,很有成就感(我是不是又把业务系统弄进备份环境了……),某人说喜欢看我做我喜欢做的事情(拗口),我自己也喜欢看我自己做我自己喜欢做的事情啊。倒是我的复习周啊,一天一天溜走,大家都在复习,我却在这瞎折腾(某人说这是我的天性),浪费时间,罪过罪过。昨天看到一个马斯洛需求的图,哈哈Internet是最底层的需求,这是在说我咩。

Apache整合SVN的注意事项

今天下午,我想在自己的服务器上面架设SVN服务器,采用的是与Apache结合的方案,简单地通过htpasswd创建验证文件验证用户身份,可是这么简单的一个东西居然让我弄了好久好久不成功,服务器平台是CentOS5.6,主要参考文章有下面这一些

CentOS官方维基:http://wiki.centos.org/HowTos/Subversion

http://www.if-not-true-then-false.com/2010/install-svn-subversion-server-on-fedora-centos-red-hat-rhel/

为了强化我的记忆我这里也自己再简单描述一遍

1.安装mod_dav_svn,subversion这两个软件包
2.往apache配置文件挂入subversion的配置文件
3.通过htpasswd创建用户身份验证文件
4.通过svnadmin建立代码仓库

大部分教程都只写了这四步,然而问题产生了。

第一点,服务器的web套件我采用的是军哥的lnmpa套件,这个套件的apache安装位置为/usr/local/apache

然而在安装subversion的时候我一个不小心让它连带升级了httpd,结果不仅覆盖了我原有的配置,而且让我好长一段时间在第二步:往apache配置文件挂入subversion配置这里错误的将配置文件挂在了/etc/httpd那个apache里面,而后来我又重新编译了lnmp原有版本httpd并且恢复了配置。这个明显的导致了subversion配置没有被读取到,所以我测试访问的时候一直出现403错误。后来一次不经意的晃神,我在403页面发现输出的服务器信息没有dav和svn的信息,我才意识到我的apache路径不是这个。

第二点,上面说了由于apache被更新等问题,结果那个mod_dav_svn模块也被装到了/etc/httpd/modules里面去了,这个倒简单,直接复制回来正确目录就好了,然而模块放好配置挂好之后,重启httpd发现出现undefined symbol: dav_register_provider报错,而再经过搜索,原来要启用dav模块,apache的编译参数里面还要有–enable-dav,而看了下目前服务器上apache就是没有启用这一项,所以需要重新编译apache。

经历了这些之后,apache+svn的环境总算是搭起来了,后续还应该注意设置用户的权限。