yum -y install vim-enhanced mv /bin/vi /bin/vi.save ln -s /usr/bin/vim /bin/vi cp /etc/vimrc /etc/vimrc.save sed -i “39 s/^/ set number \n filetype on\n set history=1000\n syntax on\n set tabstop=4\n set showmatch\n set vb t_vb=\n set mouse=a\n set ignorecase\n set autowrite\n /” /etc/vimrc
cd /usr/local/src vi install.sh ###############################################
#安装openssl cd /usr/local/src tar zxvf openssl-0.9.8h.tar.gz cd openssl-0.9.8h ./config shared zlib make make test make install mv /usr/bin/openssl /usr/bin/openssl.save mv /usr/include/openssl /usr/include/openssl.save mv /usr/lib/libssl.so /usr/lib/libssl.so.save ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl ln -s /usr/local/ssl/include/openssl /usr/include/openssl ln -sv /usr/local/ssl/lib/libssl.so.0.9.8 /usr/lib/libssl.so cd ..
#!/bin/bash # # Startup script for the Apache Web Server # # chkconfig: - 85 15 # description: Apache is a World Wide Web server. It is used to serve \ # HTML files and CGI. # processname: httpd # pidfile: /usr/local/apache2/logs/httpd.pid # config: /usr/local/apache2/conf/httpd.conf
# Source function library. . /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/httpd ]; then . /etc/sysconfig/httpd fi
# This will prevent initlog from swallowing up a pass-phrase prompt if # mod_ssl needs a pass-phrase from the user. INITLOG_ARGS=”"
# Path to the apachectl script, server binary, and short-form for messages. apachectl=/usr/local/apache2/bin/apachectl httpd=/usr/local/apache2/bin/httpd pid=/usr/local/apache2/logs/httpd.pid prog=httpd RETVAL=0
# The semantics of these two functions differ from the way apachectl does # things — attempting to start while running is a failure, and shutdown # when not running is also a failure. So we just do it the way init scripts # are expected to behave here. start() { echo -n $”Starting $prog: “ daemon $httpd $OPTIONS RETVAL=$? echo [ $RETVAL = 0 ] touch /var/lock/subsys/httpd return $RETVAL } stop() { echo -n $”Stopping $prog: “ killproc $httpd RETVAL=$? echo [ $RETVAL = 0 ] rm -f /var/lock/subsys/httpd $pid } reload() { echo -n $”Reloading $prog: “ killproc $httpd -HUP RETVAL=$? echo }
# See how we were called. case “$1″ in start) start ;; stop) stop ;; status) status $httpd RETVAL=$? ;; restart) stop start ;; condrestart) if [ -f $pid ] ; then stop start fi ;; reload) reload ;; graceful|help|configtest|fullstatus) $apachectl $@ RETVAL=$? ;; *) echo $”Usage: $prog {start|stop|restart|condrestart|reload|status” echo $”|fullstatus|graceful|help|configtest}” exit 1 esac
vi /usr/local/apache2/conf/extra/httpd-default.conf
Timeout 15 KeepAlive Off MaxKeepAliveRequests 50 KeepAliveTimeout 5 UseCanonicalName Off AccessFileName .htaccess ServerTokens Prod ServerSignature Off HostnameLookups Off
cd /usr/local/src tar zxvf phpMyAdmin-2.11.8.1-all-languages-utf-8-only.tar.gz cp -rf phpMyAdmin-2.11.8.1-all-languages-utf-8-only /data/www/wwwroot/test.com/phpmyadmin cd /data/www/wwwroot/test.com/phpmyadmin
cp config.sample.inc.php config.inc.php
sed -i -e “/^\$cfg\['blowfish_secret'\]/{ s@”;@’88888888888888888′;@; }” config.inc.php
3、系统环境部署及调整 (1)检查系统是否正常 # more /var/log/messages //检查有无系统内核级错误信息 # dmesg //检查硬件设备是否有错误信息 # ifconfig //检查网卡设置是否正确 # ping www.163.com // 检查网络是否正常 (2)关闭不需要的服务 # export LANG='en_US' //设置语言 # setup //选择启动的服务 进入system service 选项。 以space 键选定所需服务。 以下仅列出需要启动的服务,未列出的服务一律关闭: crond irqbalance 仅当服务器CPU为S.M.P架构或支持双核心、HT技术时,才需开启,否则关闭。 microcode_ctl network iptables vsftpd sshd syslog yum-updatesd (3)修改/etc/yum.repos.d/CentOS-Base.repo,将镜象站点地址改为在中国的镜象站点地址。不然我们通过yum安装软件速度会极慢。修改如下: # CentOS-Base.repo # # This file uses a new mirrorlist system developed by Lance Davis for CentOS. # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick mirrors that are updated to and # geographically close to the client. You should use this for CentOS updates # unless you are manually picking other mirrors. # # If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead. # # [base] name=CentOS-$releasever - Base baseurl=http://mirrors.shlug.org/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 protect=1 #released updates [updates] name=CentOS-$releasever - Updates baseurl=http://mirrors.shlug.org/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 protect=1 #packages used/produced in the build but not released [addons] name=CentOS-$releasever - Addons baseurl=http://mirrors.shlug.org/centos/$releasever/addons/$basearch/ gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 protect=0 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras baseurl=http://mirrors.shlug.org/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 protect=0 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus baseurl=http://mirrors.shlug.org/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 protect=1 #contrib - packages by Centos Users [contrib] name=CentOS-$releasever - Contrib baseurl=http://mirrors.shlug.org/centos/$releasever/contrib/$basearch/ gpgcheck=1 enabled=0 protect=0 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 保存文件。 (4)更新系统,我们使用yum, 运行: # yum upgrade 建议更新所有列出的程序,包括内核,rhel 5.X的稳定性还要继续努力呢。 (5)定时校正服务器时间 # yum install –y ntp # crontab -e 0 23 * * * /usr/sbin/ntpdate 210.72.145.44 以上命令设置好后存盘。 # /sbin/service crond reload 重载计划任务配置 您的机器将在每天的23:00根据中国国家授时中心的NTP服务器时间自动校准时间。 (6)FTP服务器的配置 vi /etc/vsftpd/vsftpd.conf 把anonymous_enable=YES 修改为anonymous_enable=No不允许匿名登录。 添加两句 chroot_local_user=yes listen_port=2121 将用户锁定在主目录,并将FTP监听端口修改为2121 把ftpd_banner=*前的注释去掉。后面改成你的欢迎信息(这样设置可以避免显示ftp服务器的版本信息) 然后保存,service vsftpd start就可以了。 这时应当添加用户,因为root默认不能通过FTP方式登录,也不安全。 groupadd upload useradd upload -g upload -d /usr/local/apache2/htdocs/ -M 如果FTP登录时出现 ftp服务器连接失败,错误提示: 500 OOPS: cannot change directory:/home/******* 500 OOPS: child died 解决方法: # setsebool ftpd_disable_trans 1 # service vsftpd restart 这样对于我们上传一些文件到系统中很方便。 大家有兴趣的可以看下这篇文章对vsftpd进行一个比较详细的了解 http://blog.chinaunix.net/u/10047/showart_198837.html 4、重新启动系统 # init 6 此时系统启动成功,可以删除老的内核
7、编译mysql 5.0.50 mysql 5.0.50是企业版本,貌似双数版本都是企业版本了。个人觉得代码质量要比社区版本要好一些。大家可以下载,免费使用。并不需要向mysql公司交钱。 #cd /usr/local/src # wget http://mirror.provenscaling.com/mysq...-5.0.50.tar.gz # tar xzvf mysql-5.0.50.tar.gz # cd mysql-5.0.50 修改mysql 客户端最大连接数, 默认的只有100,远远达不到我们的要求。 # vi sql/mysqld.cc 搜索找到下面一行: {"max_connections", OPT_MAX_CONNECTIONS, "The number of simultaneous clients allowed.", (gptr*) max_connections, (gptr*) max_connections, 0, GET_ULONG, REQUIRED_ARG, 100, 1, 16384, 0, 1, 0}, 将其中的100改为1500, 当然小点也可以,根据你的需要来,不建议改的太大。 {"max_connections", OPT_MAX_CONNECTIONS, "The number of simultaneous clients allowed.", (gptr*) max_connections, (gptr*) max_connections, 0, GET_ULONG, REQUIRED_ARG, 1500, 1, 16384, 0, 1, 0}, 保存。 # CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer" ./configure --prefix=/usr/local/mysql --localstatedir=/var/lib/mysql --with-comment=Source --with-server-suffix=-enterprise-gpl --with-mysqld-user=mysql --without-debug --with-big-tables --with-charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=gbk,latin1 --with-pthread --enable-static --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --enable-assembler --without-innodb --without-ndb-debug --without-isam --enable-local-infile --with-readline --with-raid 配置成功会提示: MySQL has a Web site at http://www.mysql.com/ which carries details on the latest release, upcoming features, and other information to make your work or play with MySQL more productive. There you can also find information about mailing lists for MySQL discussion. Remember to check the platform specific part of the reference manual for hints about installing MySQL on your platform. Also have a look at the files in the Docs directory. Thank you for choosing MySQL! # 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-medium.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 #添加LIB PATH echo "/usr/local/mysql/lib" >> /etc/ld.so.conf ldconfig vi /etc/my.cnf 修改 MySQL 配置,增加部分优化参数,如下: [mysqld] ft_min_word_len=2 运行以下命令即可启动 MySQL 服务器: # /etc/rc.d/init.d/mysqld start //启动 MySQL # bin/mysqladmin -u root password "password_for_root" # service mysqld stop //关闭 MySQL
9、编译php 5.2.5 Suhosin是php增强型安全补丁,可以编译到静态内核中,也可以编译成php动态扩展。我个人强烈你建议安装成静态内核。Suhosin已经进入 Gentoo Linux、FreeBSD、OpenSuSE Linux、Mandriva Linux、Debian Linux官方包。下面的以下先说静态安装步骤。当然你也可以在安装php后将它编译成php的动态扩展。 # cd /usr/local/src # wget http://cn.php.net/get/php-5.2.5.tar.gz/from/this/mirror wget http://www.hardened-php.net/suhosin/...9.6.2.patch.gz # tar zxvf php-5.2.5.tar.gz # gunzip suhosin-patch-5.2.5-0.9.6.2.patch.gz # cd php-5.2.5 # patch -p 1 -i ../suhosin-patch-5.2.5-0.9.6.2.patch # ./buildconf --force # CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -Wall -W -mfpmath=sse -funroll-loops -mcpu=pentium4 -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer" ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-pear=/usr/share/php --with-zlib-dir --with-bz2 --with-libxml-dir=/usr --with-gd=/usr/local/gd2 --enable-gd-native-ttf --enable-gd-jis-conv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-ttf=shared,/usr --enable-mbstring --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-config-file-path=/etc --with-iconv --disable-ipv6 --enable-static --enable-zend-multibyte --enable-inline-optimization --enable-zend-multibyte --enable-sockets --enable-soap --with-openssl --with-gettext --enable-suhosin 配置成功会提示: +--------------------------------------------------------------------+ | License: | | This software is subject to the PHP License, available in this | | distribution in the file LICENSE. By continuing this installation | | process, you are bound by the terms of this license agreement. | | If you do not agree with the terms of this license, you must abort | | the installation process at this point. | +--------------------------------------------------------------------+ Thank you for using PHP. # make # make test # make install # cp php.ini-recommended /etc/php.ini # echo "/usr/local/php/lib" >> /etc/ld.so.conf ldconfig 在这里也顺便说一下将suhosin安装成为php的动态扩展的方法。毕竟网上根本不见它的中文安装教程。 虽然我个人不推荐这种方式。 wget http://www.hardened-php.net/suhosin/...sin-0.9.20.tgz tar zxvf suhosin-0.9.20.tgz cd suhosin-0.9.20 ./configure --with-php-config=/usr/local/php/bin/php-config make make install 会提示编译的模块存在的目录,记住它。 Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20060613/ 然后在php.ini中增加一行下列语句。 extension="/usr/local/php/lib/php/extensions/no-debug-zts-20060613/suhosin.so"
10、整合apache 与php # vi /usr/local/apache2/conf/httpd.conf 在最后一行加上: AddType application/x-httpd-php .php 查找:(设置 WEB 默认文件) DirectoryIndex index.html 修改为: DirectoryIndex index.php index.html index.htm 找到这一段: # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # Options FileInfo AuthConfig Limit # AllowOverride none 更改为AllowOverride all 允许apache rewrite 保存httpd.conf,退出。 # /usr/local/apache2/bin/apachectl restart //重启 Apache 这时会出现错误: /usr/local/apache2/bin/apachectl start httpd: Syntax error on line 107 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied 不急,我们慢慢解决。 这个Permission denied问题,在centos 5下面一般是Selinux引起的,作为生产用服务器,我建议你千万别草率地关掉Selinux一了百了。就像家里的防盗网,阻碍了你的猫自由进出窗户,你不能为了猫方便,就把防盗网简单拆除是同样的道理。我看见网上许多人建议把Selinux简单关闭来解决这个问题,这是削足适履的做法,不值得提倡。 我们可以这样操作: # audit2allow -a //查看究竟问题出在什么地方
allow unconfined_t usr_t:file execmod; allow useradd_t var_log_t:file { read write }; 然后 # cd /etc/selinux/targeted/modules/ # audit2allow -M local -d 屏幕产生如下提示: Generating type enforcment file: local.te Compiling policy checkmodule -M -m -o local.mod local.te semodule_package -o local.pp -m local.mod ******************** IMPORTANT *********************** In order to load this newly created policy package into the kernel, you are required to execute semodule -i local.pp 我们运行 # semodule -i local.pp 这样就让Selinux加载了新的规则。 更详细的内容请看我在BLOG上的转贴: http://www.cnprint.org/bbs/blogs/1/blog48.html 重启apache 哈哈,apache不会再报错了吧? 这样我保留了selinux的功能,同时apache也能正常运行。 PHP5.1.x开始需要设置时区,默认时区与中国时区差8个小时,这种情况需要在php.ini中这么设置,找到date.timezone,去掉前面的分号,修改为以下值,大陆地区可用的值是:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次为重庆,上海,乌鲁木齐) 不然一些php程序的时间老是和中国标准时间相差8个小时。我的我的VBB论坛在windows上就是这样。这儿有亚洲地区的对应时区。 http://www.php.net/manual/en/timezones.asia.php 11、安装 Zend Optimizer # cd /usr/local/src # wget http://downloads.zend.com/optimizer/...21-i386.tar.gz # tar xzvf ZendOptimizer-3.3.0-linux-glibc21-i386.tar.gz # ./ZendOptimizer-3.3.0-linux-glibc21-i386/install.sh 按照它的提示一步步进行就行了。 总之一句话。如果你的服务器环境不需要ZendOptimizer,那么能不安就不安装这个。避免和eaccelerator冲突。 12. 查看确认 L.A.M.P 环境信息 vi /usr/local/apache2/htdocs/phpinfo.php 新增加下面一行,并保存。
//用于提供perl访问mysql数据库的接口规范,请确认你已经安装了perl,一般默认系统都装上了。 因为我们要用到mysqlhotcopy功能,需要这两个小程序的支持。 # wget http://mirrors.xueron.com/CPAN/autho...I-1.601.tar.gz 首先,安装DBI包: # tar zxvf DBI-1.061.tar.gz # cd DBI-1.061 # perl Makefile.PL # make # make test # make install
wget http://search.cpan.org/CPAN/authors/...l-4.005.tar.gz # tar zxvf DBD-mysql-4.005.tar.gz # cp /usr/local/mysql/lib/mysql/libmysqlclient.so.15 /usr/lib/ # perl Makefile.PL --libs="-L/usr/local/mysql/lib/mysql -lmysqlclient -L/usr/lib -lz " --cflags=-I/usr/local/mysql/include/mysql --mysql_config=/usr/local/mysql/bin/mysql_config --testhost=127.0.0.1--testsocket=/tmp/mysql.sock --testdb=test --testuser=root --testpassword="youpassword" # make # make test # make instll 测试执行 mysqlhotcopy 並出現如下类似錯誤訊息 #/usr/local/mysql/bin/mysqlhotcopy mysql /tmp/test -u root -p 'password' Invalid db.table name 'mysql.mysql`.`activity' at /usr/local/bin/mysqlhotcopy line 855. Ans: 找到了 [MySQL Bugs: #27303: mysqlhotcopy dies with error Invalid db.table name 'foo.bar`.`baz'] 说明将 mysqlhotcopy 文件修改一下后即可顺利执行 mysqlhotcopy 了 #vi /usr/local/mysql/bin/mysqlhotcopy //在第 835 下新增一行 835 my @dbh_tables = eval { $dbh->tables() }; 836 map { s/^.*?\.//o } @dbh_tables; //加入此行 mysql 5.0.50后已经修正这个错误。
16、配置https vi /usr/local/apache2/conf/httpd.conf # 监听443端口,支持https连接 取消注释 httpd.conf 中的 Include conf/extra/httpd-ssl.conf 设置SSL并创建自己的CA # cd /etc/pki/tls/misc # ./CA -newca 屏幕上出现如下的提示:CA certificate filename (or enter to create) 这是要求输入要创建的CA的证书文件名, 可以直接回车或输入证书文件名。 Making CA certificate ... Generating a 1024 bit RSA private key .........++++++ ................................++++++ writing new private key to './demoCA/private/./cakey.pem' Enter PEM pass phrase: Verifying password - Enter PEM pass phrase:- 此时要求输入和验证CA的私钥口令、国家代码(中国是CN)、省份、城市或地区、组织或企业名称、部门名称、CA的名称或服务器的主机名称、管理员电子邮件地址。 至此,在当前目录下生成了demoCA的目录,CA的证书就在该目录下,文件名为cacert.pem 生成服务器的证书请求 # ./CA -newreq 屏幕上出现如下的提示: Generating a 1024 bit RSA private key .....................................................++++++ .....++++++ writing new private key to 'newreq.pem' Enter PEM pass phrase: Verifying password - Enter PEM pass phrase: 此时要求输入和验证服务器的私钥口令、国家代码(中国是CN)、省份、城市或地区、组织或企业名称、部门名称、CA的名称或服务器的主机名称、管理员电子邮件地址。 Please enter the following 'extra' attributes to be sent with your certificaterequest A challenge password []: An optional company name []: .Request (and private key) is in newreq.pem 这是要求输入服务器的相关信息。 此时,在当前目录下生成了一个名为newreq.pem的文件,包含了要生成服务器数字证书的请求。 签署证书 # ./CA -sign 屏幕上出现如下的提示: Using configuration from /usr/share/ssl/openssl.cnf Enter PEM pass phrase: 此时一样需要输入CA的私钥口令、国家代码(中国是CN)、省份、城市或地区、组织或企业名称、部门名称、CA的名称或服务器的主机名称、管理员电子邮件地址。 Certificate is to be certified until Nov 19 13:46:19 2002 GMT (365 days) Sign the certificate? [y/n]:y 这时显示证书请求文件中的各项信息,并询问是否要签署证书,回答y,进行签署。 1 out of 1 certificate requests certified, commit? [y/n]y 回答y,会显示已经签署的证书的信息,并在当前目录下生成服务器的证书文件newcert.pem。 # mkdir /usr/local/apache2/conf/ssl.crt/ # mkdir /usr/local/apache2/conf/ssl.key/ # cp newcert.pem /usr/local/apache2/conf/ssl.crt/server.pem # cp newreq.pem /usr/local/apache2/conf/ssl.key/server.pem 更改服务器的证书文件的相关配置 # vi /usr/local/apache2/conf/extra/httpd-ssl.conf 查找并修改 # Server Certificate: # Point SSLCertificateFile at a PEM encoded certificate. If # the certificate is encrypted, then you will be prompted for a # pass phrase. Note that a kill -HUP will prompt again. Keep # in mind that if you have both an RSA and a DSA certificate you # can configure both in parallel (to also allow the use of DSA # ciphers, etc.) SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.pem #SSLCertificateFile /usr/local/apache2/conf/server-dsa.crt # Server Private Key: # If the key is not combined with the certificate, use this # directive to point at the key file. Keep in mind that if # you've both a RSA and a DSA private key you can configure # both in parallel (to also allow the use of DSA ciphers, etc.) SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server.pem #SSLCertificateKeyFile /usr/local/apache2/conf/server-dsa.key 示例文件 在SSL的根目录中生成一个index.html,它是如下所示: <html> 这是SSL示例! </html> 测试 假如Web服务器的DNS名称是www.cnprint.org. 在浏览器的URL地址栏里输入 http://www.cnprint.org/,浏览器便会显示APACHE安装时确省的Test Page. 在浏览器的URL地址栏里输入 https://www.cnprint.org/,注意:是 https 而不是http ! 浏览器会提示站点已经采用了SSL进行数据的加密传输.由于我们的CA证书不是浏览器缺省的信任的根证书,所以,浏览器会说无法确认服务器的证书可信。暂时不管,一直NEXT,最后,浏览器会显示:这是SSL示例! 可以把CA的证书放在非SSL的站点上,让浏览器下载并安装CA证书,并将其设置成可信任的根证书,便可解决上面的问题.8 解除HTTPD起动时的口令输入。 由于安全的原因,Web服务器的私钥是口令加密了的,每次重新起动HTTPD或Linux时,都会要求输入Web服务器的私钥的口令。 如果要解除HTTPD起动时的口令输入,可以这样: # cd /usr/local/apache2/conf/ssl.key/ # cp server.pem server.pem.org # openssl rsa -in server.pem.org -out server.pem # chmod 400 server.pem 另外在网上看到一个方法,我没有试。有兴趣的可以试下。 创建SSL密码自动应答文件,否则每次Apache启动的时候,都会要求你输入SSL的密码. 创建 /usr/local/apache2/conf/ssl.key/sendsslpwd ,内容如下. #!/bin/bash SSLpasswd="YOUR PASSPHRASE" echo $SSLpasswd chmod 755 /usr/local/apache2/conf/ssl.key/sendsslpwd 此时,Web服务器的私钥已经没有口令加密,一定要确保server.pem文件除root外,任何用户均无权读取它。
17、安装phpmyadmin,管理mysql数据库 # cd /usr/local/apache2/htdocs/ # wget http://nchc.dl.sourceforge.net/sourc...-8-only.tar.gz # tar zxvf phpMyAdmin-2.11.1-all-languages-utf-8-only.tar.gz # mv phpMyAdmin-2.11.1-all-languages-utf-8-only phpmyadmin # cd phpmyadmin/libraries 修改配置文件 # vi config.default.php 找到这几行进行修改: $cfg['Servers'][$i]['auth_type'] = 'http'; // Authentication method (valid choices: config, http, HTTP, signon or cookie) $cfg['Servers'][$i]['user'] = 'root'; // MySQL user $cfg['Servers'][$i]['password'] = 'PASSWORD'; // MySQL password (only needed
五、服务器安全配置
18、编译安装mod_security mod_security是一个集入侵检测和防御引擎功能的开源web应用安全程序(或web应用程序防火墙)。 它以Apache Web服务器的模块方式运行, 目标是增强web应用程序的安全性, 防止web应用程序受到已知或未知的攻击。 # cd /usr/local/src # wget http://www.modsecurity.org/download/...e_2.1.3.tar.gz # tar -zxvf modsecurity-apache_2.1.3.tar.gz # cd modsecurity-apache_2.1.3/apache2 # cat /usr/local/apache2/conf/httpd.conf | grep "ServerRoot" | grep -v "#" ServerRoot "/usr/local/apache2" # #vi Makefile top_dir = /usr/local/apache2 # # make # make install vi /usr/local/apache2/conf/httpd.conf 加载下列模块 LoadModule unique_id_module modules/mod_unique_id.so LoadModule security2_module modules/mod_security2.so 添加一行: Include conf/modsecurity/*.conf 保存。 cd /usr/local/src/modsecurity-apache_2.1.3/rules # mkdir /usr/local/apache2/conf/modsecurity # cp *.conf /usr/local/apache2/conf/modsecurity/ 根据你的需要,You may want to edit and customize modsecurity_crs_10_config.conf. Additionally you may want to edit modsecurity_crs_30_http_policy.conf which enforces an application specific HTTP protocol usage. 重启apache
19、Iptables规则 vi /usr/local/sbin/fw.sh 将以下脚本命令粘贴到 fw.sh 文件中。
#!/bin/bash # Stop iptables service first service iptables stop # Load FTP Kernel modules /sbin/modprobe ip_conntrack_ftp /sbin/modprobe ip_nat_ftp # Inital chains default 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 # Accept Established Connections /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -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 2121 -j ACCEPT # SSH Service /sbin/iptables -A INPUT -p tcp --dport 59825 -j ACCEPT # Anti DDOS /sbin/iptables -I INPUT -p tcp --syn -m ttl --ttl-eq 117 -j DROP /sbin/iptables -I INPUT -p tcp --syn -m length --length :40 -j DROP
21、mysql优化及安全设置 Mysql的优化设置 打开/etc/my.cnf文件,修改以下设置,如果没有,可手动添加。调整设置时,请量力而行,这与你的服务器的配置有关,特别是内存大小。以下设置比较适合于1G内存的服务器,但并不绝对。 #指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。通过检查状态值Key_read_requests和Key_reads,可以知道 key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用show status like 'key_reads'获得)。key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是 MyISAM表,也要使用该值。可以使用检查状态值created_tmp_disk_tables得知详情。 key_buffer = 384M #要求MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。试图设定back_log高于你的操作系统的限制将是无效的。默认数值是50 back_log = 200 #一个包的最大尺寸。消息缓冲区被初始化为net_buffer_length字节,但是可在需要时增加到max_allowed_packet个字节。缺省地,该值太小必能捕捉大的(可能错误)包。如果你正在使用大的BLOB列,你必须增加该值。它应该象你想要使用的最大BLOB的那么大。 max_allowed_packet = 4M #允许的同时客户的数量。增加该值增加 mysqld要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到 Too many connections 错误。 默认数值是100 max_connections = 1024 #指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加table_cache的值。如果你发现open_tables等于 table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用show status like 'Open_tables'获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。 table_cache = 512 #每个线程排序所需的缓冲 sort_buffer_size = 4M #当一个查询不断地扫描某一个表,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果你认为连续扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。 read_buffer_size = 4M #加速排序操作后的读数据,提高读分类行的速度。如果正对远远大于可用内存的表执行GROUP BY或ORDER BY操作,应增加read_rnd_buffer_size的值以加速排序操作后面的行读取。仍然不明白这个选项的用处…… read_rnd_buffer_size = 8M #用于REPAIR TABLE。不明白这个选项的用处,百度上找到的设置方向也是五花八门,有128M、64M、32M等,折中选一个。 myisam_sort_buffer_size = 64M #可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可以这个变量值。通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。 thread_cache_size = 128 #查询结果缓存。第一次执行某条SELECT语句的时候,服务器记住该查询的文本内容和它返回的结果。服务器下一次碰到这个语句的时候,它不会再次执行该语句。作为代替,它直接从查询缓存中的得到结果并把结果返回给客户端。 query_cache_size = 32M #最大并发线程数,cpu数量*2 thread_concurrency = 2 #设置超时时间,能避免长连接 wait_timeout = 120 #关闭不需要的表类型,如果你需要,就不要加上这个 skip-innodb skip-bdb 关于mysql的优化设置及检查,这篇文章很值得一看 http://tech.itdb.cn/n/200607/27/n20060727_30398.shtml Mysql的安全设置 打开/etc/my.cnf文件,修改以下设置,如果没有,可手动添加。 #取消文件系统的外部锁 skip-locking #不进行域名反解析,注意由此带来的权限/授权问题 skip-name-resolve #禁止MySQL中用“LOAD DATA LOCAL INFILE”命令。这个命令会利用MySQL把本地文件读到数据库中,然后用户就可以非法获取敏感信息了。网络上流传的一些攻击方法中就有用它的,它也是很多新发现的SQL Injection攻击利用的手段! local-infile = 0 #关闭远程连接,即3306端口。这是MySQL的默认监听端口。由于此处MySQL只服务于本地脚本,所以不需要远程连接。尽管MySQL内建的安全机制很严格,但监听一个TCP端口仍然是危险的行为,因为如果MySQL程序本身有问题,那么未授权的访问完全可以绕过MySQL的内建安全机制。(你必须确定,你是否真的不需要远程连接mysql) skip-networking 修改完my.cnf后,还需要对mysql的用户名、帐号、及默认数据库进行调整 首先先登录mysql,在终端窗口输入 /usr/local/mysql/bin/mysql -u root -p 然后会提示输入密码,输入正确密码后,会出现mysql>提示符。 输入以下命令: mysql>use mysql; mysql>update user set user="centos" where user="root"; (将mysql的root用户名修改成centos,防止root的密码被暴力破解) mysql>select Host,User,Password,Select_priv,Grant_priv from user; mysql>delete from user where user=''; (删除user用户) mysql>delete from user where password=''; (删除user用户) mysql>delete from user where host=''; (删除user用户) mysql>drop database test; (删除默认的test数据库) mysql>flush privileges; (刷新mysql的缓存,让以上设置立即生效) mysql>quit; 为了使以上优化和安全设置生效,请重启Mysql服务或Linux。 关于Mysql的安全设置,这篇文章很值得一看 http://www.unixren.com/linux/bencandy.php?fid=21id=459
22、操作系统安全调整 1、 CentOS或Red Had Enterprise Linux 4 的用户要首先要打开SElinux,方法是修改/etc/selinux/config文件中的SELINUX="" 为enforcing 。它可以保证你的系统不会非正常的崩溃。有些人认为应该关闭,我强烈不推荐,当然只是将centos用来玩玩,不是用于实际服务器则无所谓了。 2、启用iptables 防火墙,对增加系统安全有许多好处。设置好防火墙的规则。 3、执行setup 关闭那些不需要的服务 ,记住少开一个服务,就少一个危险。 4、禁止Control-Alt-Delete 键盘关闭命令 在"/etc/inittab" 文件中注释掉下面这行(使用#): ca::ctrlaltdel:/sbin/shutdown -t3 -r now 改为: #ca::ctrlaltdel:/sbin/shutdown -t3 -r now 为了使这项改动起作用,输入下面这个命令: # /sbin/init q 5、给"/etc/rc.d/init.d" 下script文件设置权限 给执行或关闭启动时执行的程序的script文件设置权限。 # chmod -R 700 /etc/rc.d/init.d/* 这表示只有root才允许读、写、执行该目录下的script文件。 6、修改"/etc/host.conf"文件 "/etc/host.conf"说明了如何解析地址。编辑"/etc/host.conf"文件(vi /etc/host.conf),加入下面这行: # Lookup names via DNS first then fall back to /etc/hosts. order bind,hosts # We have machines with multiple IP addresses. multi on # Check for IP address spoofing. nospoof on 第一项设置首先通过DNS解析IP地址,然后通过hosts文件解析。第二项设置检测是否"/etc/hosts"文件中的主机是否拥有多个IP地址(比如有多个以太口网卡)。第三项设置说明要注意对本机未经许可的电子欺骗。 7、使"/etc/services"文件免疫 使"/etc/services"文件免疫,防止未经许可的删除或添加服务: # chattr +i /etc/services 8.阻止你的系统响应任何从外部/内部来的ping请求。 既然没有人能ping通你的机器并收到响应,你可以大大增强你的站点的安全性。你可以加下面的一行命令到/etc/rc.d/rc.local,以使每次启动后自动运行。 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 9、对你的系统上所有的用户设置资源限制可以防止DoS类型攻击(denial of service attacks) 如最大进程数,内存数量等。例如,对所有用户的限制象下面这样: vi /etc/security/limits.conf 下面的代码示例中,所有用户每个会话都限制在 10 MB,并允许同时有四个登录。第三行禁用了每个人的内核转储。第四行除去了用户 bin 的所有限制。ftp 允许有 10 个并发会话(对匿名 ftp 帐号尤其实用);managers 组的成员的进程数目限制为 40 个。developers 有 64 MB 的 memlock 限制,wwwusers 的成员不能创建大于 50 MB 的文件。 清单 3. 设置配额和限制 * hard rss 10000 * hard maxlogins 4 * hard core 0 bin - ftp hard maxlogins 10 @managers hard nproc 40 @developers hard memlock 64000 @wwwusers hard fsize 50000 要激活这些限制,您需要在 /etc/pam.d/login 底部添加下面一行: session required /lib/security/pam_limits.so。 10、注释掉不需要的用户和用户组。 vipw root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin news:x:9:13:news:/etc/news: uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin rpm:x:37:37::/var/lib/rpm:/sbin/nologin haldaemon:x:68:68:HAL daemon:/:/sbin/nologin netdump:x:34:34:Network Crash Dump user:/var/crash:/bin/bash nscd:x:28:28:NSCD Daemon:/:/sbin/nologin sshd:x:74:74:Privilerpc:x:32:32:Portmapper RPC user:/:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin pcap:x:77:77::/var/arpwatch:/sbin/nologin xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin gdm:x:42:42::/var/gdm:/sbin/nologin pegasus:x:66:65:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin htt:x:100:101:IIIMF Htt:/usr/lib/im:/sbin/nologin wangjing:x:500:500::/home/wangjing:/bin/bash mysql:x:101:102:MySQL server:/var/lib/mysql:/bin/bash apache:x:48:48:Apache:/var/www:/sbin/nologin ge-separated SSH:/var/empty/sshd:/sbin/nologin 对于不需要的用户全部加 # 注释掉。注意,我不建议直接删除,当你某种原因需要某个用户时,自己重新会很麻烦。 vi /etc/group root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin,adm adm:x:4:root,adm,daemon tty:x:5: disk:x:6:root lp:x:7:daemon,lp mem:x:8: kmem:x:9: wheel:x:10:root mail:x:12:mail news:x:13:news uucp:x:14:uucp man:x:15: games:x:20: gopher:x:30: dip:x:40: ftp:x:50: lock:x:54: nobody:x:99: users:x:100: dbus:x:81: floppy:x:19: vcsa:x:69: rpm:x:37: haldaemon:x:68: utmp:x:22: netdump:x:34: nscd:x:28: slocate:x:21: sshd:x:74: rpc:x:32: rpcuser:x:29: nfsnobody:x:65534: mailnull:x:47: smmsp:x:51: pcap:x:77: xfs:x:43: ntp:x:38: gdm:x:42: pegasus:x:65: htt:x:101: wangjing:x:500: mysql:x:102: apache:x:48: 对于不需要的用户组全部加 # 注释掉。注意,我不建议直接删除,当你某种原因需要某个用户组时,自己重新会很麻烦。 11、用chattr命令给下面的文件加上不可更改属性。 # chattr +i /etc/passwd # chattr +i /etc/shadow # chattr +i /etc/group # chattr +i /etc/gshadow 注意执行这个操作后,以root身份都不能向系统增加用户或者修改密码了。如果我们要增加用户或者修改密码的。应该先用chattr -i /etc/passwd等命令解除不可写设置,再进行操作。 12、修改sshd的端口。 修改/etc/ssh/sshd_config,将里面的 Port 改为 59825,(具体的端口你随意。当然不能和其他程序的端口冲突了)。并注释掉前面的#号,然后 pkill sshd service sshd start 就行了 注意最好在本地修改这个端口,否则容易出现把自己锁在外面的情况。修改了本处端口后,还要注意修改防火墙的ssh端口。 13、 内核参数调整 vi /etc/sysctl.conf net.ipv4.conf.default.accept_source_route=0 net.ipv4.icmp_echo_ignore_broadcasts=1 #net.ipv4.icmp_echo_ignore_all=1 net.ipv4.icmp_ignore_bogus_error_responses=1 net.ipv4.ip_conntrack_max=65535 net.ipv4.tcp_syn_retries=1 net.ipv4.tcp_fin_timeout=5 net.ipv4.tcp_synack_retries=1 net.ipv4.tcp_syncookies=1 net.ipv4.route.gc_timeout=100 net.ipv4.tcp_keepalive_time=500 net.ipv4.tcp_max_syn_backlog=10000 # sysctl -p //查看 14、经常检查系统日志。系统日志主要位于/var/log/目录下。防患于未然。 通过以上设置你的系统一般来说就比较安全了。当然安全与不安全是道与魔的斗争。 经过这几个步骤,我们一个比较安全的LAMP服务器就环境基本建立成功啦。感觉上也不是很难,是吧?
六、日常常用的管理功能 # cd /usr/local/src # wget ftp://ftp.ncftp.com/ncftp/ncftp-3.2.1-src.tar.gz # tar zxvf ncftp-3.2.1-src.tar.gz # cd ncftp-3.2.1-src # ./configure --prefix=/usr/local/ncftp # make make install