首页 > 服务器配置 > 博客迁移到Linux主机小记

博客迁移到Linux主机小记

2014年8月12日 发表评论 阅读评论

之前博客是存放在SAE上的,而由于近段时间SAE问题较多,而且由于SAE对访问量的限制,空间读写的限制,都导致WordPress的诸多不便(升级功能不能用,在线安装插件,安装主题不能用)所以一狠心,买了一台VPS,把博客迁移到该VPS了,
VPS是Linode的10美刀/月的主机,IP为日本的,25G SSD空间,1 Core,1G RAM,Debian 7,月流量2TB,已经够我用了
域名A记录到IP,使用环境为典型的LAMP,下面大概记一下LAMP环境的配置,也算是为自己日后留个笔记吧
首先安装环境所需的软件包和相应模块

apt-get install apache2 mysql-server php5 php5-mysql

在安装的过程中会出现设置mysql的root密码部分,先暂时直接回车跳过,随后设置

配置apache2

cd /etc/apache2/
ls -l
total 84
-rw-r--r-- 1 root root  9668 Aug  6 16:02 apache2.conf
-rw-r--r-- 1 root root  9640 Aug  6 12:14 apache2.conf.bak
drwxr-xr-x 2 root root  4096 Aug  6 12:13 conf.d
-rw-r--r-- 1 root root  1465 Jul 23 20:56 envvars
-rw-r--r-- 1 root root 31063 May 25 15:34 magic
drwxr-xr-x 2 root root  4096 Aug  6 12:13 mods-available
drwxr-xr-x 2 root root  4096 Aug  6 16:59 mods-enabled
-rw-r--r-- 1 root root   749 Aug  6 14:10 ports.conf
drwxr-xr-x 2 root root  4096 Aug  9 15:19 sites-available
drwxr-xr-x 2 root root  4096 Aug  9 13:06 sites-enabled

在该目录下apache2.conf为主配置文件,mods-enabled为模块配置文件夹(内部软连接到mods-available),一般使用a2enmod使用就好,不用在这里修改,sites-enabled为网站虚拟主机设置文件夹(内部软连接到sites-available),一般需要配置的地方主要为sites-enabled目录里,其他的则无须过多考虑,
打开apache2.conf,搜索MaxKeepAliveRequests,去掉注释 ,修改其后数值为1000(最大连接数设置为1000),其他的无需过多设置,
进入sites-available,把默认的default复制几份,让每一个配置文件(虚拟主机)对应一个网站,便于管理,默认的default内容

<VirtualHost *:80>
    ServerAdmin webmaster@l1n3.net
    ServerName blog.l1n3.net
    DocumentRoot /var/www/
    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory /var/www/>
        Options -Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

需要修改的几个地方:
DocumentRoot — 表示该虚拟主机使用的根目录的绝对路径,例如:DocumentRoot /var/www
AllowOverride — None改为All,意为允许使用.htaccess来重写URL
ServerName — 该网站的域名,如不指定则默认为IP打开的那个网址,例如:
ErrorLog — 错误日志的存放地,例如:
CustomLog — 访问日志的存放地,例如:
虚拟目录中
AllowOverride — None改为All,意为允许使用.htaccess来重写URL
Options — Indexes FollowSymLinks MultiViews 改为Options -Indexes FollowSymLinks MultiViews 禁止该虚拟目录遍历
具体的apache设置可以参考http://liudaoru.iteye.com/blog/336338
完成之后添加重写模块并重启apache

a2enmod rewrite 
service apache2 restart

设置PHP

ln -s /etc/php5/apache2/php.ini /etc/php.ini
#把php配置文件链接到系统默认位置

设置php.ini

vim /etc/php.ini

查找timezone

;date.timezone =
改为
date.timezone = Asia/Shanghai

查找expose

expose_php = on
改为
expose_php = off

php函数部分我一个都没禁用,因为不怎么懂…留待日后再做分析吧,设置按了保存退出即可

设置Mysql

首先是修改mysql的root密码,进入到mysql的命令行之后,输入

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新密码');

即可修改,下次使用

mysql -uroot -ppass

来进入mysql命令行
为了保证网站之间的安全,不建议直接使用mysql的root账户来让网站对数据库做读写操作,所以很有必要给每个网站建立一个用户,首先进入到mysql命令行

create database DB_Name;
#新建一个库,名为DB_Name
grant all privileges on DB_Name.* to DB_User@localhost identified by 'DB_Pass';
#新建一个数据库用户,名为DB_User,密码为DB_Pass,同时授权DB_User操作DB_Name的任何权限

这样就可以了,最后重启apache服务

service apache2 restart

在/var/www下放置一个php文件,内容为


如果能正常打开即表示整个环境部署完毕,还需要添加或删除什么自行根据配置参考即可
对于图片资源,我使用的是BAE的云存储功能,具体可在上一次迁移到SAE的文章中找到
链接http://blog.l1n3.net/blog-move-to-sae/

设置Memcached

首先安装Memcached和PHP相关组件

apt-get install memcached php5-memcache

安装完毕之后设置memcached,我这里的设置是这样的

vim /etc/memcached.conf -d # -d 选项是启动一个守护进程 -m 64 # -m 是分配给Memcache使用的内存数量,单位是MB,这里是64MB -p 11211 # -p Memcached使用的端口,最好是1024以上的端口,这里设置为11211端口 -u nobody # -u 使用哪个用户来启动Memcached,这里设置为以root启动 -l 127.0.0.1 # -l 设置Memcached服务器地址,这里设置为本机,即localhost(127.0.0.1)

设置完之后启动memcached

service memcached restart

然后在WordPress中安装WP Memcached Manager插件,然后启用该插件
选择Edit Servers,如图设置即可


完成之后点击Add Server即可启用
查看效果的话可以在WordPress后台的Memcached设置下查看,如图

Get Hits下如果显示为>0%即表示已经成功启用,如果是0%,多访问几次自己的博客,让Memcached去缓存一些,然后在查看就可以了

其他的安全方面设置

首先是禁止apahce跨目录读取,防止跨站
设置之前是酱紫的,使用中国菜刀作为php一句话木马的客户端,可以看到是可以跨目录读取文件的


然后在apache的虚拟主机设置中加入这个

#把当中的/var/www/manage_l1n3_net/改为自己的web绝对路径,表示仅允许访问web路径和tmp
php_admin_value open_basedir "/var/www/manage_l1n3_net/:/tmp/"

重启apache

service apache2 restart

重启之后可以看到已经无法使用中国菜刀来做到跨目录


虽然不能直接通过读目录来遍历,但是依然可以通过执行命令的方式去读取&遍历文件,如图

所以,防患于未然,既然要杀,就杀的死死的,不让webshell去执行命令就好了
修改php.ini,禁止掉相关的函数就可以了,具体为shell_exec,system,passthru,popen这四个函数

vim /etc/php.ini
#查找disable_functions,在其最后加入shell_exec,system,passthru,popen
#在我这里是行316,具体设置为
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,shell_exec,system,passthru,popen

然后重启apache2
返回来再查看中国菜刀的命令执行,可以看到已经无法进行命令执行了

其他说明

如需转载烦请注明出处
来自于LinE's Blog
From: http://blog.l1n3.net
谢谢~~

分类: 服务器配置 标签: ,
  1. A11riseforme
    2014年8月30日00:12 | #1

    shell_exec,system,passthru,popen, 目测这四个函数还不够

    • line
      2014年8月31日14:41 | #2

      以后在使用过程中在根据情况逐渐处理吧,谢谢A11牛

  1. 本文目前尚无任何 trackbacks 和 pingbacks.