动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 操作系统 > FreeBSD教程
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ FreeBSD教程 ]的信息



本月文章推荐
.如何使用IP Alias?.
.在FREEBSD 5中使用MRTG画出Packe.
.FreeBSD WEB服务器架设笔记.
.FreeBSD下Apache2.0运行模型分析.
.FreeBSD kernel 编译大法(一).
.FreeBSD下有关设备名,分区和moun.
.在FREEBSD 5.2中使用Pureftpd + .
.FreeBSD 4.0 Kernel Hacking Gui.
.FreeBSD ipfw 防火墙基础指南.
.FreeBSD kernel 编译大法(二)ker.
.swatch监控程式.
.FreeBSD 5.0 硬盘安装指南.
.在FreeBSD上运行Windows软件.
.FreeBSD的硬盘分隔策略.
.FreeBSD 4.0 Kernel Hacking Gui.
.FreeBSD handbook中文版 11 打印.
.FreeBSD FTP 的架設.
.FreeBSD命令 lastcomm介绍 1..
.FreeBSD下设置modem和modem的通用.
.FreeBSD开发环境解决方案.

FreeBSD网站平台建设全过程 第四步

发表日期:2005-3-28 |


第四步:安装配置ftp服务器

  本文根据网上流行的一篇文章整理改编而成,并修正了原文的一些小错误。

  由于为每一个需要使用ftp服务的用户建立系统帐户会影响系统的安全,所以我们使用数据库用户进行ftp用户验证。

  系统组成:

Proftpd1.2.7
proftpd-mod-quotatab-1.2.4
mysql3.23

  因为ports里没有proftpd-mod-quotatab-1.2.4模块,我们下载源代码安装。

  下载源代码包:(必须下载相同版本的源代码包)

  到http://www.proftpd.orgftp://ftp.servus.at/ProFTPD/distrib/source/proftpd-1.2.7.tar.gz去下载proftpd-1.2.7.tar.gz。

  到http://www.castaglia.org/proftpd/ 去下载proftpd-mod-quotatab-1.2.4.tar.gz。(1.2.5 版本的mod_quotatab是用在1.2.8rc1上的)

  用ftp将它们上传到/home/ylf/app目录。

  然后解压缩源代码包:

# cd /home/ylf/app
# tar zxvf proftpd-1.2.7.tar.gz
# tar zxvf proftpd-mod-quotatab-1.2.4.tar.gz

  进入mod-quotatab目录

# cd mod_quotatab

  把mod_quotatab中的文件拷贝到proftpd 中的modules 目录中

# cp * ../proftpd-1.2.7/modules

  在开始运行configure之前,我们要先改动一个文件

  进入 proftpd-1.2.7/contrib 目录

# cd /home/ylf/app/proftpd-1.2.7/contrib

  修改 mod_sql_mysql.c

# vi mod_sql_mysql.c

  找到#include <mysql/mysql.h> 把他改为你的实际路径,这里是:

#include </usr/local/include/mysql/mysql.h>

  然后编译安装:

# cd /home/ylf/app/proftpd-1.2.7
#./configure --prefix=/usr/local/proftpd --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql --with-includes=/usr/local/include/mysql --with-libraries=/usr/local/lib/mysql
# make
# make install

  进入到proftpd配置文件所在目录

# cd /usr/local/proftpd/etc

  备份原配置文件

# mv proftpd.conf proftpd.conf.bak

  然后编辑新的配置文件proftpd.conf

# vi proftpd.conf

  我的proftpd.conf内容如下:

# This is a basic ProFTPD configuration file (rename it to
# 'proftpd.conf' for actual use. It establishes a single server
# and a single anonymous login. It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.

ServerName "ftpx.3322.org"
ServerType standalone
DefaultServer on

# 用户登陆时不显示ftp服务器版本信息
ServerIdent off

# Port 21 is the standard FTP port.
Port 21

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022

MaxLoginAttempts 3
TimeoutLogin 120
TimeoutIdle 600
TimeoutNoTransfer 900
TimeoutStalled 3600

MaxClients 100

# 设置每台主机最多并发连接数
MaxClientsPerHost 3

AllowOverwrite no
AllowStoreRestart on
UseReverseDNS off

# 设置如果shell为空时允许用户登录
RequireValidShell off

# 将用户限制在自己的主目录下
DefaultRoot ~ ftpusers
DefaultRoot ~ FTPGRP

# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd).
MaxInstances 30

# Set the user and group under which the server will run.
User FTPUSR
Group FTPGRP

# Normally, we want files to be overwriteable.
<Directory />
AllowOverwrite on
</Directory>

# A basic anonymous configuration, no upload directories.
# 匿名登录设置。匿名用户目录为/ftp
<Anonymous /ftp>
User ftp
Group ftpusers

# We want clients to be able to login with "anonymous" as well as "ftp"
UserAlias anonymous ftp

# Limit the maximum number of anonymous logins
MaxClients 10

# We want 'welcome.msg' displayed at login, and '.message' displayed
# in each newly chdired directory.
DisplayLogin welcome.msg
DisplayFirstChdir .message

# Limit WRITE everywhere in the anonymous chroot
#<Limit WRITE>
# DenyAll
#</Limit>

</Anonymous>

# 数据库联接的信息,FTP是数据库名,localhost是主机名,root是连接数据库的用户名,#123456是密码
#(如果没有密码留空)
SQLConnectInfo FTP@localhost root 123456

# 数据库认证的类型
SQLAuthTypes Backend Plaintext

# 指定用来做用户认证的表的有关信息。("FTPUSERS"和"FTPGRPS"是数据表名字,等一会
# 在下面建立)
SQLUserInfo FTPUSERS userid passwd uid gid homedir shell
SQLGroupInfo FTPGRPS groupname gid members

# 数据库的鉴别
SQLAuthenticate users groups usersetfast groupsetfast

# 如果home目录不存在,则系统会根据它的home项新建一个目录
SQLHomedirOnDemand on

# 启用磁盘限额
QuotaDirectoryTally on

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

QuotaEngine on

# 磁盘限额日志记录
QuotaLog "/var/log"

# 打开磁盘限额信息,当登陆FTP帐户后,使用命令 "quote SITE QUOTA" 后可显示当前用#户的磁盘限额
QuotaShowQuotas on

# SQL调用语句,不用修改
SQLNamedQuery get-quota-limit SELECT "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 FROM quotalimits WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM quotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" quotatallies

SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" quotatallies

QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

  下面为ftp用户建立相应的数据库和表

  进入mysql数据库命令状态:

# mysql –p

  提示输入密码

  建立数据库FTP(注意大小写和每句话后面的“;”)

CREATE DATABASE FTP;

  然后在这个数据库中建立一个用户表FTPUSERS,这个表是必须的:

use FTP;

create table FTPUSERS (
userid TEXT NOT NULL,
passwd TEXT NOT NULL,
uid INT NOT NULL,
gid INT NOT NULL,
homedir TEXT,
shell TEXT
);

  此表格是为了用户认证所需要的,其中userid、passwd是必不可少的,userid是用做FTP服务的用户名;passwd是指此用户的密码;uid是系统用户的ID,也就是所映射的系统用户;gid是所属系统组的ID;homedir是该用户所在的HOME目录;shell可以为该用户指定相应的shell。当然你可以建立更多的字段,例如:用来记录用户登录次数的count,或者是日期的date,如果你对配置熟悉了之后,你可以根据自己的喜欢添加更多的功能。在此就不多讲。

  为了提供更多的功能,我们添加另外一个需要的表:FTPGRPS,也就是确定组的表格,这里是它的格式:

create table FTPGRPS (
groupname TEXT NOT NULL,
gid SMALLINT NOT NULL,
members TEXT NOT NULL
);

  其中groupname是组的名称,gid是系统组的ID,members是组的成员。注意:多成员,他们之间要用逗号隔开,不能使用空格。

  为FTP用户建立相应的系统用户。

  在本例中,将整个FTP服务只提供一个有效的系统用户FTPUSR和组FTPGRP,当然你也可以设置多个系统用户。但出于安全的考虑,我只设一个,用他来启动FTP daemon,并把所有的FTP用户映射过这个用户。

  先建立FTPGRP组:

# pw groupadd FTPGRP -g 2001

  建立FTPUSR用户:

# pw adduser FTPUSR -u 2001 -g 2001 -d /home/FTP -s /sbin/nologin

  为FTPUSR建立HOME,把所有的FTP user 活动空间全放在此目录下:

# mkdir /home/FTP
# chown FTPUSR /home/FTP
# chgrp FTPGRP /home/FTP

  下面为磁盘限额建立数据表:

use FTP


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
);

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表不需要作修改,它记录了用户当前的磁盘使用情况,由程序自动记录。

  要注意的是quotalimits 表中一些字段的含意

  quota_type 磁盘限额的鉴别,可以设置单个用户,也可以设置一个组中的全部用户,还可以设置全部用户;

  bytes_in_avail 上传最大字节数,就是FTP用户空间容量;(设置这个字段的时候是以byte(字节)为单位,如果要限额在10M,那就是10240000,下面也一样)

  bytes_out_avail 下载最大字节数,需要注意的是,这个字段中记录的是用户总共能从服务器上下载多少数据,数据是累计的;

  bytes_xfer_avail 总共可传输的文件的最大字节数(上传和下载流量)需要注意的是,这个字段中记录的是用户总共能传输文件的最大字节数,数据是累计的;

  files_in_avail INT 总共能上传文件的数目;

  files_out_avail INT 能从服务器上下载文件的总数目;

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

  测试:

  首先停掉inetd的ftp服务

# ps ax|grep inetd

  得到inetd的线程号

# kill 得到的线程号

  启动proftpd

# cd /usr/local/proftpd/sbin
# ./proftpd

  如果出现错误提示可以进入proftpd的调试模式进行调试:

# ./proftpd -n -d 5 -c /usr/local/proftpd/etc/proftpd.conf

  proftpd就会将调试信息打印到consle上以供调试之用。

  添加一个测试用户并为他设置磁盘限额:

  添加用户

use FTP

INSERT INTO FTPUSERS (userid, passwd, uid, gid, homedir, shell)
valueS ('user1', '999999', '2001', '2001', '/home/FTP/user1', '' );

  设置磁盘限额

  将上面建立的user1帐号给予10M空间,最多能上传500个文件到服务器上,文件传输流量为20M,只能传输10个文件。

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 ('user1', 'user', 'false', 'soft', '10240000', '0', '2048000', '500', '0', '10');

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

  测试磁盘限额

  在windows提示符下登录ftp服务器。输入用户名user1,密码999999

c:\> ftp 192.168.0.1

  运行quote SITE QUOTA显示当前用户的磁盘限额

ftp> quote SITE QUOTA
200-The current quota for this session are [current/limit]:
Name: user1
Quota Type: User
Per Session: False
Limit Type: Soft
Uploaded Kb: 0.00/10000.00
Downloaded Kb: unlimited
Transferred Kb: 0.00/2000.00
Uploaded files: 0/500
Downloaded files: unlimited
Transferred files: 0/10
200 Please contact root@wwwx.3322.org if these entries are inaccurate

  数据库用户验证和磁盘限额测试成功!

  另:如果添加了FTPGRPS表,也可以为此添加记录,不过一定要注意在members的字段多个成员一定要用逗号隔开。

INSERT INTO FTPGRPS VALUES ('FTPGRP', 2001, 'FTPUSR');

  设置匿名登录:

  本文的ftp服务器提供了匿名登录服务。对于匿名登录用户,我专门在硬盘上划分了一个2G的分区/ftp,所有的匿名用户文件都放在这个单独的分区里。

  添加匿名系统用户组ftpusers和匿名用户ftp

# pw groupadd ftpusers
# pw useradd ftp -g ftpusers -d /ftp -s /sbin/nologin

  如果ftp用户已经存在使用如下格式

# pw usermod ftp –g ftpusers –d /ftp –s /sbin/nologin

  在/ftp下建立匿名用户目录并设置权限

# mkdir /ftp/incoming
# mkdir /ftp/pub
# mkdir /ftp/bin
# mkdir /ftp/etc
# chown ftp /ftp/incoming
# chgrp ftpusers /ftp/incoming

  测试:

  在浏览器地址栏输入ftp://192.168.0.1 ,应该显示刚才建立的几个目录。进入incoming目录,应该可以在里面新建文件夹或文件。这样就完成对匿名ftp的测试!

  注意:由于我的这个配置文件设置了每台主机的最多并发连接数为3

MaxClientsPerHost 3

  所以打开多个ftp登录窗口时会报错。

  建立proftpd的启动脚本:

# cd /usr/local/etc/rc.d
# vi proftpd.sh

  proftpd.sh内容如下:

#!/bin/sh

case "$1" in

start)
/bin/mkdir -p /var/run/proftpd
if [ -x /usr/local/proftpd/sbin/proftpd ]; then
/usr/local/proftpd/sbin/proftpd && echo -n ' proftpd'
fi
;;

stop)
killall proftpd
;;
*)
echo "$0 start | stop"
;;

esac

  设置脚本可执行

# chmod 750 proftpd.sh

  Proftpd全部安装结束后,就可以不用inetd(Internet超级服务器)了。

  编辑/etc/rc.conf文件,将inetd=”YES”改成inetd=”NO”。

  编辑/etc/inetd.conf文件,将带有ftp字样的行前面加上#号。

  这样在重新启动后,inetd将不会自动运行。

  使用本文的ftp服务器加上第三步介绍的web服务器应该可以提供比较基本的虚拟主机服务了。以上面建立的测试用户user1为例,其方法是:

  设置了数据库用户和磁盘限额后,编辑apache的配置文件/usr/local/etc/rc.d/httpd.conf,为用户配置虚拟主机并将文档目录指向/home/FTP/user1。这样user1就可以自己更新主页了。

上一篇:如何使用IP Alias? 人气:11029
下一篇:FreeBSD网站平台建设全过程 第五步 人气:12570
浏览全部FreeBSD的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-23 Menalto Gallery v2.3 Rc1 多国语
2008-7-23 深度学习网址导航系统 v2.6.1
2008-7-23 因特达crm2008客户关系管理系统
2008-7-23 60度 CMS v1.0 Build 080723
2008-7-23 幻影动漫网视频系统(Ppdong) v1.
2008-7-23 好易祝福墙 2008
2008-7-23 APJE私服发布系统 v2.0 PHP版
2008-7-23 毕业论文在线指导系统源码
2008-7-23 Jacky法律在线网站源码
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵