更换服务器对lnmp、eac、xc和mc的折腾记录

2013-02-13 • Linux 笔记 • #php #lnmp #xcache #memcache #eaccelerator

以前在HelloHost的凤凰城的空间访问速度越来越不理想了,跑个Discuz都卡掉渣的。空间也略神奇,发邮件时不时要抽一下两下的。偶尔可以sendmail,有时候只能smtp。UC也时不时要抽一下,不过总体来说还是物有所值的,对速度要求不高的,或者有CDN的可以买来试试看。不过我既没有CDN,也没法忍受那样的速度于是就想着换个地方来的。和ivmm(via 米饭维谷)交流了一阵子。后来他推荐给我LocVPS(via LocVPS|无推介链接)家的VPS,说是洛杉矶机房,和大陆线路是直连的。于是回来以后就买下了LocVPS的Xen 512M方案,使用军哥的LNMP自动脚本(via LNMP一键安装包)搭建的LNMP环境。

环境搭建起来以后要考虑的主要还是安全问题。默认的php.ini禁止了一些函数,比如fsocksopen之类的,我给解开了;然后有一些函数没有禁用,比如popen(进程管理,容易被webshell利用执行命令)等,我给禁用了。我的php.ini中的disable\_functions大概是这个样子的(为了看清楚,做了换行处理):

disable\_functions = passthru,exec,system,chroot,chgrp,chown,
shell\_exec,proc\_open,proc\_get\_status,ini\_alter,ini\_set,
ini\_restore,dl,openlog,syslog,readlink,symlink,popepassthru,
stream\_socket\_server,passthru,popen

而另外一些“公认”比较危险的函数,比如opendir,scandir之类的函数,由于有一些特殊需要,就没有禁止了。这样设定起来的参数相对而言比较宽松。

然后就是跨站的问题了。在前一篇文章中提到的LNMP防跨站方法(via LNMP下防跨站、跨目录安全设置,仅支持PHP 5.3.3以上版本)是相当有用的,尤其是在enable_dl=Off和dl被加入disable_functions的时候,要攻破的几率就不很大了。

我对上面文章的一些设定做了一些小小的改动。默认情况下php.ini里是没有限定open_base_dir的。按照上面的方法设定的话,有可能会有某些极端情况(手动编辑vhost让docroot改到其它目录下)导致对目录的open_base_dir限定无效,还在php.ini的[PHP]节加入了这样的设定使它应用到默认的情况下:

open\_basedir = ./:/tmp/

这样在添加了虚拟主机或者修改了路径以后,不会带来潜在的安全隐患。这样处理了以后安全性应该是比原来好一些了。上传了一个phpspy做测试,还算符合要求。

最后要考虑的还有效率问题。说道效率问题就想到了eaccelerator,xcache和memcache(当然还有APC等)。我的习惯是安装eac和mc。但是经过ivmm介绍后,我决定把eac抛弃转而使用xc作为编译缓存,数据缓存保留xcache和memcache两种方式(有的程序只支持其一)。可是不管我怎么折腾,eac,xc,mc还有pdo\_mysql都一直没有办法安装成功。正在无可奈何之际留意到php-fpm重启时的提示消息:

Starting php-fpm Zend Optimizer requires Zend Engine API version 220060519.
The Zend Engine API version 220090626 which is installed, is newer.
Contact Zend Technologies at http://www.zend.com/ for a later version of Zend Optimizer.

本来一直以为这是和php -v一样输出的一些版本号,没有在意。仔细一看才发现这是一条报错消息。到php.ini里查看,才发现因为从php5.2升级php5.3.21后恢复了备份的php.ini,导致Zend Optimizer所加载的还是老版本的ZendOptimizer.so,而不是php5.3.x应该加载的ZendGuardLoader.so(在php5.3之后,Zend Optimizer升级改名为了Zend Guard Loader并且不完全向下兼容)。找到问题根源以后就好办了,把php.ini中的Zend改为正确的名字,重新加入mc和xc的配置文件,重启php-fpm,打开phpinfo,一切正常。上传xcache的管理文件查看,发现命中率还是很高的,可见Xcache还是比较有效的。

连接ssh出现Permission denied之一解

2012-10-05 • Linux 笔记 • #linux #ssh #/dev/tty

问题描述:

在一台centos 6.0的vps上使用ssh无论连接什么样的主机都连接不上,提示信息为:

Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

排除了防火墙等原因,百思不得其解。后来在man ssh里面发现了一个参数-v

     -v      Verbose mode.  Causes ssh to print debugging messages about its
             progress.  This is helpful in debugging connection, authentica‐
             tion, and configuration problems.  Multiple -v options increase
             the verbosity.  The maximum is 3.

于是使用ssh -v localhost试图连接。在debug信息里面发现一条很奇怪的信息,如下:

debug1: Next authentication method: password
debug1: read_passphrase: can't open /dev/tty: No such file or directory

尝试使用password模式时,没办法调用read_passphrase来获取密码。提示/dev/tty这个文件缺失。

于是在本地的cygwin(我是win环境)下用ls -l /dev/tty得到以下信息:

crw-rw-rw- 1 oott123 None 5, 0 十月  5 14:53 /dev/tty

使用mknod /dev/tty c 5 0来创建一个新的设备文件,故障解除。

后来##Orz的atmouse发现了这个页面,和我遇到的问题一模一样:【这里】,解决方式也是一样的。

友情链接