注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

zevan的博客

悟以往之不谏,知来者之可追

 
 
 

日志

 
 
关于我

Debian GNU/Linux user Vegetarian Seventh-Day Adventist

pure-ftpd 主文档 中文文档  

2006-02-13 00:26:08|  分类: Linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
这是我自己翻译的Pure-ftpd官方文档的主文档部分。我不是学计算机专业的,很多的名词翻译都不是很恰当,仅供参考。
如果您有什么建议,可以发邮件def03@mails.tsinghua.edu.cn

主文档
1.简介
Pure-Ftpd是一个快速、产品级(production-quality)的标准格式FTP服务器,基于Troll─FTPd。
设计上,此服务器的默认设置即十分安全,没有已知的弱点。它很容易就可以建起来,而且是专为现在的内核设计的。它已经被成功的移植到很多操作系统,如inux,FreeBSD, NetBSD, OpenBSD, ISOS, EkkoBSD, BSDi, Solaris, Darwin, Tru64, Irix, AIX ,HPUX。
它的特点有:
chroot()ed和/或虚拟chroot()ed 主目录、虚拟域、内建的“ls”, antiwarez系统、被动下载可设置端口、FXP协议、带宽限制、磁盘配额、基于LDAP/Mysql/PostgreSQL的验证、格言(fortune)文件、类Apache的日志、快速独立运行模式、文本/HTML/XML实时状态报告、虚拟用户、虚拟磁盘配额、优先级分离、SSL/TLS等。
2、谁在使用Pure-FTPd?
很多人选择使用Pure-FTPd因为它很容易安装。但这个软件也使用在嵌入式操作系统和高负荷的企业服务器上,特别是集群服务。
成功使用pure-ftpd的公司列表可在http://www.pureftpd.org/users.shtm 得到。
Pure-ftpd和其他的一些软件构成了一个挑战电脑骇客的机器的一部分,至今还没有人成功攻这台服务器。
对拥有集中用户管理的大型站点,Pure-FTPd提供了灵活的验证方案,包括SQL/LDAP backends,还可以轻松的用任何语言写用户操作手册。
3.编译
在目前,Pure-FTPd使用了一些操作系统专有的调用。虽然为了使其可以移植到其他操作系统进行了一些移植的工作,它在Linux FreeBSD,NetBSD,OpenBSD,ISOS,EkkoBSD,BSDi,Darwin,Solaris,Tru64,Irix,AIX,HPUX下可以运行,运行于其他操作系统仍需努力。在任何一个现代的Linux发行版上都应可以运行。
非官方的windows版本可在这里得到
 http://www.pureftpd.org/windows
如果你的系统里安装了cdialog或者xdialog,可以运行下面的命令来编译安装Pure-FTPd
make -f Makefile.gui
如果你没有安装Cdialog或者您偏好传统的方法,可以这样:
./configure
make install-strip
Et voila!现在,软件就已经装在/usr/local/sbin/pure-ftpd
要运行服务器,只要输入下列命令:
/usr/local/sbin/pure-ftpd &
如果你安装的是二进制的软件包(RPM,SLP,Debian),可能要输入下面的命令
/usr/sbin/pure-ftpd &
现在你的服务器已经建好。只需输入‘ftp localhoat’来测试。如果你希望服务器在启动时自动运行,在/etc/rc.d/rc.local或者/etc/rc.d/boot.local 添加上面的命令行。别忘了“&”符。
注意事项
1:
在linux操作系统,你会发现服务器总是以root运行。这样做是有意的,因为这样对那些改变其有效UID(只是改变了有效uid,它们实际上仍然有root的优先级,用ps -U看看服务器是否是由root运行)的服务器更安全。我们使用了一个Linux内核专有的技巧去掉“ps”不能显示的优先级。
2:
在Irix系统下,在输入./configure之前应做如下设置:
export CC=cc
export CFLAGS=-I/usr/freeware/include
export LDFLAGS=-L/usr/freeware/lib32
在Solaris 8系统下编译,应使用GNU Make,而不是Solaris basic make,然后运行
export PATH=/usr/ccs/bin:$PATH
export MAKE=gmake
3:
要卸载Pure-FTPd(不会吧,你真的要这样做?),运行:
./configure
make uninstall

4.高级编译
编译前,“./configure”脚本可以接受一些你希望添加的选项:
/--------------------
"--with-"选项
--------------------/
4.1. --with-altlog:
作为syslog输出的附加,支持将日志以可选格式写入特定的文件中。现在,CLF、Stats、W3C格式的支持已经完成。CLF(通用日志格式)是Apache、WebFS、Roxen等大多数web服务器的基本日志格式。这些日志文件只记录传送的文件,而且可以用于web统计软件(Analog、Webalizer等)来分析FTP服务器的负载。Stats格式是一种特殊的输出格式,为日志分析软件设计。W3C格式是一种标准的格式,可以被大多数商业日志分析软件利用(所有支持IIS的日志分析软件都可以)。要获取更多信息,查看文档后面的-O选项。
4.2. --with-brokenrealpath:
一些Solaris 版本有broken realpath()工具. 如果 altlog 和/或 pure-uploadscript在您的系统上不能正常运行, 尝试用这个选项重新编译一遍。
4.3. --with-certfile=<file>:
SSL认证文件(详见 README.TLS). 默认的是 /etc/ssl/private/pure-ftpd.pem .
4.4. --with-cookie:
在用户登录时,显示一段格言或者特定的标语(详见 -F 选项)。
4.5. --with-diraliases:
支持文件夹别名(为“cd”命令准备的“捷径”)。请阅读此功能的相关部分(在后面的文档里)。
4.6. --with-everything:
编译一个较大的服务器软件,几乎拥有所有的特性:日志选择、cookies、限速、磁盘配额、查看当前连接、上传脚本、虚拟用户(puredb)、上传/下载比率、虚拟主机、文件夹别名、外部验证。
4.7. --with-extauth:
编译支持外部验证的模块。在起用此功能之前,请阅读README.Authentication-Modules和pure-authd(8)手册页。大部分用户并不需要这个功能。
4.8. --with-ftpwho:
支持“pure-ftpwho”命令。启用这个功能需要额外的内存。最好使服务器在独立运行(standalone)模式下起用此功能。在inetd模式下会较慢。
4.9. --with-language=english
--with-language=german
--with-language=romanian
--with-language=french
--with-language=polish
--with-language=spanish
--with-language=danish
--with-language=Italian
--with-language=brazilian-portuguese
--with-language=slovak
--with-language=dutch
--with-language=korean
--with-language=swedish
--with-language=norwegian
--with-language=russian
--with-language=traditional-chinese
--with-language=simplified-chinese
--with-language=czech
改变服务器信息的语言。默认为英语。如果你想贡献一个译本,请翻译“src/messages_en.h”文件,发送到j@pureftpd.org。
4.10. --with-largefile:
在32位体系结构下,支持下载超过2G的大文件。用FTP传输这么大的文件是个奇怪的想法。你的文件系统、内核、libc都得支持大文件。当然,FTP客户端也得能够安全处理大文件。启用此项功能后,由于实际Linux 内核的限制,下载会比没有启用前变得有点慢(或者更耗CPU)。总之:除非你真的打算下载超过2G的文件,不要为了好玩启用此功能。
4.11. --with-ldap:
启用本地LDAP文件夹支持。启用此选项后,会忽略系统帐户。要启用此功能,需要OpenLDAP。如果OpenLDAP安装在自定义的路径,可以使用--with-ldap=<directory>语法。要了解LDAP和Pure-FTPd的更多信息,参见README.LDAP文件。
4.12. --with-minimal:
为了有效的利用现代FTP客户端的功能,Pure-FTPd提供了基本的FTP协议和许多扩展(SITE IDLE, SITE CHMOD, MLSD, ...)。使用--with-minimal选项后,将不会编译这些扩展。当然就没有独立运行的服务器,不能查看用户名/组名,没有humor和ASCII支持。不过,这样,可执行文件的大小会比默认安装要小。要带着此选项编译,需要GCC的版本至少位GCC3.3,正则表达式也编译进去.如果你还想减小体积,可以同时使用 --without-globbing和--with-minimal.如果你在编译嵌入式系统,就可以使用这个选项.在其他情况下,要是不希望你的客户(尤其是使用Windows客户端的)老是抱怨,那就免了吧!
4.13. --with-mysql:
使用本地的Mysql的用户数据库支持.当启用此选项时,会忽略系统帐户.要启用这个功能,需要安装Mysql客户库.如果Mysql安装在自定义的路径,那就使用--with-mysql=<directory>语法.如果需要更多关于Mysql和Pure-FTPd的信息,请参考README.Mysql文件.
4.14. --with-nonroot:
建立一个不需要root权限就可以启动的服务器.任何正常的用户都可以运行服务器.如果你在非专用的主机上有一个受限shell,这个功能将很有用.但一些功能将被关闭,而且密码验证只能通过LDAP,SQL或者Puredb.当虚拟chroot功能启用后,用户就会被限制在服务器开始的文件夹内.这种模式并不安全,只是让普通用户(非root)用来建立一个临时的服务器.在standalone模式下,默认监听2121端口.如果你想启用nonroot模式,必须这样编译,安装软件(./configure --prefix=... && make install-strip) ,在前缀目录内会创建/sbin, /bin 和/man 文件夹.不过,还必须添加一个/etc目录,(对运行pure-ftp的用户可写,可读).
4.15. --with-pam:
使用可插入(pluggable)验证模块.如果服务器总是拒绝你的用户名/密码,那就不要用这个选项.(不过要真的解决这个问题,应该修正PAM设置).要正确使用PAM验证,得建立/etc/pam.d/pure-ftpd文件.在pam文件夹下有这个文件的范例.
4.16. --with-paranoidmsg:
偏好多疑的信息,而不是对系统管理员友好的信息.启用了这项选项后,登陆失败后显示给用户相同的信息,不管问题的根源.没启用这个选项前,密码错误时会显示"验证失败",而当用户被系统管理员封禁后会显示"对不起,我不信任你"(SOrry, I can't trust you!).
4.17. --with-peruserlimits:
启用每个用户的并发限制.在高负荷的服务器上,不要启用.
4.18. --with-pgsql:
使用本地的Postgres用户数据库支持.当启用此选项时,会忽略系统帐户.要启用这个功能,需要安装Postgres客户库.如果Postgres安装在自定义的路径,那就使用--with-pgsql=<directory>语法.如果需要更多关于Postgres和Pure-FTPd的信息,请参考README.PGSQL文件.
4.19. --with-probe-random-dev:
Pure-FTPd使用/dev/arandom,/dev/urandom或者/dev/random硬件来产生不可预测的随机数.编译的时候会探测这类硬件是否存在.如果你想在一台主机上编译出二进制包,然后在另一台主机上运行,这个选项会使运行时探测硬件.这在Linux和BSD系统上毫无用处,但是在Solaris或者QNX上可能需要.
4.20. --with-puredb:
支持虚拟用户,例如一个独立于系统帐户的本地用户数据库.详情参见README.Virtual-Users文件.
4.21. --with-quotas:
启用虚拟磁盘配额.启用虚拟磁盘配额后,可以限制用户在其帐户内可以创建的文件的最大数目.当然也可以限制总的大小.详见文档后的"磁盘配额"部分.
4.22. --with-ratios:
支持上传/下载比例,以讨好那些w4r3z fr34k2(wares freaks).
4.23. --with-sysquotas:
支持系统磁盘配额(不是Pure-FTPd的虚拟配额).只在真的打算启用系统磁盘配额时启用此选项.
4.24. --with-throttling:
支持带宽限制(见下面).
4.25. --with-uploadscript:
从0.98版开始,Pure-FTPd拥有了一个不错的处理上传的功能.成功上传后,可以自动调用外部程序或者脚本.这需要Pure-FTPd包安装的另外一个叫做"pure-uploadscript"的程序.详情参见手册.
4.26. --with-virtualchroot:
通常,当用户的根目录改变后(-A和-a选项),就不可能跳出主目录.启用这个功能后,使用户可以跳出根目录:可以跟随符号链接,即使它们指向的文件夹不在用户的根目录下.有共享文件夹的话,这就非常有用(例如,在每个用户的根目录下都有一个链接到/var/incoming的符号链接).这个功能默认情况下不启用.
4.27. --with-virtualhosts:
支持虚拟主机.这意味着你可以在每个ip地址都有不同的匿名FTP区.如果你只有一个ip,就不需要这个功能.但是如果你有多个IP地址,而且你希望一个连接到IP xxx的客户得到/etc/pure-ftpd/xxx的内容,而不是~ftp/,那就启用这个功能.请参考文件结尾的"虚拟服务器"部分.
4.28. --with-welcomemsg:
读取"welcom.msg"以和其他FTP服务器兼容.这是一个安全隐患(匿名用户可以上传"welcome.msg"文件,随意添加标识).Pure-FTPd默认情况下使用".banner"文件.
4.29. --with-boring:
显示"看起来非常专业"的信息.
display "professionnal-looking" messages.
4.30. --with-privsep:
启用优先级分离(详见下面的注释)
/-----------------------
"--without-" 选项
-----------------------/
4.31. --without-ascii:
不支持7-bits传输(ASCII).如果你有使用Windows客户端的用户用它传送脚本和HTML文件,那就不要用这个选项,不然他们会对你大吼大叫.
4.32. --without-banner:
不显示初始标语.用模糊不清来保证服务器的安全,其实很蠢.
4.33. --without-capabilities:
如果找到了兼容库(libcap),Pure-FTPd会试图使用它来加强安全性.此选项无视上述尝试,来忽略兼容库.如果兼容性在你的系统上不能正确运行,可以使用此选项.libcap可以在ftp://ftp.kernel.org/pub/linux/libs/security/linux-privs下载.
4.34. --without-globbing:
不包含globbing代码.这可以减内存占用,但正则表达式也不能使用(例如"ls *.rpm").大多数人都不用--without-globbing.Globbing这个功能很好.
4.35. --without-humor:
如果你一点不查看源代码就知道这个选项是干什么的,那你就太走运了.
4.36. --without-inetd:
如果总是以standalone模式运行Pure-FTPd,启用这个选项可以节约一点代码.不要同时启用--without-inetd 和 --without-standalone,因为这两个一个都没有的话,就没法运行服务器了.在Pure-FTPd的二进制包里,这些选项都没有启用,所以类inetd和standalone模式都支持.
4.37. --without-iplogging:
为保密,不记录任何IP地址,特别用在政治性的服务器上.
4.38. --without-nonalnum:
多疑(paranoid)的文件名检查:只允许基本的字母.不要盲目的启用这个选项,不然你的客户会抱怨的.
4.39. --without-sendfile:
在Linux,Solaris, HPUX和FreeBSD内核上,Pure-FTPd尝试使用一个特殊系统调用(sendfile),来减少CPU/内存使用.在大多数文件系统上,这个功能运行的不错.不过,这个优化并不适合现有内核的所有的文件系统.有用户报告说,在运行Pure-FTPd的FreeBSD的SMBFS(Samba)文件系统和Linux上的NTFS和TmpFS系统上,下载文件失败.(服务器报告的错误是""broken pipe"或"Error during write to data connection").如果你打算在上述文件系统上提供文件服务,就应该启用--without-sendfile选项,以确保正常运行.有报道称,PA-Risc linux系统也需要这个选项.
4.40. --without-shadow:
忽略shadow密码,即使可以自动检测它们.这通常并不好,除非你使用PAM,LDAP或者SQL.Pure-FTPd支持有截止日期的shadow密码(对帐号和密码都有效).
4.41. --without-standalone:
服务器可以以standalone模式正常运行(不依赖任何超级服务).如果你不需要这个功能,而且你还想节约一点代码,那就加上这个选项.像g2s,xinetd或者tcpserver之类的超级服务可以代理运行Pure-FTPd服务.不过,推荐使用standalone模式.
4.42. --without-usernames:
在文件夹列表时不输出用户名和组名,只显示UID和GID.这有利于安全性和执行,但有人认为这对用户不友好.
/--------------
其他注意事项
--------------/
4.43. 其他传统的autoconf选项当然也可以识别,像用"--prefix="来改变安装的前缀,默认的时"/usr/local".供参考,Pure-FTPd的二进制的RPM包是按照下列命令编译的:
./configure --with-everything --with-paranoidmsg --without-capabilities \
--with-virtualchroot
RPM包编译时还用了 --without-pam 来增强其可移植性.
5. STANDALONE  INSTALLATION
5.独立运行模式的安装
除非你编译服务器时添加了“--without-standalone”,很容易运行服务器,只要输入:
/usr/local/sbin/pure-ftpd &
在下面的例子里,我们假设"pure-ftpd"文件位于/usr/local/sbin.如果你自己从源码包编译的服务器,那么这就是默认的目录.可是正如前文所说,如果你安装的是二进制包(RPM,SLP,DEB,TGZ),服务器软件可能安装在/usr/bin.所以只需用/usr/sbin/pure-ftpd代替/usr/local/sbin/pure-ftpd.
当前面的命令运行后,服务器会监听所有进入的连接,所有的IP地址,标准的FTP端口(21).如果你的系统有IPV6地址,也可以正常运行.
如果你想在非标准端口监听连接,只要添加"-S"和端口号.
/usr/local/sbin/pure-ftpd -S 42
也允许服务名称("-S smtp"会使守护进程接收SMTP端口(25)的连接.非常不常见,但我们希望满足每个人的要求,即使他脑子有病).
如果你的系统有多个IP地址,而你希望你的FTP服务器只能从其中一个IP(比如192.168.0.42)连接,应该怎么办?只要使用下面的命令行:
/usr/local/sbin/pure-ftpd -S 192.168.0.42,  
最后的逗号很重要,别忘了.实际上,它是下面命令的简写:
/usr/local/sbin/pure-ftpd -S 192.168.0.42,21
如果你更喜欢用主机名称而不是IP地址,那你可以这样做:
/usr/local/sbin/pure-ftpd -S ftp.rtchat.com,21
当然支持IPv6地址.
使用前面的命令行,服务器会按照默认的配置运行.如果存在叫做'ftp'的系统帐号,就会允许匿名FTP登陆;系统中的用户都可以用自己的用户名/密码连接到FTP服务器.
如果你想改变默认配置,可以添加其他的命令行选项.例如:
/usr/local/sbin/pure-ftpd -c 50 &
或者
/usr/local/sbin/pure-ftpd -S ftp.rtchat.com,21 -c 50 &
这样,就只允许同时有50个连接.要想知道有哪些选项,请跳到下面的"选项"一章.如果你的服务器在standalone模式下运行的极好,那就不必阅读下面的关于super-sever的章节.但是仍然建议阅读"-m"和"-C"选项."-D"也时不错的选项,如果你(或者你的客户)使用broken客户端.请继续读.
当运行"ps auxw|grep pure-ftpd"时,结果形如:
root 15211 0.1 0.3 1276 452 ? S 13:53 0:00 pure-ftpd [SERVER]
root 15212 0.1 0.5 1340 672 ? S 13:54 0:00 pure-ftpd [IDLE]
root 15214 0.0 0.5 1340 672 ? S 13:56 0:00 pure-ftpd [DOWNLOADING]
[SERVER]是主服务器.如果你杀掉这个进程,服务器会在下一个连接后关闭.
[IDLE]显示没有传输的客户.
[DOWNLOADING]显示正在下载的客户.
[UPLOADING]显示正在上传的客户.
对简单的脚本记录,会创建文件"/var/run/pure-ftpd.pid",其中包含了主服务器进程的PID.

6. 超级服务器安装
Pure-FTPd能在telnet,wu-ftp,finger或Qmail等超级服务的帮助下运行.使用超级服务模式通常会比standalone模式慢.但是如果你喜欢tcpwrappers或者超级服务内置的过滤功能,Pure-FTPd能跟它们合作的很好.Unix下有一大把的超级服务:Inetd(最常见的),TCPserver,G2S,Xinetd,Rlinetd...这里只讲前三种,不过于其他的super-servers的集成也毫无困难.

6.1. 与Inetd同时使用
注意:如果安全对你来说很重要,那就别用Inetd.在默认的配置下,如果对同一个端口连接率过多,inetd停止服务.这可以轻易的制造拒绝服务式攻击.同时,inetd没有任何的并发限制.即使你限制pure-ftpd的连接数,恶意分子也可以占满你的储存空间和描述符表(descriptor tables).最好使用现代的inetd的替代品,或者以standalone模式运行pure-ftpd.
检查inetd是否在运行:
ps auxw | grep inetd
root 3699 0.0 0.3 1072 492 ? S 15:47 0:00 inetd
编辑/etc/inetd.conf,寻找类似这样的一行:

ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd

这行可能以"proftpd"或者"wuftpd"结尾,但应该以"ftp stream tcp"开头.
用下面的一行代替这行:
ftp stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/pure-ftpd
如果你的系统内没有/usr/sbin/tcpd ,尝试下面的命令:
ftp stream tcp nowait root /usr/local/sbin/pure-ftpd pure-ftpd
重启inetd守护进程:
killall -HUP inetd
如果你的系统里没有"killall",那就试用:
kill -HUP $(cat /var/run/inetd.pid)

6.2. 与Xinetd一起使用
在/etc/xinetd.conf文件中添加下列记录:

service ftp
{
socket_type = stream
server = /usr/local/sbin/pure-ftpd
protocol = tcp
user = root
wait = no
disable = no
}

在Redhat系统中,你可以在/etc/xinetd.d/pure-ftpd文件中添加这些语句:
On Redhat systems, you can also put this in a /etc/xinetd.d/pure-ftpd file.
然后,重启服务器:
killall -USR2 xinetd

6.3. 与TCPserver一同使用
TCPserver是Dan Bernstein的ucspi-tcp包的一部分.它不像inetd那样庞大,不易被D.O.S攻击,还有很好的过滤功能.令Pure-FTPd和TCPservers一同运行的最简单的方法是下面的命令:
tcpserver -DHRl0 0 21 /usr/local/bin/pure-ftpd &
你可以在你的系统的本地启动脚本上添加上面的命令行(通常是/etc/rc.d/boot.local或者/etc/rc.d/rc.local).如果这样不行的话,用tcpserver的全路径(例如'/usr/local/bin/tcpserver')代替"tcpserver".

6.4. 与G2S一同使用
在 /etc/jnetd.cf文件(或者任意一个你为G2S选择的配置文件)中添加如下命令:

{
SERVICE ftp
DESCRIPTION "Pure-FTPd"
RUN /usr/local/sbin/pure-ftpd
}

重启"jnetd",然后就搞定了.

7. 选项
要让你的FTP服务器运行起来,前面的步骤就应该够了.不过你可以添加一些命令行参数来改变它的表现.这些参数应该添加在superserver的配置文件的pure-ftpd 路径后面.
例如,你想添加"-s"和"-a 42"标志.super-server的配置行应该是这样的,
- Inetd:
ftp stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/pure-ftpd -s -a42
或者
ftp stream tcp nowait root /usr/local/sbin/pure-ftpd pure-ftpd -s -a42
如果你使用Inetd,在参数和选项之间不要留有空格,例如,使用 -a42,而非-a 42 .Inetd在处理大量的选项和字符":"时有点麻烦.
- Xinetd:
service ftp
{
socket_type = stream
server = /usr/local/sbin/pure-ftpd
server_args = -s -a 42
protocol = tcp
user = root
wait = no
disable = no
}
- TCPserver:
tcpserver -DHRl0 0 21 /usr/local/bin/pure-ftpd -s -a 42 &
- G2S:
{
SERVICE ftp
DESCRIPTION "Pure-FTPd"
RUN /usr/local/sbin/pure-ftpd -s -a 42
}

用户需要一个在/etc/shells中列出的shell来获得受限或非受限的FTP连接.作为一种选择,你可以给用户"ftp"作为shell.使用 "ftp" shell的用户只能使用FTP登陆:不能使用telnet,不能使用SSH.如果你不想添加的话,没有必要在/etc/shells中添加"ftp"记录.

下面时可以识别的选项:

7.1. '-0':
当文件上传后,若已经存在相同文件名的旧版本,旧的文件不会被移除,也不会被删除.上传会产生一个临时文件,一旦上传完成,会自动转向新版本.例如,如果上传了一个大型的PHP脚本,web服务器仍然会继续在旧版本上服务;一旦整个文件都传输完成,会立刻转向新版本.这个选项与虚拟配额不兼容.
7.2. '-1':
在syslog输出中记录每一个会话的PID.
7.3. '-4':
只监听IPv4连接.如果你的网络不是纯的IPv6,在OpenBSD,ISOS,EKKOBSD,MacOS X上必须启用这个选项.即使你从inetd之类的超级服务上启动服务.
7.4. '-a <gid>':
通过验证的用户自动进入他们的主目录下,不能到别的地方(chroot).对于不能访问shell的用户来说尤其有用,比如多个用户共享的WWW主机服务.只有拥有组号<gid>的成员可以不受限的访问整个文件系统.因此,添加"staff","admin","ftpadmin"组,把你信任的用户放进去.<gid>是数字格式的组号,不是组名.
这个功能主要时为系统用户--不是虚拟用户--设计的.
注意:"root(uid 0)"总可以访问整个文件系统.如果你想chroot除了root以外的每个用户,使用 -A.
7.5. '-A':
chroot除了root以外的每个用户.
7.6. '-b':
忽略RFC标准的某些部分,来对付一些完全受损的FTP客户端,或者受损的防火墙/NAT boxes.
7.7. '-B':
让standalone服务器在后台启动(变成守护精灵).
7.8. '-c <number of clients>':
允许连接的客户的最大数目.例如 ,"-c 42",那么同时连接的客户最多有42个.默认的最大客户容量为50人.
7.9. '-C <max connection per ip>':
限制同一IP的同时连接数.这时防止愚蠢的拒绝服务式攻击的另一个的方法,还可以防止带宽被一个单独的用户用光.这个选项只有在服务以standalone模式启动时才可以使用(如果你使用超级服务,那就应该已经这样做了).如果服务器启动时使用选项"-C 2",并不意味着总的连接数被限制到2个.而是一个客户端,从同一台机器(或者至少是同一个IP)的连接数至多只能同时有2个连接.这个功能需要多消耗一点内存去记录IP地址,不过还是推荐使用这个功能.
7.10. '-d':
向syslog发送多种调试信息.只在你真的希望调试Pure-FTPd的情况下启用这个功能.密码不会被记录.双写"-d"连回应也会记录。
7.11. '-D':
显示以点"."开头的文件,即使客户没有在列表命令中添加'-a'选项.这时为了能和配置不良的FTP客户端一同工作.如果你是一个纯粹主义者,就不要启用这个选项.如果你提供主机服务,而且你还有一些笨拙的用户,那就启用这个选项.
7.12. '-e':
只允许匿名用户.在没有远程FTP访问真实帐户的公开FTP服务器上使用.
7.13. '-E':
只允许验证的用户,不允许匿名用户登录.
7.14. '-f <工具>':
使用这个工具 来记录系统日志.默认的为"ftp"(如果你有不含"ftp"的老版本libc,也可能时"local2").使用"-f none"选项可以禁用日志.
7.15. '-F <fortune file>':
在登录时显示格言.这些句子从文本文件<fortune file>中随机抽取.文本文件应该被格式化为标准的"fortune"文件(在单一的一行,格言由"%"分割).在编译Pure-FTPd时,应该支持cookies(--with-cookie).如果你只是想在登录时显示一段简单的标语,在这那就随便添加一个文本文件的名字.
7.16. '-g <pid file>':
服务器以standalone模式运行时,改变pid文件的路径.默认为/var/run/pure-ftpd.pid.
7.17. '-G':
不允许重命名.
7.18. '-H':
默认情况下,记录完全的主机名.为此,DNS查询强制运行."-H"标记防止主机名的解析(例如,会记录"213.41.14.252",而不是"www.toolinux.com").在繁忙的服务器上,这个功能可以明显的加快连接,减少带宽使用.这在公开的FTP站点上尤其需要.同时必须注意:不添加 "-H"时,主机名可以提供一定的信息,但不可信任:没有进行逆向的映射检查来保存DNS查询.
7.19. '-i':
不允许匿名用户上传,不管文件夹的权限如何.这个选项对虚拟主机尤其有用,可以防止用户在他们的帐户上建立软件站点.
7.20. '-I <timeout>':
改变最大的空闲时间.空闲时间以分钟计算,默认为15分钟.现代的FTP客户端可以每隔一段时间发送虚假的命令来欺骗超时设定.当客户端空闲时间超过两倍的正常超时时间时, 我们会断开这些客户端(因为它们还是活动的).
7.21. '-j':
如果用户的根目录不存在,就自动创建.新建的文件夹属于该用户,权限设置依据当前文件夹的mask.只能建立根目录(所以/home/john/./public_html不能建立,但可以建立/home/john).为防止本地攻击,父文件夹不应该属于一个不被信任的用户.同时注意,你必须信任管理用户数据库的人,因为启用这个功能后,他可以在服务器的文件系统的任何位置创建文件夹或改变文件夹的所有者.
7.22. '-k <百分比>':
当磁盘分区已经用掉了<百分比>%,就不允许上传.例如,"-k 95"可以保证你的磁盘空间不会被FTP用掉超过95%.在数字后不必添加百分号(%).
7.23. '-K':
允许用户续传,上传文件,但不允许删除或者重命名.只有在文件夹为空的情况下才可以删除.尽管如此,仍然允许覆盖已有的文件(用来支持上传续传).如果你想法这个也禁止掉,加上 -r(-- autorename).
7.24. '-l <authentication>' 或者'-l <authentication>:<配置文件>':
 给验证链添加一个新规则.请参考README文件后面的"验证"部分.这部分很重要.
7.25. '-L <最大文件数量>:<最大递归深度>':
为防止愚蠢的拒绝服务式攻击或者仅仅是防止耗光CPU,运行"ls"命令时,Pure-FTPd的回显从来不超过2000个文件.同时,递归的"ls"(-R)进入的子文件夹深度不超过5.用"-L"选项,你可以增加/减少这种限制.
7.26. '-m <cpu负荷>':
在负载超过<cpu负荷>时,不允许匿名下载.这个功能可以有效的防止服务器过载.不过仍然允许上传.
7.27. '-M':
允许匿名用户创建文件夹.
7.28. '-n <最大文件数量>:<最大大小>':
如果服务器编译时支持虚拟磁盘配额,对除受信任的组成员以外的所有用户实施配额设置.<最大大小>以Mb为单位.详见文档后面的"虚拟配额"部分.
7.29. '-N':
NAT模式.强制ACTIVE模式.如果你的FTP服务器在不支持适用的FTP代理的NAT box后面,或者你使用没有透明FTP代理的端口重定向,那就使用它.哦...前面的句子好象不是很清楚.好吧:如果你的网络形如:
(FTP服务器)-----(NAT/伪装网关/路由器)-----(互联网)
而且你希望互联网上的人可以访问你的FTP服务器,不用这个选项先试一试.如果Netscape客户端连接毫无问题,那么NAT网关起作用.如果Netscape不能显示文件夹列表,那你的NAT网关就sucks(不知道怎么翻译).用 "-N"来使其工作正常.
7.30. '-o':
把所有的上传文件写到"/var/run/pure-ftpd.upload.pipe",以使"pure-uploadscript"程序可以运行.只在你真的使用"pure-uploadscript"的情况下启用.
7.31. '-O <格式>:<日志文件>':
把所有的文件传输以可选的格式写到一个特定的日志文件中.目前,支持三种格式:CLF(类似Apache),Stats和W3C.如果你在启动选项上添加"-O clf:/var/log/pureftpd.log",Pure-FTPd会把传输以类似Apache网络服务器默认配置的格式记录到/var/log/pureftpd.log.如果你在启动选项上添加"-O clf:/var/log/pureftpd.log",Pure-FTPd会创建特殊格式的日志文件,专门用于统计报告.Stats格式是一种压缩格式,比CLF格式和老的"xferlog"格式更有效,更精确.
Stats格式是这样的:
<日期> <会话id> <用户> <ip> <U或D> <大小> <持续时间> <文件>
<日期>是GMT时间戳(time()),<会话id>与当前会话一致.<文件>不被引用,它常常是日志文件的最后一项.
"U" 代表"上传"(Upload) ,"D" 代表"下载"(Download).
警告:会话id只是为了统计而设计的.虽然在实际上总有唯一的字符串,但理论上在一些罕见的情形中它并不唯一.因此,如果任务条件很苛刻,就不要依赖这种东西.
有一个叫"pure-statsdecode"的命令可以用来把时间戳转换为人类可读的日期.
要启用W3C格式,使用:-O w3c:/var/log/pureftpd.log
为安全起见,路径必须是绝对路径(例如,用/var/log/pureftpd.log,而不是../log/pureftpd.log).
如果日志储存在NFS卷里,别忘了启动lock管理器(通常叫"lockd"或者"rpc.lockd").
7.32. '-p <起始端口>:<结束端口>':
在被动模式的下载时,只启用在<起始端口>和<结束端口>之间的端口.当服务器在没有FTP连接追踪的防火墙后面时,这个非常有用.使用一般服务都不会监听的高端口(例如40000-50000).
7.33. '-P <ip地址/主机名>':
为PASV/EPSV/SPSV命令强制特定的IP地址.如果服务器在不能处理stateful FTP伪装的(NAT)box后面,就把box的IP地址写在这儿.如果你有动态IP,就把你网关的公开的主机名写上,每次有新客户连接时会解析的.
7.34. '-q <上传比例>:<下载比例>':
对匿名用户启用上传/下载比例.
7.35. '-Q <上传比例>:<下载比例>':
对每个用户(不论匿名与否)都启用下载/上传比例.
root(0,有时叫做"wheel"),没有比例限制.1
7.36. '-r':
从不覆盖已有的文件.如果上传一个文件与已有的文件同名,会自动重命名.文件名为xyz, xyz.1, xyz.2, xyz.3等.
注意:如果你在编译的时候使用"make AUTORENAME_REVERSE_ORDER=1",命名规则会反过来.文件名变为1.xyz, 2.xyz, 3.xyz等.
7.37. '-R':
不允许用户(包括非匿名用户)使用CHMOD命令.在主机服务上,这可以防止新手犯错,比如在根目录设置不恰当的权限.当"-R"选项启用时,只有root可以使用CHMOD命令.
7.38. '-s':
"软件保护".不允许匿名用户下载属于"ftp"的文件.(通常,这些文件是其他匿名用户上传的).这样,上传必须通过系统管理员的批准(改变文件的所有者),才可以下载.
7.39. '-S [<ip地址>,|<主机名>,] [<端口>|<服务名称>]'.
只有当服务器以standalone模式启动时,这个选项才有效.在特定的IP和端口接收连接.IPv4和IPv6都支持.数字后者主机名的全程都可以接受.服务名称(在/etc/services)可以用来代替数字的端口.
7.40. '-T <带宽>' 和 '-t <带宽>':
启用带宽限制(详见下面).<带宽>以kb/s为单位.要分别设置上传/下载 带宽,可以使用[<上传>]:[<下载>]语法.
7.41. '-u <uid>':
不允许uid低于<uid>的用户登录."-u 1"不允许以root登录(这是安全的).在大多数的linux发布版本中,"-u 100"不允许访问虚拟帐户.
7.42. '-U <文件的umask>:<目录的umask>':
改变文件创建掩码.默认值为133:022.如果你希望某用户上传的新文件只对该用户可读,使用"-U 177:077".如果你希望上传的文件可执行,使用022:022(文件对其他用户可读但不可写)或者077:077(文件只对所有者可读,可执行).请注意,Pure-FTPd支持SITE CHMOD,因此用户可以改变自己文件的所有者.
'-V <ip地址>':
只在这个特定的IP地址允许非匿名FTP访问.所有其他的IP地址都仅仅匿名.启用这个选项后,可以用routed IP提供公开的访问,用本地IP来管理.同样,也可以用在防火墙规则保护下的可路由的信任IP来专门提供非匿名用户的登录.
7.43. '-w':
只对通过验证的用户提供FXP协议支持.FXP在IPv4和IPv6地址下都可以工作.
7.44. '-W':
支持FXP协议.FXP允许两个远程服务器互相传输,但没有任何数据流向要求传输的客户端.
但是注意:
****************************************************************************
FXP协议并不安全(第三方主机可以窃取当前连接).在Pure-FTPd中,已经采取预防措施来减少FXP插入攻击.但是如果你的FTP服务器提供私人的数据:
千万不要允许FXP连接到非信任的主机上.你可以在内网服务器上使用FXP,但不能让FXP连接到Internet用户.
****************************************************************************
因此,Pure-FTPd默认不启用FXP,除非你用"-W"或者"-w"明确的启用.
7.45. '-x':
在正常的操作模式下,通过验证的用户可以读/写以点('.')开头的文件.为了安全的原因(比如说改变标语,或者某个被遗忘的.rhosts文件),匿名用户不能这样.使用"-x"后,通过验证的用户可以下载点文件,但不能覆盖或者创建,即使他们是文件的所有者.这样,你就可以防止主机的使用者把.qmail文件搞的乱七八糟.如果你希望让用户访问某个点文件,就创建一个链接到点文件的符号连接.符号链接的文件名中没有点.这样,客户就可以通过链接检索文件.
7.46. '-X':
这个标志与前一个相同(不允许写点文件),不过,这个标志的附带效果使用户甚至不能*读取*以点开头的文件和目录(例如"cd .ssh").
****************************************************************************
和"-a"选项一同使用时,受信组成员可以不受"-x/-X"的限制.
****************************************************************************
7.47. '-y <最大用户数量>:<最大匿名登录数量>':
只有当服务器编译时加了"--with-peruserlimits",这个选项才可以使用.此选项限制了一个用户可以同时使用的会话的数量.
空值("0")意味着"无限".
这儿是个具体的例子:
/local/sbin/pure-ftpd -y 3:20 -c 15 -C 5 –B
这儿,允许:
*最多总共15个会话
*从同一个IP的连接最多5个
*同一个用户名只能有最多3个连接
*最多20个匿名用户
这样设置后,单独的一个用户就不会那么容易占满所有的位置.
7.48. '-Y 0':
禁用SSL/TLS加密层(默认).
'-Y 1':标准会话和加密会话都接受
'-Y 2': 拒绝不使用SSL/TLS安全加密机制的连接,包括匿名会话.服务器编译时必须用" --with-tls",而且必须有有效的证书来启用这个功能.
详情参考关于SSL/TLS的README.TLS文件.
7.49. '-z':
允许匿名用户读取以点('.')开头的文件和目录.
7.50. '-Z':
尽力保护用户,防止其犯常见的错误,免得技术支持人员忙着处理各种愚蠢的问题.现在,"-Z"选项防止用户错误运行"chmod"命令,(这可能导致他们不能访问属于自己的文件/文件夹).以后,这个选项可能会加入其他的功能.如果你提供主机,那就开启这个功能.

如果和标准选项想比,你更喜欢GNU风格的长选项,可以用下列的别名.你随时都可以输入"pure-ftpd --help"来获取这个列表.

7.51. 标准选项,按字典顺序排序
-0 --notruncate
-1 --logpid <文件>
-4 --ipv4only
-a --trustedgid <gid>
-A --chrooteveryone
-b --brokenclientscompatibility
-B --daemonize
-c --maxclientsnumber <数字>
-C --maxclientsperip <数字>
-d --verboselog
-D --displaydotfiles
-e --anonymousonly
-E --noanonymous
-f --syslogfacility <所用工具>
-F --fortunesfile <文件>
-g --pidfile <pid文件的路径>
-G --norename
-h --help
-H --dontresolve
-i --anonymouscantupload
-I --maxidletime <时间 (分)>
-j --createhomedir
-k --maxdiskusagepct <百分比>
-K --keepallfiles
-l --login <auth> 或 <auth>:<配置文件>
-L --limitrecursion <数字:数字>
-m --maxload <系统负荷>
-M --anonymouscancreatedirs
-N --natmode
-o --uploadscript
-O --altlog <格式>:<日志文件>
-p --passiveportrange <最低端口:最高端口>
-P --forcepassiveip <ip地址>
-q --anonymousratio <上传比例>:<下载比例>
-Q --userratio <上传比例>:<下载比例>
-r --autorename
-R --nochmod
-s --antiwarez
-S --bind <ip 地址,端口>
-t --anonymousbandwidth <带宽 (KB/s)>
-T --userbandwidth <带宽 (KB/s)> 或 [<上传带宽>]:[<下载比例>]
-u --minuid <uid>
-U --umask <mask>
-V --trustedip <ip地址>
-w --allowuserfxp
-W --allowanonymousfxp
-x --prohibitdotfileswrite
-X --prohibitdotfilesread
-y --peruserlimits <每个用户最大会话数>:<匿名用户最大会话数>
-Y --tls <0:no TLS | 1:TLS+cleartext | 2:enforce TLS>
-z --allowdotfiles
-Z --customerproof


7.52.GNU风格长选项,按字典排序
-W --allowanonymousfxp
-z --allowdotfiles
-w --allowuserfxp
-O --altlog <格式>:<日志文件>
-t --anonymousbandwidth <带宽 (KB/s)>
-M --anonymouscancreatedirs
-i --anonymouscantupload
-e --anonymousonly
-q --anonymousratio <上传比例>:<下载比例>
-s --antiwarez
-r --autorename
-S --bind <ip地址,端口>
-b --brokenclientscompatibility
-A --chrooteveryone
-j --createhomedir
-Z --customerproof
-B --daemonize
-D --displaydotfiles
-H --dontresolve
-P --forcepassiveip <ip地址>
-F --fortunesfile <文件>
-h --help
-4 --ipv4only
-K --keepallfiles
-l --login <auth> or <auth>:<配置文件>
-1 --logpid <file>
-L --limitrecursion <数字:数字>
-c --maxclientsnumber <数字>
-C --maxclientsperip <数字>
-k --maxdiskusagepct <百分比>
-I --maxidletime <时间(分)>
-m --maxload <系统负荷>
-u --minuid <uid>
-N --natmode
-E --noanonymous
-R --nochmod
-G --norename
-0 --notruncate
-p --passiveportrange <最小端口:最大端口>
-y --peruserlimits <每个用户最大会话数>:<匿名用户最大会话数>
-g --pidfile <到pid文件的路径>
-X --prohibitdotfilesread
-x --prohibitdotfileswrite
-f --syslogfacility <工具名称>
-Y --tls <0:no TLS | 1:TLS+cleartext | 2:enforce TLS>
-a --trustedgid <gid>
-V --trustedip <ip地址>
-U --umask <mask>
-o --uploadscript
-T --userbandwidth <带宽(KB/s)> or [<上传带宽>]:[<下载带宽>]
-Q --userratio <上传比例>:<下载比例>
-d --verboselog


8. 建立匿名FTP服务器
如果存在"ftp"用户,而且此用户的主目录可以连接,Pure-FTPd就会接受匿名登录,用户名为"ftp"或者"anonymous".文件必须位于FTP主目录.不需要有"bin", "lib", "etc"和"dev"目录,也不需要任何外部程序.不要把公共文件的所有者改为"ftp",只改可写的文件夹("incoming").
9. 显示标语
如果在"ftp"用户的根目录(或者虚拟服务器的根目录,见下面)有".banner"文件,当客户登录的时候,就会显示.你可以把带有你的名字的用ASCII艺术做的logo放进去.
这个文件不应大于4000byte,否则就无法显示.
在每个文件夹,可能有".message"文件.这里的内容将在客户进入目录的时候显示.这样的文件可能包含一些重要信息(例如"不要下载1.7版,不能用")
10.显示格言
在最初登录时,可以随机显示一些有趣的东西.随机的格言从一个标准的"fortune"格式的文本文件中提取.如果你安装了"fortune"包,应该有一个包含二进制文件(xxxx.dat)和文本文件(不含.dat扩展名)的目录(通常是/usr/share/fortune).
要使用Pure-FTPd cookies,只要在"-F"选项后加上文本文件的文件名.例如:
/usr/local/sbin/pure-ftpd -F /usr/share/fortune/zippy
如果你想建立自己的格言文件,只要建立一个结构如下的文本文件:
Hello... this is the first fortune...
%
Welcome to the real world.
%
Follow the white rabbit.
%
Have fun...
Well... lotsa fun!
%
Yop is good for you.
学会了吧?在同一行中,格言之间用"%"隔开.不过格言本身可以有很多行.(参考第四个例子)
为安全原因,文本文件必须对每人可读.(如果有必要,改变文件的权限设定 chmod 644 ),否则服务器会忽略文件.
当然,格言文件可以只有单独的一条信息.

11. PER-USER CHROOT() RULES
除了"-a"标记,Pure-FTPd还有另外一个调节精细的chroot规则.例如登录 /etc/passwd

mimi:x:501:100:Mimi:/home/mimi:/bin/zsh

没有特殊的规则时,mimi就能登录并且检索文件系统中任何公开可读的文件.现在,我们来改变其根目录.
mimi:x:501:100:Mimi:/home/mimi/./:/bin/zsh
然后呢?mimi的根目录没有变化,常规的应用不会发现任何异常,不过Pure-FTPd理解"chroot() until /./".因此,当mimi下次进行FTP登录时,只能到达/home/mimi文件夹,而不是整个文件系统.如果不喜欢"-a"选项或者受信gid之类,这倒是给某些用户chroot的好方法.另外一个技巧时在"/./"后添加一些东西.
mimi:x:501:100:Mimi:/home/mimi/./public_html:/bin/zsh
当mimi登录时,会发生两件事:
-chroot("/home/mimi"),这样Mimi只能看到自己根目录内的东西,看不到别的东西.
-chdir("public-html"),这样会话就会从public_html文件夹开始.
仍然可以使用"cd .."
这种"url风格"的处理对只用FTP登录的用户(就是没有shell访问的用户)尤其灵活.
当用户被chroot时加了"/./",并且他属于受信组(-a),他就会被chroot.但他没有比例限制,并可以访问点文件.

12.比率
如果你想强迫人们在下载东西的之前上传新文件,可以使用比率.
在公开的FTP服务器上,用这种方法可以得到很多新东西.对于软件交换者,这则是必须的.我不喜欢这一套,不过...Pure-FTPd设计的时候就是要满足所有的人.
要启用比率,使用"-q"选项,后面加上上传:下载比率:
-q 2:5
这意味这每个匿名用户必须上传至少2M的东西才能下载5M的东西.
如果比率要应用与所有用户(不论匿名与否),使用"-Q"选项,方法与"-q"相同.
注意:
root从来没有比率限制.当"-Q"选项与"-a"或"-A"选项同时运用时,受信任的组成员也没有比率限制.

13.带宽限制
Pure-FTPd有一个有趣的内置功能:简单的带宽限制.
*你希望限制FTP流量,这样通过这个协议上传、下载文件不会占满网络带宽。
    带选项--with-throttling编译Pure-FTPd
    运行时加上"-T"标志,后面跟一个数字
    这个数字是单个用户在一个会话中可以使用的最大带宽,单位是k/s.
*你希望给匿名用户的带宽小于给验证用户的.这样,当带宽紧张时,真实用户还可以正常的上传/下载.
    带选项--with-throttling编译Pure-FTPd
    运行时加上"-t"标志,后面跟一个数字
例如:
/usr/local/sbin/pure-ftpd -t 64
这样,不论你的真实带宽有多大,上传/下载文件都不会占用超过64KB/s.
*实际上,可以给上传,下载不同的带宽限制."-t"和"-T"后面都可以跟着两个数字,用冒号(":")隔开.前一个数是上传带宽限制,下一个是下载带宽限制.其中一个可以为空,意思是不限速.
例1:上传256KB/s,下载64KB/s
/usr/local/sbin/pure-ftpd -t 256:64
例2:上传256KB/s,下载不限速
/usr/local/sbin/pure-ftpd -t 256:
例3:上传不限速,下载64KB/s
/usr/local/sbin/pure-ftpd -t:64
没有冒号时,就认为上传下载速度相同,均为同一个值,所以"-t 64"可以看做"-t 64:64"的别称.
*当Pure-FTPd运行时加入了带宽限制,会把进程的优先级降到10.这样,"-t 10"就有意义了:当CPU紧张时,验证用户会比匿名用户跟有责任."-T 0"就很没用了,不过它也能工作,对服务器进程还是有好处的.
*如果你需要高级的带宽管理,看看你的内核Q.O.S功能.

14.虚拟服务器
使用虚拟服务器是在同一个电脑上开几个FTP站点的一种方便的方法.比如,你有两个客户,前一个拥有"c9x.org"域名,而后一个拥有"ttchat.com"域名.两个都以同一台电脑为主机,不过它们不想共享相同的文件.ftp://ftp.c9x.org/显示的文件内容要不同于ftp://ftp.rtchat.com/.FTP协议不允许基于名字的选择.所以,如果你想在同一台主机上,保持标准端口,运行N个不同的虚拟FTP服务器,你需要N个不同的IP地址.当然,你可以使用HTTP.
给网络适配器分配所需的IP地址(使用"ifconfig eth0:x ..."或者"ip addr add dev eth0 a.b.c.d").
现在,如果不存在/etc/pure-ftpd 文件夹,就创建一个.
mkdir /etc/pure-ftpd
要添加虚拟FTP服务器,只要在/etc/pure-ftpd 建立一个虚拟主机IP到包含虚拟主机文件的文件夹的符号链接.
例如:
ln -s /home/customers/rtchat.com/ftp /etc/pure-ftpd/216.226.17.77
ln -s /home/customers/c9x.org/ftp /etc/pure-ftpd/212.73.209.252
搞定了!把C9X的文件放到/home/customers/c9x.org/ftp/,把RTChat的文件放到/home/customers/rtchat.com/ftp/
启用了这个功能后,服务器上的每个帐户都可以有自己的公开匿名FTP区域.如果你在提供主机服务,这个功能对你的客户很好.
*警告*:这也意味着你的客户可以建立权限为1777的"incoming"文件夹.这可能是件好事,不过这也可以把你的硬盘被各种东西填满.你可以用"-i"(或者--anonymouscantupload)选项来禁止匿名用户上传.

默认情况下,实际用户或匿名用户可以访问分配给服务器的所有IP地址.你可以用-e(仅限匿名用户)或者-E(仅限实际用户)来进行访问限制.

一种更灵活的方法是使用"-V <ip address>"来定义"受信任的"IP地址.当客户连接到受信任的IP时,匿名和实际的登录都允许.不过在其他的IP上,只允许匿名用户.

如果你是主机服务提供商,而且每个客户都有自己的IP地址,最好有一个供所有的客户在其帐户内管理文件的受信IP.对所有的客户,此IP均是相同的.如果你的客户有静态IP,你可以很轻松的用防火墙规则限制对该IP的访问.使用"-V <受信IP>",并将/etc/pure-ftpd/<客户IP>链接到~customer/ftp.
每个客户都会有自己的*匿名专用*FTP服务器,这样黑客们就必须找到受信IP才可以进入.
15. IPv6 支持
Pure-FTPd全面支持IPv6(native IPv6地址和4-in-6地址).不过得使用理解IPv6协议的超级服务,像Rlinetd或Xinetd.Inetd的近期版本应该也可以(未经确认).IPv6处处都可支持:日志记录,配置选项,虚拟主机,协议(EPSV/EPRT支持),域名解析...
16.记录日志
日志信息都发送到syslog守护精灵.可以用"-f none"选项来禁用日志记录.
如果要把所有的FTP信息重新导入一个文件,不妨设为/var/log/ftp,就在/etc/syslog.conf文件添加如下一行:
ftp.* /var/log/ftp
然后重启syslogd守护精灵:
killall -HUP syslogd
也可以放弃旧的"syslogd"和"klogd",转用Metalog,一个有效的替代软件:
http://metalog.sourceforge.net
上传/下载的文件名都带路径记录,如下:
/home/ftp//pub/bla.jpg
双斜杠"//"是chroot限制.
17.监视当前会话

自从0.97.7版本以后,可以随时输入"pure-ftpwho"来查看当前活动的会话.
如果敲入"pure-ftpwho",得到的回复是"Command not found",应该把"/usr/local/sbin"添加到你的PATH环境变量中.

默认的输出看起来是这样的:
+------+---------+-------+------+-------------------------------------------+
| PID | Login |For/Spd| What | File/IP |
+------+---------+-------+------+-------------------------------------------+
| 2239 | jedi | 00:17 | D/L | XFree86-clients-4.0.3.tar.gz |
| '' | '' | 41K/s| 33% | -> nestea.funboard.de |
+------+---------+-------+------+-------------------------------------------+
| 2385 | ftp | 00:02 | IDLE | |
| '' | '' | | | -> gw2.crn.kjop.co.uk |
+------+---------+-------+------+-------------------------------------------+
"D/L"意思是客户正在下载,"U/L"意思是正在上传.上传/下载的文件名在后面的列中."33%"是当前操作的实时进度,"41K/s"是客户占用的带宽.用这个命令你可以查处谁在大量占用带宽.
"pureftp-who"命令接受下面的选项:

17.1. '-c':
程序被web服务器(CGI界面)调用.输出含有初始content-type header的完整的HTML页.当发现名为"GATEWAY_INTERFACE"的环境变量时,这个选项自动启用.如果你可以从一个启用CGI的web服务器(Apache, Roxen, Caudium, WN, ...)上访问程序,这将是默认的.
17.2. '-h':
显示命令行选项的摘要.
17.3. '-n':
不解析主机名,只显示IP地址(更快).
17.4. '-s':
以一种易于被shell脚本解析的格式(并不对用户友好)输出.每个客户只用一行,只有数字数据,用"|"隔开.对人来说,这并不容易读懂.但它这样设计的目的就是为了容易被shell脚本解析(cut/sed).在用户名或文件名中的"|"也被引用,不过"|"变成了"\|".
输入"pure-ftpwho -h"来检查这种格式.

17.5. '-w':
输出完整的HTML页(Web模式).

17.6. '-W':
输出不含header和footer的HTML页。这是嵌入的模式,和来自CGI,SSI或者PHP脚本的内联的调用相配合。
17.7. '-x':
为后期处理输出结构良好的XML数据.这是最精确的模式.时间以秒为单位,文件大小以byte为单位(在其他的输出模式下,文件大小以kbyte计算,更易读).
17.8. '-v':
文本模式的冗长输出.附件的信息包括下载的/上传的文件的大虾,本地IP或主机名和链接端口.这对虚拟主机尤其有效.下面是"pure-ftpwho -v"的一个输出样本:
+------+---------+-------+------+-------------------------------------------+
| PID | Login |For/Spd| What | File/Remote IP/Size(Kb)/Local IP |
+------+---------+-------+------+-------------------------------------------+
| 9086 | j | 00:04 | DL | linux-2.4.4.tar.bz2 |
| '' | '' | 22K/s| 27% | -> localhost |
| '' | '' | | | Total size: 20859 Transfered: 5632 |
| '' | '' | | | <- localhost:21 |
+------+---------+-------+------+-------------------------------------------+

18.上传以后
成功上传以后,可以以新上传的文件的文件名为参数,调用外部的程序或者脚本.你可以用这个功能在当有新文件上传时自动发信.也可以把它传递给一个调节系统,杀毒软件,MD5签名生成器,或者随便什么你想对文件做的事.

要支持这个,服务器编译时必须设置为--with-uploadscript.FTP服务器运行时必须加上"-o"选项.最后,必须运行本软件包提供的运行一个叫做"pureuploadscript"的的守护精灵.
*重要提示*:
*必须先启动Pure-FTPd,后启动pureuploadscript.如果顺序搞反了,就不能正常运行.*
为安全起见,服务器从不启动任何外部程序.因此,才需要一个分离的守护精灵,用来读取服务器放到指定的管道里的新上传.处理上传时是同步的,连续的.所以在负荷很大的或者不受信任的服务器上,带着冗长或者极耗CPU的脚本运行pureuploadscript并不是好主意.

运行pureuploadscript的一种更简单的方法是"pure-uploadscript -r <脚本文件名>":
/usr/local/sbin/pure-uploadscript -r /bin/antivirus.sh
新上传的文件的绝对路径作为第一个参数传递过去.
一些环境变量也用有趣的值填充.
- UPLOAD_SIZE :文件的大小,以byte为单位.
- UPLOAD_PERMS :权限,以八进制值表示.
- UPLOAD_UID : 所有这的UID.
- UPLOAD_GID : 文件所属的组.
- UPLOAD_USER : 所有者的名字.
- UPLOAD_GROUP : 文件所属的组的名字.
- UPLOAD_VUSER : 使用者的全名,或者虚拟用户的名字(最多127个字符).
pure-uploadscript也有一些选项:
- "-u <uid>"和"-g <gid>",以另一个帐户来运行"pure-uploadscript".脚本也会以同样的身份运行.
-"-B",把运行放到后台
要看更多的附加信息,请查看手册页("man pure-uploadscript")

19. 目录列表
内建的"ls"支持常规的"ls"命令的所有的常见选项.
为了更方便的使用FTP,下面的东西你应该了解的更多一些:

- '-l': 逆向列表,报告日期、所有者、权限和大小。
- '-a': 显示以点开头的文件和目录
- '-F': 在文件夹的名称后添加“/”
- '-d': 显示文件夹本身,而不是文件夹中的内容
- '-R': 递归列表
- '-S': 按大小排序
- '-t': 按日期排序
- '-r': 把排序顺序反过来
要是你不熟悉Unix,就登录到你的FTP服务器,依次尝试下面的命令:
ls
ls –F
ls –l
ls –la
ls –lR
ls –Sl
ls –Slr
ls –tl
ls –tlr
支持globbing。因此,如果你在找一个在未知文件夹中的GNOME RPM 包,你可以这样找:
ls */gnome*.rpm

20.虚拟配额
用虚拟配额可以限制用户文件夹中的文件的最大数目和总大小.
之所以说配额限制是"虚拟"的,是因为它们处理配额并不是内核级的,而是用FTP服务器本身.与内核配额相比,有下列优点:

-虚拟配额只针对FTP服务器.在同一个分区上,可以用不同的系统配额来处理其他文件(eg.mail).

-即使用户共享相同的系统UID,也可以对每个用户设置不同的虚拟配额.

-虚拟配额在不支持系统配额的文件系统上也能运行.不过虚拟配额比较慢,而且不像内核配额那样可靠.所以不能无保留的信任虚拟配额,系统配额可能是允许忽略虚拟配额的.还有,文件系统用户文件夹必须能正确的支持文件锁定.

在Pure-FTPd中,虚拟配额由的几个位于chrooted用户主目录中的叫".ftpquota"的简单的文件提供的.文件中只包含两个数字:用户现有文件数量和文件夹(+子文件夹)的总大小,以byte为单位.有新文件上传时,这些数字变大;当文件被删除时,这个数字变小.很简单!
当然,当对一个用户启用了虚拟配额,此用户必定:1)chrooted 2)不允许写配额文件 3)不允许他用禁止访问某些文件夹的方法来欺骗计数器.

用"-n"选项可以给所有的用户启用配额.选项后面跟着文件的最大数量和最大大小(以Mb为单位).每个用户都有相同的配额.
例外:如果启用了"-a"选项,受信组的成员不受配额限制.

如果你用了PureDB或者SQL数据库,就可以给每个用户不同的配额.关于PureDB数据库的更多信息,请参考"README.Virtual-Users"文件.
所以,如果你希望给所有的用户最多1000个文件,最大10Mb,这样运行服务器:
/usr/local/sbin/pure-ftpd -n 1000:10
".ftpquota"文件如果丢失了,就会要求建立.不过当文件建立时,服务器就会假设该帐户为空.如果事实并非如此,那么应该运行"pure-quotacheck"实用程序来创建初始".ftpquota"文件.
"pure-quotacheck"工具可以计算文件夹中的文件大小以及数量,并建立一个包含这些信息的".ftpquota"文件.
语法如下:
pure-quotacheck -u username/uid -d home directory [-g group/gid]
例如,如果想统计所有者为"ftpusers"系统帐户的/home/ftpusers/john文件夹的使用情况,只要运行:
pure-quotacheck -u ftpusers -d /home/ftpusers/john
只要你想,可以随时运行"pure-quotacheck",就算".ftpquota"文件已经存在也没关系.
实际上,定时为每个用户运行"pure-quotacheck"是个很好的做法,这样可以保证储存的配额信息总是准确的,就算服务器有些故障(服务器bug,文件系统崩溃,强制杀掉服务,等等).

对于传统的磁盘配额,当硬限制达到时,就无法写入新的数据.对于可以迅速创建的文件(在本地文件系统上操作),这听上去不错.但如果文件传输是通过网络进行的,那就太令人扫兴了.
虚拟配额的工作方式很古怪但是却很灵活的方式.当用户开始上传时,新上传的文件可以和用户的总配额一样大。意思就是,如果她的配额是10Mb,他就可以上传一个10Mb的文件,即使在他的文件夹中已经有9Mb的其他文件了。在他上传文件的时候,在上传结束之前,会意识到自己的配额已经快用光了,这样他就会转移/压缩/删除其他文件来节省空间。只有当上传完成以后,才会对磁盘配额进行检查。如果配额仍然紧张,新上传的文件就会被删除。
21. 验证
Pure-FTPd支持多种验证方法.要使用某种方法,你得把它编译进去(检查./configure选项).
-使用Unix验证(传统的/etc/passwd文件),运行服务器时添加下面的选项:
    -l unix
-要使用PAM验证,添加:
    -l pam
-要使用PureDB(虚拟用户),添加:
    -l puredb:/path/to/puredb_database
    (关于PureDB索引文件,详情请阅读README.Virtual-Users)
-要使用LDAP文件夹,添加:
    -l ldap:/path/to/ldap_config_file
    (关于LDAP文件夹,详情请阅读 README.LDAP)
-要使用MySQL数据库,添加:
    -l mysql:/path/to/mysql_config_file
    (关于MySQL数据库,详情请阅读README.MySQL)
-要使用Postgres数据库,添加:
    -l pgsql:/path/to/postgres_config_file
    (关于Postgres数据库,详情请阅读README.PGSQL)
-要使用外部验证手段(用pure-auth),使用:
    -l extauth:/path/to/authd/socket
    (关于外部验证,详情请阅读README.Authentication-Modules)
多种验证方法可以联锁进行.例如,你可以这样运行服务器:
/usr/local/sbin/pure-ftpd -lldap:/etc/pureftpd-ldap.conf -lpuredb:/etc/pureftpd.pdb –lunix
每种方式都按顺序尝试.用上面的命令行,首先探测LDAP文件夹.如果用户名在这个文件夹没有找到,就在PureDB数据库中搜索同样的用户名.如果还没有找到,就搜索/etc/passwd.如果在LDAP文件夹找到了用户名,但给出的密码是错的,就跳过进一步的验证方法.
如果你在-l选项后没有特殊指定,在服务器编译时加入了PAM支持时,默认为PAM验证方式,否则就以Unix为默认.

22. 文件夹别名
文件夹别名为"cd"命令提供"缩写".例如,如果你给"/usr/misc/pictures"定义了一个叫做"pictures"的别名,当用户输入"cd pictures"而没有真实的"pictures"目录存在时,他就被会自动的引导到"/usr/misc/pictures".不像符号链接,"cd pictures"在任何目录下都有效.代字符"~"不可扩展.
用户可以输入下面的命令来获得有效的别名列表.
SITE ALIAS
要支持这个功能,服务器编译时必须在./configure时加上--with-diraliases.
要定义别名/文件夹对,要建立一个名为/etc/pureftpd-dir-aliases的文件,格式如下:
别名和目录的交互行
(这在目录和别名间启用嵌入的空格,没有引用规则)
可选的空行
可选的以"#"开头的行,作为解释
(不要到处放"#"号)
例如:
pictures
/usr/misc/pictures
sources
/usr/src
# 这是OpenBSD端口树
pureftpd-port
/usr/ports/net/pure-ftpd

23.优先级分离
当启用优先级分离后,每个会话产生两个进程:
一个以"root"运行的"优先"进程,不过只能做很基本的、可信任的动作(绑定端口,删除ftpwho记分板(remove ftpwho scoreboard));一个是“客户”进程。在验证和chroot()以后,“客户”进程一定会取消所有特权,并精确的与父进程通过一个私有信道联系。
优先级分离减弱了高负荷服务器的表现,但增强了理论上的安全性。
一些旧的、有损坏的操作系统可能会对取消特权的进程允许ptrace()系统调用。
在这些平台上,如果非受信用户也可有shell访问,启用优先级分离就不是什么好主意。使用src/ptracetest程序来检查你是否在使用这些平台。至少在Solaris,ISOS,EkkoBSD,OpenBSD,FreeBSD和Linux上是安全的。

24. 为高负荷进行优化
如果要在高负荷的服务器上使用Pure-FTPd,下面是一些获得最佳表现的提示:
-编译选项加上:
env CFLAGS="-O2 -fomit-frame-pointer -fgcse -Os" ./configure --with-minimal --without-inetd --without-pam
make install-strip
-以Standalone模式运行
不使用 -C,不启用pure-ftpwho或pure-uploadscript (-o),不启用per-user limits (-y).
-增加系统的最大描述符的数目和本地端口范围
在Linux内核上,可以尝试:
echo 2000 > /proc/sys/fs/super-max
echo 60000 > /proc/sys/fs/file-max
ulimit -n 60000
echo 30000 65534 > /proc/sys/net/ipv4/ip_local_port_range
-在:Linux内核上,禁止syncookies, ecn, timestamps 和window scaling
echo 0 > /proc/sys/net/ipv4/tcp_syncookies
echo 0 > /proc/sys/net/ipv4/tcp_ecn
echo 0 > /proc/sys/net/ipv4/tcp_timestamps
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
-在装载的文件系统中,禁用访问时间更新.在Linux系统中,只要在/etc/fstab文件中的每个挂载点后加上"noatime,nodiratime".
-禁用syslog输出和DNS查询.运行时使用:
/usr/local/sbin/pure-ftpd -f none –H
在FreeBSD,DJ_Oggy,推荐下面的设置:
>>>引用:
进入单用户模式(运行shutdown now 或者boot-s),输入
tunefs -n enable <文件系统>
我推荐 / /usr /var
在 /etc/fstab ,在所有的文件系统中添加",noatime"
在/boot/loader.conf 添加下面的东西:
hw.ata.wc="1"
kern.ipc.nmbclusters="60000"
在/etc/sysctl.conf 添加下面的东西:
vfs.vmiodirenable=1
kern.ipc.maxsockbuf=2097152
kern.ipc.somaxconn=8192
kern.ipc.maxsockets=16424
kern.maxfiles=65536
kern.maxfilesperproc=32768
net.inet.tcp.rfc1323=1
net.inet.tcp.delayed_ack=0
net.inet.tcp.sendspace=65535
net.inet.tcp.recvspace=65535
net.inet.udp.recvspace=65535
net.inet.udp.maxdgram=57344
net.local.stream.recvspace=65535
net.local.stream.sendspace=65535

给它两片阿斯匹林,重启,早上再叫我!!!!
(give it two asprin, a reboot and call me in the morning!!!!!)
<<<引用结束


25.已知的内容
-在非linux系统,"-c"只能在standalone模式下运行.
-在登录用户名中应该避免使用空格:分析日志文件的应用在这里常常会被"噎住".
-在可选格式中,未完成的传输不被记录.
-在Solaris(至少是Solaris8),大文件+虚拟chroot接合起来不能编译.(处处都要用stat64结构体代替stat).
-在Solaris系统,要让chroot在pure-ftpd中运行,在新的根目录中,需要包含下列文件的dev文件夹:
crw-rw-rw- 1 root other 11, 42 Dec 10 15:02 tcp
crw-rw-rw- 1 root other 105, 1 Dec 10 15:02 ticotsord
crw-rw-rw- 1 root other 11, 41 Dec 10 15:03 udp
crw-rw-rw- 1 root other 13, 12 Dec 10 15:03 zero
不然的话,会出现这种情况:
ftp> ls
425 Can't create the data socket: Bad file number.
如果所有用户都已经被chroot,必须在每个主目录建立下列的文件.这样做:
mkdir dev
mknod dev/tcp c 11 42
chmod 0666 dev/tcp
mknod dev/udp c 11 41
mknod dev/zero c 13 12
mknod dev/ticotsord c 105 1
(Kenneth Stailey报告)
-拒绝接受ASCII续传.ASCII传输简直就是地狱,因为这同时消耗客户和服务器的CPU时间.而且,这种传输消耗的带宽大余二进制传输.不过,允许Windows客户上传脚本到Unix服务器,并去掉那些讨厌的^M记号.Pure-FTPd提供ASCII传输,但不允许续传.这种设计是故意的.要重启ASCII传输,文件必须一比特一比特的读取,分析.这可能要持续很久.只要发送两个很平常的命令,一个客户就能完全干掉一个服务器(消耗大量的CPU和磁盘资源).这没有什么解决办法.
另外一点就是当RFC描述续传ACSII传输时,许多客户端和服务器用另外一种方法实现.后果就是进行ASCII续传会导致数据崩溃.有些主流的服务器不跟踪RFC,所以有的客户端为了支持这些FTP服务器犯同样的错误.同时,其他一些现代的客户端和服务器则试图全面的配合RFC.所以,如果客户端和服务器用相同的"方言",传输可以进行.不然的话,你的文件就乱掉了.很棘手,是吧?
如果客户上传脚本到你的服务器,认为可以安全的把它从自己的硬盘上删除怎么办?如果远程文件坏掉了,他就会变得很生气.这就是Pure-FTPd拒绝ASCII续传的原因.要是客户告诉你,他不能上传/下载一个部分传输的ASCII文件,就告诉它删除已经传输了一部分的文件,重新传输.这是为了安全着想.
26.下载Pure-FTPd
Pure-FTPd主页是:http://www.pureftpd.org
Pure-FTPd邮件列表: http://www.pureftpd.org/ml
也可以通过CVS获得最新的snapshot:
cvs -d:pserver:anonymous@cvs.pureftpd.org:/cvsroot/pureftpd login
(不用输入任何密码,直接敲回车)
cvs -z3 -d:pserver:anonymous@cvs.pureftpd.org:/cvsroot/pureftpd co pureftpd
cd pureftpd
./autogen.sh
同样,你也可以看一看包含源代码包的FTP镜像的"snapshots"目录,其中包含了可以编译的实验性的源码.
FreeBSD 移植版本可以从这里得到:ports/ftp/pure-ftpd/
OpenBSD 移植版本可以从这里得到:ports/net/pure-ftpd/
NetBSD 移植版本可以从这里得到:pkgsrc/net/pureftpd/
Pure-FTPd的Open Packages(C&W 多种结构OpenPKG标准包)可以从 http://www.openpkg.org/download.html 得到.预编译的Solaris 二进制包可以从相同的位置得到.
MacOS X包可以从Fink得到:http://fink.sourceforge.net/pdb/package.php/pure-ftpd
Gentoo Linux emerging : emerge pure-ftpd
EkkoBSD基础安装就包含了Pure-FTPd.
最新的发布和常规的snapshots可以从下面得到:
ftp://ftp.pureftpd.org/pub/pure-ftpd (一个快速镜像的链接)
ftp://ftp.fr.pureftpd.org/pub/pure-ftpd (主站,慢)
ftp://ftp2.fr.pureftpd.org/pub/mirrors/ftp.fr.pureftpd.org/pub/pure-ftpd (T-Online,快)
ftp://ftp3.fr.pureftpd.org/pub/pure-ftpd (OAV / Cable&Wireless FR, 快)
ftp://ftp.nl.pureftpd.org/pub/pure-ftpd (WideXS NL, 快)
ftp://ftp.dk.pureftpd.org/mirrors/pure-ftpd (Sunsite DK 镜像, 快)
ftp://ftp.cn.pureftpd.org/pub/pureftpd/pure-ftpd (中国镜像)
ftp://ftp.es.pureftpd.org/mirror/pureftpd/latest (西班牙镜像,快)
当然,欢迎新的镜像.
韩文RPM二进制文件可以从 http://kldp.org/~eunjea 得到,这得归功于Im Eunjea.
QNX移植版本可以从以下站点获得:
    http://www.me.iitb.ac.in/~mritun
    http://mritun.qnx.org.ru
    http://www.qnxzone.com/~mritun
如果有问题,建议或补丁,尽管给邮件列表中的人发信.新手和一些初级的问题同样欢迎.
感谢Frank DENIS "Jedi/Sector One"j@pureftpd.org
*请读CONTACT文件

给Debian用户的备忘录
由于Stefan Hornburg的工作,现在,在有官方维护的Pure-FTPd的Debian unstable包,可以在你偏好的软件库找到.
目前,可以得到的包有:
- pure-ftpd
- pure-ftpd-common
- pure-ftpd-ldap
- pure-ftpd-mysql
希望大家用apt-get玩的愉快,并报告bug来改进这些软件包.
这些包可以从你喜欢的Pure-FTPd镜像的"debian"目录获得.
Snapshot可以从下面的软件源获得
(woody) deb http://debian.cobolt.net/ pure-ftpd-test main
(sid) deb http://debian.cobolt.net/ pure-ftpd-sid main

  评论这张
 
阅读(546)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018