极限首页 业界焦点 软件工程师之路 系统工程师之路 网络工程师之路 软件下载 技术社区
 体验 Wine: Windows 到 Li
 Linux操作系统打印机配置全
 驱动SD/MMC读卡器
 Linux发行版制作指南
 redhat 安装程序 anaconda
 构造Linux的图形化安装程序
 使用Linux实现负载均衡
 Xen和虚拟化技术(一)
 Linux 操作系统安装盘的定
 在Linux上实现高可用服务
 体验 Wine: Windows 到 Li
 Linux操作系统打印机配置全
 驱动SD/MMC读卡器
 Linux发行版制作指南
 redhat 安装程序 anaconda
 构造Linux的图形化安装程序
 使用Linux实现负载均衡
 Xen和虚拟化技术(一)
 Linux 操作系统安装盘的定
 在Linux上实现高可用服务

Shell 中文手册

Python 2.3 中文手册

Python 2.4 中文手册

Mysql 4.x 中文手册

PHP 4.x 中文手册

Apache 2.x 中文手册
更多手册

站内搜索:
当前位置:首页>>系统工程师之路>>解决方案>>正文
用Linux搭建全自动虚拟主机(二)
时间:2005-04-27 作者:王光辉 来源:赛迪网

  我们在上一期介绍了利用Linux来搭建全自动虚拟主机的准备工作及系统部分软件的安装与配置。下面继续讲解磁盘限额的具体配置。

9.磁盘限额配置

(1)磁盘限额配置

磁盘限额中的磁盘使用情况记录:

QuotaDirectoryTally on


磁盘限额单位 b"|"Kb"|"Mb"|"Gb":

QuotaDisplayUnits "Kb"
QuotaEngine on


磁盘限额日志记录:

QuotaLog /usr/local/proftpd/logs/Quota.log


打开磁盘限额信息显示:

QuotaShowQuotas on


当登录FTP账户后,使用命令“quote SITE QUOTA”可显示当前用户的磁盘限额。

(2)建立磁盘限额的MySQL数据表

CREATE TABLE quotalimits (
name VARCHAR(30),
quota_type ENUM("user", "group", "class", "all") NOT NULL,
per_session ENUM("false", "true") NOT NULL,
limit_type ENUM("soft", "hard") NOT NULL,
bytes_in_avail FLOAT NOT NULL,
bytes_out_avail FLOAT NOT NULL,
bytes_xfer_avail FLOAT NOT NULL,
files_in_avail INT UNSIGNED NOT NULL,
files_out_avail INT UNSIGNED NOT NULL,
files_xfer_avail INT UNSIGNED NOT NULL
);


quotalimits表中部分字段的含义如下。

quota_type:磁盘限额的鉴别。

bytes_in_avail:上传最大字节数,即FTP用户的空间容量。

bytes_out_avail:下载最大字节数。

bytes_xfer_avail:总共可传输文件的最大字节数(上传和下载流量)。

files_in_avail:总共能上传文件的数目。

files_out_avail:能从服务器上下载文件的总数目。

files_xfer_avail:总共可传输文件的数目(上传和下载)。

CREATE TABLE quotatallies (
name VARCHAR(30) NOT NULL,
quota_type ENUM("user", "group", "class", "all") NOT NULL,
bytes_in_used FLOAT NOT NULL,
bytes_out_used FLOAT NOT NULL,
bytes_xfer_used FLOAT NOT NULL,
files_in_used INT UNSIGNED NOT NULL,
files_out_used INT UNSIGNED NOT NULL,
files_xfer_used INT UNSIGNED NOT NULL
);


quotatallies表不需要做修改。它记录了用户当前的磁盘使用情况,由程序自动记录。

(3)建立用户并测试

开始使用磁盘限额,如对上期文章中建立的test账号给予100MB空间,最多能上传5000个文件到服务器,文件传输流量为200M,最多只能传输10000个文件。只要在MySQL中插入如下数据即可:

INSERT INTO `quotalimits` 
( `name` , `quota_type` , `per_session` , `limit_type` , `bytes_in_avail` , 
`bytes_out_avail` , `bytes_xfer_avail` , `files_in_avail` , `
files_out_avail` , `files_xfer_avail` )
VALUES ('test', 'user', 'false', 'soft', '102400000', '0', '20480000', '5000', '0', '10000');


不需要设置的部分可用0代替。

现在运行proftpd,登录test,使用“quote SITE QUOTA”命令就会显示test用户的磁盘使用情况。

ftp> quote SITE QUOTA
200-The current quota for this session are [current/limit]:
Name: test
Quota Type: User
Per Session: False
Limit Type: Soft
Uploaded Kb: 0.00/100000.00
Downloaded Kb: unlimited
Transferred Kb: 0.00/20000.00
Uploaded files: 0/5000
Downloaded files: unlimited
Transferred files: 0/10000
200 Please contact root@localhost if these entries are inaccurate


至此,磁盘限额配置部分完成。

10.启动和关闭proftpd脚本

#!/bin/sh
#ProFTPD files
FTPD_BIN=/usr/local/proftpd/sbin/proftpd
FTPD_CONF=/usr/local/proftpd/etc/proftpd.conf
PIDFILE=/usr/local/proftpd/var/proftpd.pid
#If PIDFILE exists, does it point to a proftpd process?
if [ -f $PIDFILE ]; then
pid=`cat $PIDFILE`
fi
if [ ! -x $FTPD_BIN ]; then
echo "$0: $FTPD_BIN: cannot execute"
exit 1
fi
case $1 in
start)
if [ -n "$pid" ]; then
echo "$0: proftpd [PID $pid] already running"
exit
fi
if [ -r $FTPD_CONF ]; then
echo "Starting proftpd..."
$FTPD_BIN -c $FTPD_CONF
else
echo "$0: cannot start proftpd -- $FTPD_CONF missing"
fi
;;
stop)
if [ -n "$pid" ]; then
echo "Stopping proftpd..."
kill -TERM $pid
else
echo "$0: proftpd not running"
exit 1
fi
;;
restart)
if [ -n "$pid" ]; then
echo "Rehashing proftpd configuration"
kill -HUP $pid
else
echo "$0: proftpd not running"
exit 1
fi
;;
*)
echo "usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0


11.Apache和PHP的安装和配置

(1)解压缩Apache和PHP安装文件:

#tar -zxvf php-4.3.3.tar.gz
#tar -zxvf apache_1.3.28.tar.gz
#tar -zxvf mod_security-1.6.tar.gz
(2)本例中/usr/local是一个单独分区,所以将Apache和PHP安装到该目录,这也是默认安装目录。
#cd apache.1.3.28
#./configure 
#cd ../php.4.3.3
#./configure --with-mysql=/usr/local/mysql --with-apache=../apache_1.3.28
#make 
#make install 
#cd apache_1.3.28 
#cp ../php4.3.3/libs/libphp4.a src/modules/php4/libphp4.a
#cp ../mod_security-1.6/apache1/mod_security.c src/modules/extra/ 
#./configure --prefix=/usr/local/apache 
--activate-module=src/modules/extra/mod_security
--enable-module=security
--activate-module=src/modules/php4/libphp4.a
--enable-module=vhost_alias  --enable-module=so
#make
#make install


(3)配置Apache

#cp /root/php4.3.3/php.ini-dist /usr/local/lib/php.ini
然后打开/usr/local/apache/conf/httpd.conf文件,加上下面两句:

 AddType application/x-httpd-php .php .inc .class
AddType application/x-httpd-php-source .phps


并在httpd.conf文件中加入如下语句:


     AddHandler application/x-httpd-php .php
     SecAuditEngine On
     SecAuditLog logs/audit_log
     SecFilterScanPOST On
     SecFilterEngine On
     SecFilterDefaultAction "deny,log,status:500"
     SecFilter "<(.| )+>"


更多关于mod_security的配置信息请阅读参考资料。

(4)测试

#vi test.php


(5)Apache的启动配置

#cp /usr/local/apache/bin/apachectl /etc/init.d/
#ln -s /etc/init.d/apachectl /etc/rc3.d/S99apache
#ln -s /etc/init.d/apachectl /etc/rc3.d/K99apache


(6)PHP的安全配置

PHP的安全配置主要是关于php.ini文件的安全配置。基本原则是一定要正确设置如下各设置选项,否则对于服务器的安全危害是非常严重的。

safe_mode=On


打开safe_mode,PHP脚本将只能访问和自己属主一样的文件,如/etc/passwd等文件将不能被访问。这是PHP安全体系里最重要的选项之一。

register_globals=Off


对于GET、POST、Cookie、Environment、Session的变量可以直接注册成全局变量。但是某些时候会引起安全问题。所以,自从PHP 4.2.0以来,php.ini中的该选项默认就是Off。

display_errors=Off


这样设置后,那些利用PHP的错误来定位目录等信息的攻击将失效。

log_errors=On


打开错误信息记录,可以把警告和错误信息记录放到下一项定义的日志文件里。这样可以方便检查程序的问题所在,也可以查看一些攻击行为。

error_log=/usr/local/apache/logs/php_error.log


错误日志文件的位置。
推荐】【 】【关闭


关于极限 | 站内地图 | 意见反馈 | 广告服务 | 数据服务 | 联系我们
本站所刊登的文章,技术资料,软件均整理于网络资源或本站原创,转载请务必联系原作者或本站。
Copyright ? 2001-2004 UPLinux.com All Rights Reserved.
本站唯一联系信箱:
京ICP备05010519