1.安装

新版的proftp中已经有mod_quotatab了,所以不用另外下载了。
# tar -zxvf proftpd-1.2.10.tar.gz
# cd proftpd-1.2.10
# ./configure \
--prefix=/usr/local/proftpd \
--with-includes=/usr/local/mysql/include/mysql \
--with-libraries=/usr/local/mysql/lib/mysql \
--with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql:mod_ratio
# make
# make install

设置自启动
# cp contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/proftpd
# chmod 755 /etc/rc.d/init.d/proftpd
# chkconfig --level 0123456 proftpd on

修改/etc/rc.d/init.d/proftpd
# vi /etc/rc.d/init.d/proftpd
把 PATH="$PATH:/usr/local/sbin" 改为 PATH="$PATH:/usr/local/proftpd/sbin"

修改/usr/local/proftpd/etc/proftpd.conf
# vi /usr/local/proftpd/etc/proftpd.conf
把Group nogroup 改为 Group nobody
再添加两行,使支持续传(默认是不支持的)
AllowRetrieveRestart on
AllowStoreRestart on

启动服务
# service proftpd start

2.proftpd的结构
proftpd.conf:这个是主要的 proftpd 的设定档。在 RPM 安装的范例中,所在的目录为 /etc/proftpd.conf ,在这个范例中,则是在/usr/local/proftpd/etc/proftpd.conf。

/usr/local/proftpd/sbin/proftpd:这个是主要的 proftpd 的 daemon 执行档。此外,这也是 TCP Wrappers (/etc/hosts.deny(allow)) 设定里头的服务档案档名。另外,当proftpd 在启动的时候会去读取设定档,也就是proftpd.conf这个档案,不过,我们也可以指定其它的档案来进行proftpd的设定。
# proftpd -c /usr/local/proftpd/etc/proftpd.conf

/usr/local/proftpd/bin/ftpcount:目前在主机上面使用 proftpd 的联机数,直接在指令列下达 ftpcount 即可。

/usr/local/proftpd/sbin/ftpshut:指定再过多久之后 proftpd 服务会终止。语法如下:
ftpshut [ -l min ] [ -d min ] time [ warning-message ... ]
-l min: 在ftp关闭服务之前的几分钟内,尝试建立新的ftp连接均不被接受
-d min: 在ftp关闭服务之前的几分钟内,已经建立的ftp连接将被中止
time: 在多少时间后,服务器将关闭ftp服务,格式有两种
+number 经过number分钟后关闭
MMHH 在今天MM:HH服务器将关闭

注意,这里我们用这个命令是把ftp服务给停了,但实际的proftpd进程还没停止,所以一般调试ftp会使用到这个命令

举例:
再经过30分钟后,FTP服务将关闭,在这之前的20分钟不可接受任何新的ftp连接,已经建立的在服务关闭前10分钟强制断线,并在客户端显示“FTP Server Will shutdown at time”
# ftpshut -l 20 -d 10 +30 "FTP Server Will shutdown at time"
其实ftpshut就是产生/etc/shutmsg ,你只要删除这个文件ftp又可以重新服务,或者直接
# ftpshut -R

/usr/local/proftpd/bin/ftpwho:可以用来察看目前有多少人使用 proftpd 这个服务。简单的语法直接下达 ftpwho 即可,如下所示:
# ftpwho
standalone FTP daemon [8451]:
10194 badbird [ 0m 11s] 0m 6s (idle)
Service class - 1 user
如上所示,目前有一个使用者,名为badbird的账号,在使用proftpd。

3.proftpd.conf

3.1.proftpd.conf 的设定方式
proftpd的设置和apache类似,它的配置基本格式如下:

#全局设置
设置项目1 参数1
设置项目2 参数2

#某个目录的设置

...
...


#关于匿名用户的设置

...
...

...
...



我们用到的比较多的可能是Limit的使用,Limit大致有以下动作,基本能覆盖全部的权限了,大家灵活使用就是了。

CMD:Change Working Directory 改变目录
MKD:MaKe Directory 建立目录的权限
RNFR: ReName FRom 更改目录名的权限
DELE:DELEte 删除文件的权限
RMD:ReMove Directory 删除目录的权限
RETR:RETRieve 从服务端下载到客户端的权限
STOR:STORe 从客户端上传到服务端的权限
READ:可读的权限,不包括列目录的权限,相当于RETR,STAT等
WRITE:写文件或者目录的权限,包括MKD和RMD
DIRS:是否允许列目录,相当于LIST,NLST等权限,还是比较实用的
ALL:所有权限
LOGIN:是否允许登陆的权限

针对上面这个Limit所应用的对象,又包括以下范围
AllowUser 针对某个用户允许的Limit
DenyUser 针对某个用户禁止的Limit
AllowGroup 针对某个用户组允许的Limit
DenyGroup 针对某个用户组禁止的Limit
AllowAll 针对所有用户组允许的Limit
DenyAll 针对所有用户禁止的Limit

关于限制速率的参数为:
TransferRate STOR|RETR 速度(Kbytes/s) user 使用者

3.2.常用参数说明

ServerName
#当使用者登入主机的时候,proftpd 会显示在 Client 端的 FTP 软件的一些基本讯息啦!

ServerType
#启动 proftpd 的方法,有两种方式,分别是 standalone与xinetd

DefaultServer
#预设的主机啊。这个项目可以设定为on或off,基本上,除非您有两个 IP 或者是设定了虚拟主机 (virtualhost), 否则这个项目都应该要设定为 on 才行!不然有些 uknown的联机会无法连接到您的 FTP 服务。

Port
# 设定主机的 FTP 命令信道端口!FTP命令通道通常为 21 ,您也可以更改,不过,这个设定只有当ServerType 为 standalone 时才有效。

Umask
# 与建立目录及档案的预设属性有关的设定喔!用 022 就够了!

MaxInstances
#同一时间允许的联机数目,这个设定项目与 process (PID) 有关!所以您的 FTP 主机中,proftpd 启用的 process 最多能有30个。这个与 MaxClients 不一样!

User 与 Group
#预设的服务启动者!后面接的使用者与群组必须在 /etc/passwd 与 /etc/group 里面存在方可!

MaxHostsPerUser 1 "对不起,每个帐户最多允许来源ip为1个"
#MaxHostsPerUser 对防止ftp帐号还是比较有用的。

MaxClientsPerUser 1 "对不起,每个帐户在每个客户端最多可以同时登陆1次"
#这个参数可以防止多线程软件下载对服务器的破坏

MaxClientsPerHost 1 "对不起,同一个客户端只能最多1个帐号可以登陆"
#比如ftp服务端有好多帐户你都有,但也只能用1个帐号登陆

WtmpLog on
#是否要把ftp记录在日志中,如果不想可以设置成off屏蔽掉log日志。

TimeoutIdle 600
#客户端idel时间设置,默认就是600秒

DisplayLogin welcome.msg
#设置ftp登陆欢迎信息文件

关于欢迎文件的设置包含如下参数
%T 目前的时间
%F 所在硬盘剩下的容量
%C 目前所在的目录
%R Client 端的主机名称
%L Server 端的主机名称
%U 使用者帐户名称
%M 最大允许连接人数
%N 目前的服务器连接人数
%E FTP服务器管理员的 email
%i 本次上传的文件数量
%o 本次下载的文件数量
%t 本次上传+下载的文件数量

知道这些参数,我们就可以写出一个友好的欢迎语
vi /home/kaoyan/welcome.msg
欢迎您%U, 这是Frank的测试FTP服务器;
目前时间是:%T;
本服务器最多允许%M个用户连接数;
目前服务器上已有%N个用户连接数;
目前你所在的目录是%C;
目录所在的硬盘还剩下%F字节。

让proftp支持现在流行的passive传输方式,默认是不支持的。只要在服务端设置
AllowForeignAddress on
PassivePorts 49152 65534 #端口也可自己指定喜欢的

千万别忘了在客户端也要设置成支持passive

如何让root能登陆,默认proftp是不支持root登陆,我们可以设置让root也能登陆ftp,不过建议大家最好不要让root能登陆ftp,设置如下
RootLogin on

如何禁止某个地址访问ftp。比如禁止10.1.1网段的机器访问ftp,可以这么设置

Order deny,allow
Deny from 10.1.1.
Allow from all


虚拟ftp的建立,一般用于一台ftp服务器有好多ip地址,或者ftp用不同的端口,基本设置语法是:
比如我们要做一个端口是5555的ftp服务器:

ServerName "Frank FTP Server"
Port 5555
...

...

...

...



至于虚拟主机中的其他设置跟我以前讲的基本差不多

上传/下载比率设置,我想用过Serv_U的朋友一定知道这个功能的使用,我们这里让proftp也实现这个功能。
要实现功能注意编译的时候加入ratio模块,否则proftp默认是不支持,假设有个帐户ftp1的ftp目录在/home/kaoyan ,然后我们设置ftp1的上传/下载比率是1:2(即上传1M,就可以下载2M)
touch /home/kaoyan/ratio.dat
touch /home/kaoyan/ratio.tmp
chmod -R 666 /home/kaoyan
在proftpd.conf设置如下
Ratios on
SaveRatios on
RatioFile /home/kaoyan/ratio.dat
RatioTempFile /home/kaoyan/ratio.tmp
在相应的设置项里添加
UserRatio ftp1 0 0 2 1000
#UserRatio "使用者帐户" fileratio filequota byteratio bytequota
#  fileratio :以文件为基础的比率,通常不限制,故为 0
#  filequota :预设置能下载多少文件,不限制时为 0
#  byteratio :就是上传/下载的比例,如果数字为2,表示1:2
#  bytequota :预设置能下载多少 KBytes 的文件
#上面设置的就是1:2的比率,默认只允许下载1M的文件

重启一下,以后ftp1就可以启用上传/下载比率了

4.各种ftp的配置

4.1.本地用户
目标:
使用主机本地端时间,而不要使用 GMT 时间;
主机最多允许 50 条联机,且最多允许 100 个使用者上线,当超过 100 个使用者还有其它 FTP 要求时,就显示:很抱歉,上线人数额满了!;
同一个 IP (或主机) 来源最多仅能具有 5 个 FTP 服务;
允许续传;
被动式(passive mode)的端口为 65400 到 65420 这21个端口;
主机不允许 Root 登入;
想建立一个名为 badbird 的群组,在该群组内的所有使用者都无法离开自己的家目录(chroot);
在badbird 这个群组当中的 nogoodbird 这个使用者,该使用者能够使用 ftp 但是无法使用 ssh 连到主机;
在这个公开的目录 /home/ftp/pub 中,所有人均不可写入,只有读取的权限;

# vi /usr/local/proftpd/etc/proftpd.conf
# FTP主机的环境设定
ServerName "测试用的 Proftp 主机"
ServerType standalone
DefaultServer on
Port 21
User nobody
Group nobody
#所谓的 GMT 时间就是格林威治时间,因为要使用本地时间,所以设为 off
TimesGMT off
# 最多仅有 50 条 prftpd 的 PID
MaxInstances 50
# 最多允许 100 个使用者在在线
MaxClients 100 "很抱歉上线人数额满了"
# 同一个主机最多可以同时 5 个 FTP 联机
MaxClientsPerHost 5
# 允许使用者续传!预设是 off
AllowStoreRestart on
# 后面接的是端口,最小到最大的端口共 21 个
PassivePorts 65400 65420

# 其它与实体用户较相关的设定值!
Umask 022
# 不许 root 登入!预设就是 off
RootLogin off
# 这个设定可以让使用者不需要具有能够执行的 shell。例如让nogoodbird 这个具有 /bin/false 的使用者,依然可以使用 ftp
RequireValidShell off
# ~ 代表家目录。DefaultRoot后面接的是group,所以在这里badbird为group,而不是user
# 这里特别容易搞混乱,请再特别的留意一下阿!只要不属于 badbird
# 这个群组的 User 就可以离开自己的家目录了!(没有被 chroot )
DefaultRoot ~ badbird
# 下面的设定中,在根目录内的所有目录均具有可擦写的权力,但是在
# /home/ftp/pub 这个目录中,不论 Linux 属性为何,使用者均无法写入!
# 但是可以浏览以及下载喔!在我们这个设定当中, badbird 这个群组无法离开
# 自己的家目录,至于其它可以离开自己家目录的使用者,来到这个
# /home/ftp/pub 当中,也不具有写入的权限喔!

AllowOverwrite on



Denyall



建立nogoodbird用户,由于不具有 shell 所以不能 SSH 但可以 ftp 
# useradd -g badbird -m -s /bin/false nogoodbird
 
# service proftpd restart
 
事实上,对于实体用户实在不需要限制的太多!要不然就不要开放,要不然就直接改成 sftp!此外,在上面这个设定当中,我们暂时拿掉了anonymous的登入,所以使用 anonymous 将无法登入。

4.2.匿名用户
目标:
anonymous的根目录为 /var/ftp 这个目录;
anonymous登入后取得的 PID 在 Linux 的权限为 ftp:ftp;
当anonymous登入 FTP 之后,在 Client 端的 FTP 软件显示一些欢迎讯息;
最多允许 30 个 anonymous 的登入;
限制上传/下载速度为 100Kbytes/s 与 50 Kbytes/s;
在 /var/ftp/ 里面,除了 /var/ftp/upload 之外,其它的目录均不可写入;
在 /var/ftp/upload 这个目录中,仅可以写入,不能下载,并且在使用者进入这个目录后,显示出一些相关的信息;

建立基本的设定档案:
# vi /usr/local/proftpd/etc/proftpd.conf
# 关于主机与实体用户的设定
ServerName "测试用的 Proftp 主机"
ServerType standalone
DefaultServer on
Port 21
User nobody
Group nobody
TimesGMT off # 所谓的 GMT 时间就是格林威治时间,因为要使用本地时间,所以设为 off
MaxInstances 50 # 最多仅有 50 条 prftpd 的 PID
MaxClients 100 "很抱歉上线人数额满了" # 最多允许 100 个使用者在在线
MaxClientsPerHost 5 # 同一个主机最多可以同时 5 个 FTP 联机
AllowStoreRestart on # 允许使用者上传续传!预设是 off
PassivePorts 65400 65420
 
# anonymous 的设定

# 底下为建立 Anonymous 在 Linux 系统下的 PID 权限拥有者
User ftp
Group ftp
UserAlias anonymous ftp
UserAlias nogoodbird ftp
# 建立显示的讯息给 anonymous 观察用的!
DisplayLogin welcome.msg
DisplayFirstChdir .message
MaxClients 30 "匿名登入者联机数已经饱和了!"
# 这个就重要啦!用来限制传输速率的吶!基本语法为:
# TransferRate (STOR|RETR) 速度(Kbytes/s) user 使用者
# STOR 为上传而 RETR 为下载的意思!速度为 Kbytes/second 喔!
TransferRate STOR 100 user anonymous,ftp # 单位为 KBytes/second
TransferRate RETR 50 user anonymous,ftp

Denyall

# 底下这个则仅与 upload 这个目录以及其下的子目录有关而已!


Denyall


Allowall



 
建立欢迎画面:
注意:如果anonymous 根目录在 /var/ftp,welcome.msg 就必须放置在/var/ftp/welcome.msg
# vi /var/ftp/welcome.msg
欢迎光临!这个是测试 FTP 站点!
我的主机: %L
目前时间: %T
最大联机: %M
目前联机: %N
您的主机: %R
您的账号: %U
目前目录: %C
 
建立特殊注意事项:
需要在 /var/ftp/upload 里面建立一个特殊讯息
# vi /var/ftp/upload/.message
这个目录仅能上传不能下载,
您的身份为anonymous!
 
建立 upload 的权限:
# chown ftp:ftp /var/ftp/upload
# chmod 755 /var/ftp/upload
 
重新启动!
# service proftpd restart
 

4.3.特殊交流用户 (建立一个 ftpguest 群组!将所有的 guset 设定在这个群组内!)
一些用户具有上传与下载的权限,并且这些权限是可以保留或者是累积的,在 Windows 系统上面有 Server-U 这个好用的�� /horts