最近对AMH的系统比较感兴趣,特拿来了AMH 4.2来尝试下对其内核版本升级一下,并做了笔记供需要的同学参考。
注意:本文首次撰写于2016-06-22,最近修改时间为2016-06-22,请注意相关程序的可用性与安全性。
前几天在对张宁网进行更新改版,配置SSL的时候碰见个问题:AMH面板自带的nginx所编译的OpenSSL版本过低导致有CVE2016-2107漏洞,对服务器运维十分危险。经过先期自我修复,并上报给AMH官方对漏洞进行临时处理与预警。官方也及时解决了此OpenSSL版本过低导致的AMH系列环境软件的隐患(虽然AMH官方处理速度还可以,不过态度有点那个,早先还以为是小白把80端口Listen了俩呢)。不过对于已经停止更新的AMH 4.2,这样的问题仍然存在。
于是,今天我突发奇想,何不装一个AMH 4.2来实战一波升级配置呢。说干就干。
[TOC]
##关于AMH 4.2
###AMH简介
先来看看AMH的介绍:
AMH 是国内首个开源的主机面板,使用APL开源软件协议。AMH 实现平台化架构设计,高可扩展灵活性,所有功能软件可选择定制下载安装。AMH 支持用户自由弹性组建运行环境与切换环境,您可以下载安装不同版本的WEB服务器、数据库、脚本软件自由组合创建您需要的运行环境。例如,您可以创建 LNMP、LAMP、LNMH、LNGX、LNAMP等不同WEB应用环境。(PHP环境支持所有PHP版本共存,包括PHP5.2、5.3、5.4、5.5、5.6、7.0)
看上去AMH还是很牛X的嘛。不过这介绍已经仅适用于AMH 5.x版本的了。那么AMH 4.2是什么情况呢?
AMH 4.2 为独立的一套LNMP/Nginx虚拟主机面板,安装请使用纯净系统。编译安装方式 (安装时间15至25分钟)
AMH4.2 编译安装支持的系统: 支持目前 CentOS、Ubuntu、Debian 以下版本: CentOS 6 x64、CentOS 6 i386、CentOS 5 x64、CentOS 5 i386、Ubuntu 12 x64、Ubuntu 12 i386、Debian 6 x64 (squeeze)、Debian 6 i386 (squeeze)
实际安装AMH 4.2之后,我们看到其所带组件的情况如下:
Nginx:
[root@localhost ~]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.4.7
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_gzip_static_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-http_uwsgi_module --without-http_scgi_module
PHP:
[root@localhost ~]# /usr/local/php/bin/php -v
PHP 5.3.27p1 (cli) (built: Jun 23 2016 20:25:46)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies
[root@localhost ~]# /usr/local/php/bin/php -i | grep configure
Configure Command => './configure' '--prefix=/usr/local/php' '--enable-fpm' '--with-fpm-user=www' '--with-fpm-group=www' '--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--with-openssl' '--with-zlib' '--with-curl' '--enable-ftp' '--with-gd' '--with-jpeg-dir' '--with-png-dir' '--with-freetype-dir' '--enable-gd-native-ttf' '--enable-mbstring' '--enable-zip' '--with-iconv=/usr/local/libiconv' '--with-mysql=/usr/local/mysql' '--without-pear'
MySQL:
[root@localhost ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.5.34-log Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
###本次任务
我们这次的目的是,将nginx升级到nginx 1.10.1,并解决OpenSSL引起的CVE2016-2107漏洞。同时将PHP升级到PHP 5.6.22。
##准备工作
对yum库进行升级更新
# yum update -y
安装编译接下来几款软件时需要的依赖包
# yum -y install libxml2 libxml2-devel curl-devel openssl openssl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel
查看OpenSSL版本
# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
这里,如果不是OpenSSL 1.0.2h或OpenSSL1.0.1t,则需要升级至上述版本。本服务器使用的是OpenSSL 1.0.1e,鉴于服务器情况,需要升级到OpenSSL1.0.1t。
升级/安装OpenSSL
# cd /usr/local/src/
# wget http://www.openssl.org/source/openssl-1.0.1t.tar.gz
# tar -zxvf openssl-1.0.1t.tar.gz
# cd openssl-1.0.1t
# ./config shared zlib
# make && make install
#修改历史的OpenSSL文件设置备份
# mv /usr/bin/openssl /usr/bin/openssl.old
# mv /usr/include/openssl /usr/include/openssl.old
#设置软连接使其使用新的OpenSSL版本 刚刚安装的OpenSSL默认安装在/usr/local/ssl
# ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
# ln -s /usr/local/ssl/include/openssl /usr/include/openssl
#更新动态链接库数据
# echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
# ldconfig -v
再次检查OpenSSL版本信息.
# openssl version
OpenSSL 1.0.1t 3 May 2016
如果是OpenSSL 1.0.1t,则说明更新成功。
##升级PHP
###下载、编译与安装PHP 5.6.22
请先回到主目录
# cd
备份备份旧版本的php
# tar -zcvf /usr/local/php-old.tar.gz /usr/local/php/
下载php 5.6.22,并解压后进入该目录
# wget http://hk2.php.net/distributions/php-5.6.22.tar.gz
# tar -zxvf php-5.6.22.tar.gz
# cd php-5.6.22
开始配置
# ./configure --prefix=/usr/local/php --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-config-file-path=/etc --with-openssl --with-zlib --with-curl --enable-ftp --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-gd-native-ttf --enable-mbstring --enable-zip --with-iconv=/usr/local/libiconv --with-mysql=/usr/local/mysql --with-mysqli=shared,mysqlnd --with-pdo-mysql=shared,mysqlnd --without-pear --disable-fileinfo --enable-opcache
编译
# make && make install
出现如下所示内容,可判断是升级完毕:
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
Installing PHP CLI binary: /usr/local/php/bin/
Installing PHP CLI man page: /usr/local/php/php/man/man1/
Installing PHP FPM binary: /usr/local/php/sbin/
Installing PHP FPM config: /usr/local/php/etc/
Installing PHP FPM man page: /usr/local/php/php/man/man8/
Installing PHP FPM status page: /usr/local/php/php/php/fpm/
Installing PHP CGI binary: /usr/local/php/bin/
Installing PHP CGI man page: /usr/local/php/php/man/man1/
Installing build environment: /usr/local/php/lib/php/build/
Installing header files: /usr/local/php/include/php/
Installing helper programs: /usr/local/php/bin/
program: phpize
program: php-config
Installing man pages: /usr/local/php/php/man/man1/
page: phpize.1
page: php-config.1
/root/php-5.6.22/build/shtool install -c ext/phar/phar.phar /usr/local/php/bin
ln -s -f phar.phar /usr/local/php/bin/phar
Installing PDO headers: /usr/local/php/include/php/ext/pdo/
测试——非必须操作
# make test
可能需要加上执行权限
# chmod +x /etc/init.d/php-fpm
###额外的配置
在php-fpm.conf、php-fpm-template.conf、amh.conf三个文件中插入如下内容:
listen.owner = www
listen.group = www
listen.mode = 0660
三个文件的路径如下:
vim /usr/local/php/etc/php-fpm.conf
vim /usr/local/php/etc/php-fpm-template.conf
vim /usr/local/php/etc/fpm/amh.conf
另外,在php.ini文件中,也需要增加一点东西:
搜索[Pdo_mysql]标签,在其下方加入如下内容:
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/pdo_mysql.so
注意,no-debug-non-zts-20131226
这个需要看安装后给的Installing shared extensions,并确保这个路径内有pdo_mysql.so文件。
###使升级的PHP生效
重启php
# amh php stop
# amh php start
如上述命令无效,可以执行如下命令
# killall php-fpm && /usr/local/php/sbin/php-fpm -y=/usr/local/php/etc/php-fpm.conf -c=/usr/local/php/etc/php.ini
# amh php start
# php-fpm
查看是否启动成功
# ps -aux | grep php
查看php版本
# /usr/local/php/bin/php -v
##升级nginx
###下载、编译与安装nginx 1.10.1
请先回到主目录
# cd
备份现有nginx运行程序与nginx配置文件。
# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.0622
下载nginx 1.10.1,并解压后进入该目录
# wget http://nginx.org/download/nginx-1.10.1.tar.gz
# tar -zxvf nginx-1.10.1.tar.gz
# cd nginx-1.10.1
重新编译nginx 1.10.1,这里我们参考新版AMH 5.x的configure,调整下编译的参数如下:
# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-openssl=/usr/local/src/openssl-1.0.1t --with-http_gzip_static_module --with-http_v2_module --with-threads --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-http_uwsgi_module --without-http_scgi_module
执行make,这里我们不选择make install,因为我们只需要替换执行文件。
# make
###使升级的nginx生效
停止AMH相关应用:
# amh nginx stop
接下来,我们需要备份旧版本的nginx可执行文件并复制新的已经编译好的执行文件:
# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
# cp objs/nginx /usr/local/nginx/sbin/nginx
检测nginx文件版本及编译情况:
[root@localhost nginx-1.10.1]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.10.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
built with OpenSSL 1.0.1t 3 May 2016
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-openssl=/usr/local/src/openssl-1.0.1t --with-http_gzip_static_module --with-http_v2_module --with-threads --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-http_uwsgi_module --without-http_scgi_module
启动nginx以及AMH相关应用:
# amh nginx start
# amh start
如果显示[OK] Nginx start
,则说明nginx已经启动,升级成功。
##升级完成确认
可以通过AMH 4.2后台的phpinfo查看升级后的结果,如图:
可以看到,phpinfo检测到的PHP Version 为 5.6.22。
搜索相关参数,可以找到当前服务器软体版本为nginx 1.10.1。本次升级圆满完成。
##小结
本来PHP想升级到7.0.7的,结果一直都不行。感觉配置上可能是php-fpm和mysql的动态链接库出问题了。不过因为最近有考试,就没再弄。
另外也是由于上述最后一个原因,时间问题,并没有尝试升级AMH 4.2的MySQL。等有兴趣了再说吧。不过看了下AMH 4.2的安装脚本,感觉Linux集成环境的配置挺好玩的,等回头有空了研究下。