09
一、系统约定RPM包和源码包存放位置
| RPM包和源码包存放位置 | /usr/local/src |
| 源码包编译安装位置(prefix) | /usr/local/xxx |
| 脚本以及维护程序存放位置 | /usr/local/sbin |
| MySQL 数据库位置 | /var/lib/mysql |
| Apache 网站根目录 | /home/www |
| Apache 虚拟主机曰志根目录 | /data/logs/www |
| yum RPM包信息文件 | /etc/yum.list |
二、系统环境部署及调整
1. 检查系统是否正常
# more /var/log/messages //检查有无系统内核级错误信息
# demesg //检查硬件设备是否有错误信息
# ifconfig //检查网卡设置是否正确
# ping www.ioicn.com.cn // 检查网络是否正常
2. 关闭不需要的服务
# export LANG='en_US' //设置语言
# ntsysv //选择启动的服务
以下仅列出需要启动的服务,未列出的服务一律关闭:
crond
irqbalance 仅当服务器CPU为S.M.P架构或支持双核心、HT技术时,才需开启,否则关闭。
microcode_ctl
network
random
sendmail
sshd
syslog
3. 对TCP/IP网络参数进行调整,加强抗SYN Flood能力
# echo 'net.ipv4.tcp_syncookies = 1' >> /etc/sysctl.conf //将net.ipv4.tcp_syncookies = 1写入sysctl.conf 文件
# sysctl -p //查看
4. 配置yum
# rpm --import /usr/share/doc/centos-release-3/RPM-GPG-KEY-CentOS-3
# yum list | tee /etc/yum.list //读取yum list 数据,将其输出到 /etc/yum.list。
5. 修改命令history记录
# vi /etc/profile
找到 HISTSIZE=1000 改为 HISTSIZE=50
6. 定时校正服务器时间
# yum install ntp
# crontab -e
加入一行 */15 * * * * ntpdate 210.72.145.44
7. 重新启动系统
# init 6
8. 使用 yum 程序安装所需开发包(以下为标准的 RPM 包名称)
# yum install gcc gcc-c++ gcc-g77 flex bison autoconf automake bzip2-devel zlib-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel
9. 源码编译安装所需包 (Source)
(1) GD2
# cd /usr/local/src
# wget http://www.ioicn.org/download/tools/gd-2.0.33.tar.gz
# tar xzvf gd-2.0.33.tar.gz
# cd gd-2.0.33
# ./configure --prefix=/usr/local/gd2 --mandir=/usr/share/man //./configure 配置。
# make //make 是用来编译的,它从 Makefile 中读取指令,然后编译。
# make install //make install 是用来安装的,它也从 Makefile 中读取指令,安装到指定的位置。
(2) Apache 曰志截断程序
# cd /usr/local/src
# wget http://www.ioicn.org/download/tools/cronolog-1.6.2.tar.gz
# tar xzvf cronolog-1.6.2.tar.gz
# cd cronolog-1.6.2
# ./configure --prefix=/usr/local/cronolog
# make
# make install
(3) libxml 库程序
# cd /usr/local/src
# wget http://www.ioicn.org/download/tools/libxml2-2.6.26.tar.bz2
# tar xjvf libxml2-2.6.26.tar.bz2
# cd libxml2-2.6.26
# ./configure --prefix=/usr/local/libxml2
# make
# make install
10. 升级 OpenSSL和OpenSSH
# cd /usr/local/src
# wget http://www.ioicn.org/download/tools/openssl-0.9.7j.tar.gz
# tar xzvf openssl-0.9.7j.tar.gz
# cd openssl-0.9.7j
# ./config --prefix=/usr/local/openssl
# make
# make test
# make install
# cd ..
# wget http://www.ioicn.org/download/tools/openssh-4.2p1.tar.gz
# tar xzvf openssh-4.2p1.tar.gz
# cd openssh-4.2p1
# ./configure --prefix=/usr --with-pam --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/openssl --with-md5-passwords --mandir=/usr/share/man
# make
# make install
如要禁止 root 直接登录,此处先建立一个普通系统用户:
# useradd username
# passwd username
# echo 'Protocol 2' >> /etc/ssh/sshd_config
# echo 'Protocol 2' >> /usr/etc/sshd_config
# echo 'PermitRootLogin no' >> /etc/ssh/sshd_config
# echo 'PermitRootLogin no' >> /usr/etc/sshd_config
# /etc/rc.d/init.d/sshd restart
三、编译安装 L.A.M.P 环境1. 编译安装 MySQL
# cd /usr/local/src
# wget http://www.ioicn.org/download/tools/mysql-5.0.26.tar.gz
# tar xzvf mysql-5.0.26.tar.gz
# cd mysql-5.0.26
# CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" ./configure --prefix=/usr/local/mysql --localstatedir=/var/lib/mysql --with-comment=Source --with-server-suffix=-Comsenz --with-mysqld-user=mysql --without-debug --with-big-tables --with-charset=latin1 --with-collation=latin1_swedish_ci --with-extra-charsets=all --with-pthread --enable-static --enable-thread-safe-client --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --enable-assembler --without-isam --without-innodb --without-ndb-debug
# make
# make install
# useradd mysql //添加 mysql 用户
# cd /usr/local/mysql
# bin/mysql_install_db --user=mysql
# chown -R root:mysql . //设置权限,注意后面有一个 "."
# chown -R mysql /var/lib/mysql //设置 mysql 目录权限
# chgrp -R mysql . //注意后面有一个 "."
# cp share/mysql/my-huge.cnf /etc/my.cnf
# cp share/mysql/mysql.server /etc/rc.d/init.d/mysqld //开机自动启动 mysql。
# chmod 755 /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# /etc/rc.d/init.d/mysqld start //启动 MySQL
# bin/mysqladmin -u root password "password_for_root"
# service mysqld stop //关闭 MySQL
2. 编译安装 Apache
# cd /usr/local/src
# wget http://www.ioicn.org/download/tools/httpd-2.2.3.tar.bz2
# tar xjvf httpd-2.2.3.tar.bz2
# cd httpd-2.2.3
# CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" ./configure --prefix=/usr/local/apache2 --enable-module=so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared --enable-cache --enable-file-cache --enable-mem-cache --enable-disk-cache --enable-static-support --enable-static-htpasswd --enable-static-htdigest --enable-static-rotatelogs --enable-static-logresolve --enable-static-htdbm --enable-static-ab --enable-static-checkgid --disable-cgid --disable-cgi --disable-userdir
# make
# make install
# echo '/usr/local/apache2/bin/apachectl start ' >> /etc/rc.local //将 apachectl 的调用加入到你的系统启动文件中。
注解:
./configure //配置源代码树
--prefix=/usr/local/apache2 //体系无关文件的顶级安装目录PREFIX ,也就Apache的安装目录。
--enable-module=so //打开 so 模块,so 模块是用来提 DSO 支持的 apache 核心模块
--enable-deflate=shared //支持网页压缩
--enable-expires=shared //支持 HTTP 控制
--enable-rewrite=shared //支持 URL 重写
--enable-cache //支持缓存
--enable-file-cache //支持文件缓存
--enable-mem-cache //支持记忆缓存
--enable-disk-cache //支持磁盘缓存
--enable-static-support //支持静态连接(默认为动态连接)
--enable-static-htpasswd //使用静态连接编译 htpasswd - 管理用于基本认证的用户文件
--enable-static-htdigest //使用静态连接编译 htdigest - 管理用于摘要认证的用户文件
--enable-static-rotatelogs //使用静态连接编译 rotatelogs - 滚动 Apache 曰志的管道曰志程序
--enable-static-logresolve //使用静态连接编译 logresolve - 解析 Apache 曰志中的IP地址为主机名
--enable-static-htdbm //使用静态连接编译 htdbm - 操作 DBM 密码数据库
--enable-static-ab //使用静态连接编译 ab - Apache HTTP 服务器性能测试工具
--enable-static-checkgid //使用静态连接编译 checkgid
--disable-cgid //禁止用一个外部 CGI 守护进程执行CGI脚本
--disable-cgi //禁止编译 CGI 版本的 PHP
--disable-userdir //禁止用户从自己的主目录中提供页面
3. 编译安装 PHP
# cd /usr/local/src
# wget http://www.ioicn.org/download/tools/php-5.1.6.tar.bz2
# tar xjvf php-5.1.6.tar.bz2
# cd php-5.1.6
# CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-zlib-dir --with-bz2 --with-tiff-dir --with-gd=/usr/local/gd2 --with-freetype-dir --with-jpeg-dir --with-png-dir --with-ttf --enable-mbstring --with-mysql=/usr/local/mysql --with-config-file-path=/etc --disable-ipv6 --enable-static
# make
# make install
# cp php.ini-dist /etc/php.ini
4. 安装 Zend Optimizer
# cd /usr/local/src
# wget http://www.ioicn.org/download/to ... glibc21-i386.tar.gz
# tar xzvf ZendOptimizer-3.0.2-linux-glibc21-i386.tar.gz
# ./ZendOptimizer-3.0.2-linux-glibc21-i386/install.sh
安装 Zend Optimizer 过程的最后不要选择重启 Apache。
5. 整合 Apache 与 PHP
# vi /usr/local/apache2/conf/httpd.conf
查找:(设置 WEB 目录)
DocumentRoot "/usr/local/apache2/htdocs"
替换为:
DocumentRoot "/home/www"
查找:
AddType application/x-gzip .gz .tgz
在该行下面添加:
AddType application/x-httpd-php .php
查找:(禁止浏览网页目录)
Options Indexes FollowSymLinks
替换为:
Options FollowSymLinks
查找:(设置静态网页)
LoadModule rewrite_module modules/mod_rewrite.so
在该行下面添加:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)/archiver/([a-z0-9\-]+\.html)$ $1/archiver/index.php?$2
RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay.php?fid=$2&page=$3
RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread.php?tid=$2&extra=page\%3D$4&page=$3
RewriteRule ^(.*)/profile-(username|uid)-(.+)\.html$ $1/viewpro.php?$2=$3
</IfModule>
查找:(启动 CGI)
<Directory "/usr/local/apache2/cgi-bin">
AllowOverride None
在该行下面添加:
Options +ExecCGI
查找:(设置 WEB 默认文件)
DirectoryIndex index.html
替换为:
DirectoryIndex index.html index.htm index.php //在 WEB 目录不到默认文件,httpd 就会执行 /var/www/error/noindex.html
查找:(如果安装后出现You don't have permission to access / on this server.)
Deny from all //拒绝主机访问
全部替换为:
Allow from all //允许主机访问
修改完成后保存退出。
# mkdir /home/www
# /usr/local/apache2/bin/apachectl restart //重启 Apache。
6. 查看确认 L.A.M.P 环境信息
# echo '#!/usr/local/php/bin/php\
<?php phpinfo(); ?> ' > /usr/local/php/phpinfo.php //创建 phpinfo.php
# chmod 755 /usr/local/php/phpinfo.php
# /usr/local/php/phpinfo.php > /usr/local/php/phpinfo
# more /usr/local/php/phpinfo
检查 phpinfo 中的各项信息是否正确。
7. 测试环境
# echo '<?php phpinfo(); ?> ' > /home/www/phpinfo.php
# chmod 755 /home/www/phpinfo.php
用浏览器打开 http://127.0.0.1/phpinfo.php
# echo '<?php $link=mysql_connect('localhost','root','password_for_mysql'); if(!$link) echo "fail"; else echo "success"; mysql_close(); ?> ' > /home/www/testdb.php
# chmod 755 /home/www/testdb.php
# service mysqld start
用浏览器打开 http://127.0.0.1/testdb.php
四、服务器安全性设置1. 设置系统防火墙
# touch /usr/local/sbin/fw.sh
将以下脚本命令粘贴到 fw.sh 文件中。
#! /bin/bash
Set FTP Transfer Mode
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
Inital iptables Chains Policy
/sbin/iptables -F -t filter
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
Enable Native Network Transfer
/sbin/iptables -A INPUT -i lo -j ACCEPT
ICMP Control
/sbin/iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
WWW Service
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
FTP Service
/sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT
SSH Service
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Deny All Other Connections
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# chmod 755 /usr/local/sbin/fw.sh
# echo '/usr/local/sbin/fw.sh' >> /etc/rc.local
# /usr/local/sbin/fw.sh