[在linux中]linux中Pure-FTPd 安装配置笔记

更新时间:2019-07-15    来源:linux    手机版     字体:

【www.bbyears.com--linux】

下载:

从官方网站下载最新的稳定版本http://www.pureftpd.org/ 其最新版本是1.0.29,下载地址
为:http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.29.tar.bz2。

系统环境

CentOS 5.5
PureFTPd 1.0.29

编译安装

 代码如下

# tar -xvjf pure-ftpd-1.0.29.tar.bz2
# cd pure-ftpd-1.0.29
# ./configure --help # 查看编译选项

PureFTPd有很多的编译配置选项,下面就列出部分主要的配置

--prefix=PREFIX
--with-sysquotas        使用系统磁盘配额 (非虚拟)
--with-altlog           支持选择日志格式(类似Apache)
--with-puredb           支持虚拟用户 (FTP登陆用户而非系统用户)
--with-extauth          支持扩展验证模块
--with-pam              启用PAM验证支持 (默认=禁用)
--with-cookie           启用Cookie支持 (-F 选项)
--with-throttling       支持带宽控制 (默认=禁用)
--with-ratios           支持 上传/下载 速度控制
--with-quotas           支持 .ftpquota 文件(指定磁盘配额使用)
--with-ftpwho           支持pure-ftpwho(查看在线用户的程序)
--with-largefile        支持大于2G的文件
--with-welcomemsg       支持 welcome.msg 向后兼容(已经过时)
--with-uploadscript     上传后允许执行外部脚本 (测试阶段)
--with-virtualhosts     在不同的IP地址提供虚拟服务器功能
--with-virtualchroot    允许在chroot的环境下通过符合连接跳转到外部
--with-diraliases       启用目录别名
--with-nonroot          普通模式或者说是限制模式. 如果你在该服务器上没有root权限
那只有启用该项
--with-peruserlimits    支持每个用户的并发限制
--with-language=        语言支持< english | traditional-chinese | simplified-chinese>
--with-ldap             在LDAP目录中提供用户数据库
--with-mysql            在MySQL数据库中存放用户数据
--with-pgsql            在PostgreSQL数据库中存放用户数据
--with-privsep          启用权限分离
--with-tls              启用 SSL/TLS 支持 (测试阶段, 需要安装 OpenSSL)
--with-certfile=        证书文件 (默认目录: /etc/ssl/private/pure-ftpd.pem)
--with-rfc2640          启用兼容 RFC 2640 支持(UTF-8 编码的文件名,测试阶段,需要安装iconv)
--with-everything       启用大多数选项,编译完功能版本的服务器端。
为了方便起见,我在这里使用了几个基本的编译命令来配置编译一个全功能版本的程序

 代码如下 # ./configure --prefix=/usr/local/pure-ftpd/ --with-language=simplified-chinese --with-everything

注意:如果要指定安装路径,那么路径最好是/usr/local/pure-ftpd或/usr/local/pureftpd/ 或者干脆就不指定。如果不指定目录的话默认是将程序的文件安装到/usr/local下的相应目录下。我这里指定目录是为了便于管理。至于为什么安装目录也有如此的讲究,在下面再做说明。

 代码如下

# make && make check && make install

# mkdir /usr/local/pure-ftpd/etc
# cp configuration-file/pure-ftpd.conf /usr/local/pure-ftpd/etc/ # 配置文件拷贝到/etc目录下
# cp configuration-file/pure-config.pl /usr/local/pure-ftpd/sbin/
//似乎make install忘记了将这个文件复制到相应的目录了,我们只有手动自己做了
# chmod 755 /usr/local/pure-ftpd/sbin/pure-config.pl # 设置相应的权限

系统集成

这里所说的系统集成就是制定系统变量,使系统可以找到我们刚刚安装的程序,最简单的方法就是将一些可执行的程序,man文件在系统指定的path中建立符号链接就可以了。当然我们也可以修改系统变量,如PATH变量,man page的配置文件等等。但是我还是习惯在相应的目录建立符合连接。

 代码如下

# cd /usr/local/bin/
# ln -s /usr/local/pure-ftpd/bin/* .
# ln -s /usr/local/pure-ftpd/sbin/* /usr/local/sbin/
# ln -s /usr/local/pure-ftpd/man/man8/* /usr/local/share/man/man8/

PureFTPd配置

PureFTPd 程序的一大特点就是官方推荐使用命令行参数的形式来启动服务,而非我们经常使用的配置文件加命令的形式来启动服务。不过PureFTPd也是支持读取配置文件的。只不过要用到一个Python编写的脚本,利用这个脚本来将配置文件中的值转换为命令行参数!

(1)创建一个匿名访问的FTP服务器

匿名用户访问的FTP服务器比较好配置,只需要做一下与匿名用户相关的配置即可。如果只开启匿名访问的ftp服务器那么其ftp目录就是系统中ftp用户的home目录。可以使用finger命令来查看:

 代码如下

# finger ftp

Login: ftp                              Name: FTP User
Directory: /var/ftp                     Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.

当然这个目录我也可以通过修改/etc/passwd文件来修改。但要记住,这个目录只针对匿名用户

●修改匿名用户上传/下载目录,以及相关的权限

 代码如下 # usermod -d /home/ftp
# mkdir /home/ftp;chown ftp.ftp /home/ftp

●修改相关配置
# vi /etc/pure-ftpd.conf

ChrootEveryone              yes     # 启用chroot
BrokenClientsCompatibility  yes     # 兼容不同客户端
Daemonize                   yes     # 后台运行
MaxClientsPerIP             20      # 每个ip最大连接数
VerboseLog                  yes     # 记录日志
DisplayDotFiles             no      # 显示隐藏文件
AnonymousOnly               yes     # 只允许匿名用户访问
NoAnonymous                 no      # 运行匿名用户连接
SyslogFacility              none        # 不将日志在syslog日志中显示
DontResolve                 yes     # 不进行客户端DNS解析
MaxIdleTime                 15      # 最大空闲时间
LimitRecursion              2000 8      # 浏览限制,文件2000,目录8层
AnonymousCanCreateDirs      yes     # 匿名用户可以创建目录
MaxLoad                     4           # 超出负载后禁止下载
PassivePortRange            45000 50000 # 被动模式端口范围
AnonymousRatio              1 10        # 匿名用户上传/下载比率
AntiWarez                   yes     # 禁止下载匿名用户上传但未经验证的文件
AnonymousBandwidth          200     # 匿名用户带宽限制(KB)
Umask                       133:022     # 创建文件/目录默认掩码
MinUID                      100     # 最大UID限制
AllowUserFXP                no      # 仅运行用户进行FXP传输
AllowAnonymousFXP           no      # 对匿名用户和非匿名用户允许进行匿名 FXP 传输
ProhibitDotFilesWrite       no      # 不能删除/写入隐藏文件
ProhibitDotFilesRead        no      # 禁止读取隐藏文件
AutoRename                  yes     # 有同名文件时自动重新命名
AnonymousCantUpload         no      # 不允许匿名用户上传文件
AltLog                      clf:/var/log/pureftpd.log   # clf格式日志文件位置
MaxDiskUsage                99      # 当磁盘使用量打到99%时禁止上传
CustomerProof               yes     # 防止命令误操作
配置一个匿名访问的服务器,上面的参数就够用了。可以根据自己的要求做一些具有针对性
的设置。详细的参数说明参见附录

●启动pureFTPd服务

 代码如下 # pure-config.pl /usr/local/pure-ftpd/etc/pure-ftpd.conf

屏幕上会显示下面的信息
Running: /usr/local/pure-ftpd/sbin/pure-ftpd -A -b -B -C20 -d -e -fnone -H -I15 -L2000:8 -M -m4 - p45000:50000 -q1:10 -s -t200 -U133:022 -u100 -r -Oclf:/var/log/pureftpd.log -k99 -Z

(2)创建一个虚拟用户验证的FTP服务器

●配置 FTP登录账户
pure-ftp默认采用Linux的root用户。虚拟用户则能够更好的控制访问权限。虚拟用户是和Linux系统用户关联的独立的账户系统。所以在创建虚拟用户之前最好先创建一个系统的账户和组。
创建一个ftpgroup组和ftpuser用户

 代码如下 # groupadd ftpgroup
# useradd -g ftpgroup -d /dev/null -s /etc ftpuser

接下来所有与虚拟用户相关的操作都可以用‘pure-pw’命令来完成。当然你也可以手动的来编辑相应的文件。

下面为虚拟用户存储文件的详细格式,一行一个用户

 代码如下 :word>:::::
::::
::::
:::

密码字段是加密后的密码,加密方式与系统的用户密码加密方式相同,用户可以执行setup命令配置。
除了account, password, uid, gid, home directory字段外,其他的字段可以为空

●使用命令添加一个虚拟用户
pure-pw命令的格式

 代码如下 pure-pw useradd [-f ] -u [-g ]
-D/-d [-c ]
[-t ] [-T ]
[-n ] [-N ]
[-q ] [-Q ]
[-r [/][,...]
[-R [/][,...]
[-i [/][,...]
[-I [/][,...]
[-y ]
[-z -] [-m]

例如:

 代码如下 pure-pw useradd joe -u ftpuser -d /home/ftpusers/joe

回车后提示输入两次密码
使用 -d 参数指定一个用户的home目录后,该用户就被固定到这个目录了,其不能切换到上级目录如果要想让用户可以访问到别的目录,那么使用-D参数来指定hone目录。
如果pureFTPd的配置文件中指定了CreateHomeDir yes 的话,/home/ftpusers/joe 目录是没有必要手动创建的。当用户首次登录时如果目录不存在程序会自动创建相应的目录。
使用-z参数可以指定用户只能在一天中的某个时间段可以登陆ftp服务器。例如 -z 0900-1800那么joe只能在早上9点和下午6点这个时间段登陆。注意:如果设置登陆时间的用户已经通过验证登陆到ftp服务器上了,那么所做的登陆时间限制只能在他下次登陆验证的时候才能生效。
-r 与 -R 参数是约束用户从哪些IP登陆的。可以使用IP/mask的形式,如-r 192.168.1.0/24多个段用逗号隔开,如:-r 192.168.1.0/24,10.1.0.0/16,127.0.0.1/32 。单独的IP:-r 192.168.1.4,10.1.1.5主机名:-r bla.bla.net,yopcitron.com。以及一些相兼容的格式。
-y 参数是限制同一时刻一个用户最多能发起多少个会话(sessions)。""或0 代表无限制。该选项可以降低系统负载。效果同配置文件中的 MaxClientsPerIP
ok,现在用户 "joe" 已经创建成功了默认的虚拟用户列表文件存储在 安装目录的/etc/目录下,可以使用-f参数指定文件的存储路径
查看一下文件内容

 代码如下 # cat /usr/local/pure-ftpd/etc/pureftpd.passwd
joe:$1$ocfl1XW0$R0JaEh3CjGFByGbdN7qNy/:501:501::/home/ftpusers/joe/./::::::::::::

密码字段是经过加密的。

●更改用户信息
虚拟用户创建之后,你也可以通过pure-pw命令来修改其相关的信息,如限制下载
带宽、磁盘配额、用户全名、下载上传率等等
例如:我要修改用户joe的最大文件数为1000个,大小为10MB,命令如下:
# pure-pw usermod joe -n 1000 -N 10
查看一下虚拟用户列表文件
# cat /usr/local/pure-ftpd/etc/pureftpd.passwd
joe:$1$ocfl1XW0$R0JaEh3CjGFByGbdN7qNy/:501:501::/home/ftpusers/joe/./::::::1000:10485760:::::

●重置用户属性
要禁用文件数配额,执行 pure-pw usermod -n ""
要禁用文件大小配额,执行 pure-pw usermod -N ""
要禁用上传/下载比率,执行 pure-pw usermod -q "" -Q ""
要禁用下载带宽限制,执行 pure-pw usermod -t ""
要禁止上传带宽限制,执行 pure-pw usermod -T ""
要禁止IP地址过滤,使用 pure-pw usermod <-i,-I,-r or -R> ""
要禁止登陆时间限制,执行 pure-pw usermod -z ""
要禁止最大并发数控制,执行 pure-pw usermod -y ""

●删除用户
使用pure-pw userdel 命令可以删除一个已经存在的用户
pure-pw userdel [-f ] [-m]
如:pure-pw userdel joe
用户home目录中的文件不会被删除,需要手动删除

●更改密码
更改用户密码的命令
# pure-pw passwd [-f ] [-m]

●利用pure-pw命令查看用户信息
# pure-pw show joe

Login              : joe
Password           : $1$ocfl1XW0$R0JaEh3CjGFByGbdN7qNy/
UID                : 501 (ftpuser)
GID                : 501 (ftpgroup)
Directory          : /home/ftpusers/joe/./
Full name          :
Download bandwidth : 0 Kb (unlimited)
Upload   bandwidth : 0 Kb (unlimited)
Max files          : 0 (enabled)
Max size           : 10 Mb (enabled)
Ratio              : 0:0 (unlimited:unlimited)
Allowed local  IPs :
Denied  local  IPs :
Allowed client IPs :
Denied  client IPs :
Time restrictions  : 0000-0000 (unlimited)
Max sim sessions   : 0 (unlimited)
★应用更改
重要:
你可以通过上面提到的命令或者手动的来添加/删除用户,修改用户相关限制属性等等,但是这些改动都是针对虚拟用户列表文件的(pureftpd.passwd)。pureFTPd服务器程序是不认识这个文件的。要想让ftp server能够识别的我们所做的更改,必须要通过pure-pw mkdb 命令生成PureDB格式的文件,实际上PureDB数据文件就是从pureftpd.passwd文件转换过来的,为了ftp server可以更快的检索到指定的用户。
例如:
# pure-pw mkdb -> 当使用pure-pw 生成虚拟用户之后一定要使用pure-pw mkdb命令生成数据库文件,否则pure-ftp启动之后也无法验证虚拟用户
默认情况下会在软件安装目录/etc目录下生成pureftpd.pdb文件。
如:/usr/local/pure-ftpd/etc/pureftpd.pdb

或者直接指定生成的pdb文件和参照的虚拟用户列表文件
如:pure-pw mkdb /etc/accounts/myaccounts.pdb -f /etc/accounts/myaccounts.txt

当更改了虚拟用户列表文件之后都要重新生成pdb数据库文件。但不必要重新启动pureFTPd服务。可以使用-m参数来将更改立即应用到pdb数据库文件中,如:
# pure-pw passwd joe -m
当输入完两次新密码之后,密码的更改就同时应用到列表文件和pdb数据库文件中了。是不是很方便!

☆启用虚拟用户验证登陆
1、编译ftp服务器端的时候一定要加入--with-puredb 选项,或者干脆--with-everything
2、配置文件中加入PureDB /etc/pureftpd.pdb 或者启动服务器程序的时候加入参数
-l puredb/usr/local/pure-ftpd/etc/pureftpd.pdb
3、一定要注意自己的pdb文件的位置在哪

○配置文件 vi /usr/local/pure-ftpd/etc/pure-ftpd.conf

ChrootEveryone              yes         # 启用chroot
BrokenClientsCompatibility  yes         # 兼容不同客户端
Daemonize                   yes         # 后台运行
MaxClientsPerIP             20          # 每个ip最大连接数
VerboseLog                  yes         # 记录日志
DisplayDotFiles             no          # 显示隐藏文件
AnonymousOnly               no          # 只允许匿名用户访问
NoAnonymous                 yes         # 不允许匿名用户连接
SyslogFacility              none        # 不将日志在syslog日志中显示
DontResolve                 yes         # 不进行客户端DNS解析
MaxIdleTime                 15          # 最大空闲时间
LimitRecursion              2000 8      # 浏览限制,文件2000,目录8层
AnonymousCanCreateDirs      no          # 匿名用户可以创建目录
MaxLoad                     4           # 超出负载后禁止下载
PassivePortRange          45000 50000   # 被动模式端口范围
#AnonymousRatio                1 10     # 匿名用户上传/下载比率
UserRatio                 1 10          # 所有用户上传/下载比率
AntiWarez                   yes         # 禁止下载匿名用户上传但未经验证的文件
#AnonymousBandwidth            200      # 匿名用户带宽限制(KB)
UserBandwidth               8           # 所有用户最大带宽(KB)
Umask                       133:022     # 创建文件/目录默认掩码
MinUID                      100         # 最大UID限制
AllowUserFXP                no          # 仅运行用户进行FXP传输
AllowAnonymousFXP           no          # 对匿名用户和非匿名用户允许进行匿名 FXP 传输
ProhibitDotFilesWrite       no          # 不能删除/写入隐藏文件
ProhibitDotFilesRead        no          # 禁止读取隐藏文件
AutoRename                  yes         # 有同名文件时自动重新命名
AnonymousCantUpload         yes         # 不允许匿名用户上传文件
AltLog                     clf:/var/log/pureftpd.log                # clf格式日志文件位置
PureDB                     /usr/local/pure-ftpd/etc/pureftpd.pdb        # 用户数据库文件
MaxDiskUsage               99           # 当磁盘使用量打到99%时禁止上传
CreateHomeDir              yes          # 如果虚拟用户的目录不存在则自动创建
CustomerProof              yes          # 防止命令误操作
●启动pureFTPd服务
# pure-config.pl /usr/local/pure-ftpd/etc/pure-ftpd.conf
若要pureFTPd随系统启动,将命令加入到 /etc/rc.local文件中,如下
# echo "pure-config.pl /usr/local/pure-ftpd/etc/pure-ftpd.conf " >> /etc/rc.local

附录1:pure-config.pl 文件

 代码如下

#! /usr/bin/perl

# (C) 2001-2006 Aristotle Pagaltzis
# derived from code (C) 2001-2002 Frank Denis and Matthias Andree

use strict;

my ($conffile, @flg) = @ARGV;

my $PUREFTPD;
-x && ($PUREFTPD=$_, last) for qw(
${exec_prefix}/sbin/pure-ftpd
/usr/local/pure-ftpd/sbin/pure-ftpd
/usr/local/pureftpd/sbin/pure-ftpd
/usr/local/sbin/pure-ftpd
/usr/sbin/pure-ftpd
);

my %simple_switch_for = (
IPV4Only                  => "-4",
IPV6Only                  => "-6",
ChrootEveryone          => "-A",
BrokenClientsCompatibility  => "-b",
Daemonize                 => "-B",
VerboseLog                => "-d",
DisplayDotFiles         => "-D",
AnonymousOnly           => "-e",
NoAnonymous             => "-E",
DontResolve             => "-H",
AnonymousCanCreateDirs      => "-M",
NATmode             => "-N",
CallUploadScript            => "-o",
AntiWarez               => "-s",
AllowUserFXP            => "-w",
AllowAnonymousFXP           => "-W",
ProhibitDotFilesWrite       => "-x",
ProhibitDotFilesRead        => "-X",
AllowDotFiles           => "-z",
AutoRename              => "-r",
AnonymousCantUpload     => "-i",
LogPID              => "-1",
NoChmod             => "-R",
KeepAllFiles            => "-K",
CreateHomeDir           => "-j",
NoRename                => "-G",
CustomerProof           => "-Z",
NoTruncate              => "-0",
);

my %string_switch_for = (
FileSystemCharset       => "-8",
ClientCharset       => "-9",
SyslogFacility      => "-f",
FortunesFile        => "-F",
ForcePassiveIP      => "-P",
Bind                => "-S",
AnonymousBandwidth  => "-t",
UserBandwidth       => "-T",
TrustedIP           => "-V",
AltLog          => "-O",
PIDFile         => "-g",
);

my %numeric_switch_for = (
MaxIdleTime         => "-I",
MaxDiskUsage        => "-k",
TrustedGID          => "-a",
MaxClientsNumber        => "-c",
MaxClientsPerIP     => "-C",
MaxLoad         => "-m",
MinUID          => "-u",
TLS             => "-Y",
);

my %numpairb_switch_for = (
LimitRecursion      => "-L",
PassivePortRange        => "-p",
AnonymousRatio      => "-q",
UserRatio           => "-Q",
);

my %numpairc_switch_for = (
Umask               => "-U",
Quota               => "-n",
PerUserLimits       => "-y",
);

my %auth_method_for = (
LDAPConfigFile      => "ldap",
MySQLConfigFile     => "mysql",
PGSQLConfigFile     => "pgsql",
PureDB          => "puredb",
ExtAuth         => "extauth",
);

my $simple_switch = qr/(@{[join "|", keys %simple_switch_for ]})s+yes/i;
my $string_switch = qr/(@{[join "|", keys %string_switch_for ]})s+(S+)/i;
my $numeric_switch = qr/(@{[join "|", keys %numeric_switch_for ]})s+(d+)/i;
my $numpairb_switch = qr/(@{[join "|", keys %numpairb_switch_for ]})s+(d+)s+(d+)/i;
my $numpairc_switch = qr/(@{[join "|", keys %numpairc_switch_for ]})s+(d+):(d+)/i;
my $auth_method = qr/(@{[join "|", keys %auth_method_for ]})s+(S+)/i;

die "Usage: pure-config.pl  [extra options]n"
unless defined $conffile;

open CONF, "< $conffile" or die "Can"t open $conffile: $!n";

!/^s*(?:$|#)/ and (chomp, push @flg,
/$simple_switch/i             ? ($simple_switch_for{$1}) :
/$string_switch/i             ? ($string_switch_for{$1} . $2) :
/$numeric_switch/i      ? ($numeric_switch_for{$1} . $2) :
/$numpairb_switch/i     ? ($numpairb_switch_for{$1} . "$2:$3") :
/$numpairc_switch/i     ? ($numpairc_switch_for{$1} . "$2:$3") :
/$auth_method/i         ? ("-l" . "$auth_method_for{$1}:$2") :
/UnixAuthentications+yes/i ? ("-l" . "unix") :
/PAMAuthentications+yes/i  ? ("-l" . "pam") :
()
) while ;

close CONF;

print "Running: $PUREFTPD ", join(" ", @flg), "n";
exec { $PUREFTPD } ($PUREFTPD, @flg) or die "cannot exec $PUREFTPD: $!";

附录2:pure-ftpd.conf 文件

 代码如下

# vi sample pure-ftpd.conf

# 将每个用户限制在自己的home目录下
ChrootEveryone              yes

# 兼容ie等比较非正规化的ftp客户端。默认:no
BrokenClientsCompatibility  yes

# 最大用户连接数。默认:50
MaxClientsNumber            2000

# 后台模式(守护进程模式)
Daemonize                   yes

# 同一个IP允许连接数(可以防止迅雷、快车等程序疯狂开线程)。默认:8
MaxClientsPerIP             20

# 如果要记录所有的客户端命令,请设置为‘yes’该选项可以将日志同步复制到日志服务器。默认:no
VerboseLog                  yes

# 显示隐藏文件。默认:yes
DisplayDotFiles             yes

# 不允许验证用户。只作为匿名ftp服务器。默认:no
AnonymousOnly               no

# 不允许匿名用户连接。只允许验证用户连接。默认:no
NoAnonymous                 no

# 该选项是说将何种类型的日志同步写入到syslog中。
# 类型包括(auth, authpriv, daemon, ftp, security, user, local*)
# 默认是"ftp"如果不想将ftp的日志显示在/var/log/message中。则禁用即可: "none"
SyslogFacility              none

# 显示 cookies
# FortunesFile              /usr/share/fortune/zippy

# 在日志文件中不解析主机名。日志越详细所需要的带宽也就越大。如果服务器的
# DNS解析有问题或者服务器的负载过大,建议将该选项配置yes。默认为:yes
DontResolve                 yes

# 最大空闲时间。单位:分钟 (默认 = 15 分钟)
MaxIdleTime                 15

# LDAP 配置文件
# LDAPConfigFile                /etc/pureftpd-ldap.conf

# MySQL 配置文件 (详情见 README.MySQL)
# MySQLConfigFile               /etc/pureftpd-mysql.conf

# Postgres 配置文件 (详情见 README.PGSQL)
# PGSQLConfigFile               /etc/pureftpd-pgsql.conf

# PureDB 用户数据库 (详情见 README.Virtual-Users)
# PureDB                        /etc/pureftpd.pdb

# pure-authd 的 socket 路径 (详见 README.Authentication-Modules)
# ExtAuth                       /var/run/ftpd.sock

# 如果要使用PAM验证,取消下面行的注释
# PAMAuthentication             yes

# 如果要使用/etc/passwd 文件验证。取消下面行的注释
# UnixAuthentication            yes

# 注意:LDAPConfigFile, MySQLConfigFile, PAMAuthentication 与 UnixAuthentication
# 只能启用一个,但他们可以联合使用。例如:你启用了 MySQLConfigFile 之后又启用了
# UnixAuthentication那么同一时刻只有SQL server 可用。如果SQL authentication 失败,
# 例如用户没有找到,那么系统会重试其他的方式来验证,这时候它就会找/etc/passwd 和
# /etc/shadow文件. 如果通过 SQL 验证的结果是因为密码错误,那么就不会在进行下面的
# 验证了。由此得知,验证方法可以写多个,但同一个时刻只有一个工作,且当验证时找不
# 到信息时才会进行下一个验证方式。但当验证错误时就终止验证了。

# "ls" 递归限制。第一个参数是最大可显示的文件数。第二个参数是子文件夹深度
LimitRecursion              2000 8

# 匿名用户是否可以创建新文件夹
AnonymousCanCreateDirs      no

# 如果系统负载超过下面所给的数字,那么匿名用户将无法下载
MaxLoad                     4

# 在被动连接模式下为其分配的端口范围。便于制定防火墙配置。
PassivePortRange          45000 50000

# 强制某个IP地址工作在 PASV/EPSV/SPSV 模式. - for NAT.
# ForcePassiveIP                192.168.0.1

# 匿名用户上传/下载比率
# AnonymousRatio                1 10

# 所有用户 上传/下载 比率。该选项可以取代上面的选项
# UserRatio                 1 10

# 禁止下载所有者为‘ftp’的文件。例如:那些匿名用户上传后未被本地管理员验证的文件。
AntiWarez                   yes

# 用来监听的IP地址和端口 (默认=所有 IP 和 21 端口).
# Bind                      127.0.0.1,21

# 匿名用户最大带宽限制,单位 KB/s
AnonymousBandwidth            200

# 所有用户的最大带宽限制(包括匿名)单位 KB/s
# 没有必要同时开启 AnonymousBandwidth 和 UserBandwidth
# UserBandwidth             8

# 新建文件默认掩码. <文件掩码>:<目录掩码>
# 为了安全起见可以设置为 177:077
Umask                       133:022

# 验证登录用户的最小UID
MinUID                      100

# 仅允许认证用户进行 FXP 传输
AllowUserFXP                no

# 对匿名用户和非匿名用户允许进行匿名 FXP 传输
AllowAnonymousFXP           no

# 用户不能删除/写入隐藏文件,即便是文件的拥有者也不允许。
# 如果 TrustedGID 选项为 enabled 文件所属组用户可以访问隐藏文件
ProhibitDotFilesWrite       no

# 禁止读取隐藏文件 (如 .history, .ssh...)
ProhibitDotFilesRead        no

# 永不覆盖文件。如果上传的文件已经存在,系统会自动将其命名为file.1, file.2, file.3, ...
AutoRename                  yes

# 不允许匿名用户上传文件 (no = 允许上传)
AnonymousCantUpload         no

# 仅允许来自以下IP地址的非匿名用户连接。你可以使用这个指令来打开几个公
# 网IP来提供匿名FTP,而保留一个私有的防火墙保护的IP来进行远程管理。你
# 还可以只允许一内网地址进行认证,而在另外一个IP上提供纯匿名的FTP服务。
#TrustedIP                  10.1.1.1

# 如果你要在登陆日志的每一行添加PID标记,去掉下行的注释
#LogPID                     yes

# 使用类似于Apache格式创建一个附加的日志文件,如:
# fw.c9x.org - jedi [13/Dec/1975:19:36:39] "GET /ftp/linux.tar.bz2" 200 21809338
# 这个日志文件可以被www流量分析工具来处理
AltLog                     clf:/var/log/pureftpd.log

# 使用优化过的格式为统计报告创建一个额外的日志文件
# AltLog                     stats:/var/log/pureftpd.log

# 使用标准的W3C格式创建一个额外的日志文件。(与大部分的商业日志分析器兼容)
# AltLog                     w3c:/var/log/pureftpd.log

# 不允许使用chmod命令.用户不能修改他们上传文件的属性
#NoChmod                     yes

# 允许用户恢复和上传文件,但不能够上除他们
#KeepAllFiles                yes

# 用户主目录不存在的话,自动创建目录
#CreateHomeDir               yes

# 启用虚拟磁盘配额。第一个参数是最大文件数,第二个参数是总共的大小,单位是MB
# 如: 1000:10 限制每个用户最大文件1000个且不能超过10MB
#Quota                       1000:10

# 如果你在编译 pure-ftpd 时加入了‘standalone’选项,那么你可以更改pid文件位置
# 默认目录 /var/run/pure-ftpd.pid
#PIDFile                     /var/run/pure-ftpd.pid

# 如果你在编译 pure-ftpd 时加入了 pure-uploadscript 选项,这个指令将会使
# pure-ftpd 发送关于新上传的情况信息到 /var/run/pure-ftpd.upload.pipe,
# 这样 pure-uploadscript 就能读然后调用一个脚本去处理新的上传。
#CallUploadScript yes

# 这个选项对于匿名上传的服务器是很有用的。/var/ftp 在 /var 里时,需要保留一定
# 磁盘空间来保护日志文件。当所在磁盘分区使用超过百分之 X 时,将不在接受新的上传。
MaxDiskUsage               99

# 如果不想让用户来重命名文件,请将其设置为yes
#NoRename                  yes

# "customer proof" : 选项可以阻止普通用户因误操作而执行的错误命令
# 如:"chmod 0 public_html", 这是有效的命令,但执行完命令之后用户
# 就将他们自己的文件锁定了,这时你的麻烦就来了,你需要给用户解决这
# 些由于用户而造成的愚蠢问题。如果你确信的你用户都具有一些unix基础
# 知识的话,那么该选项就没有必要设置,否则建议启用它。
CustomerProof              yes

# 所有用户都做同样的限制。只有编译时加入了--with-peruserlimits 选项
# 才可以启用。格式为: <每一个用户最大许可的进程>:<匿名用户最大进程>
# 例如:3:20 同一个认证用户最大可以有3个同时活动的进程。而且同时最多
# 只能有20个匿名用户进程
# PerUserLimits            3:20

# 当文件上传时,服务器上之前已经有一个同名的文件时,旧的文件既不会被移动
# 也不会被删除。在新文件上传完毕之前会将上传的部分暂时放到一个临时的文件
# 中,当上传完毕之后会自动的切换到新上传的文件。例如:当服务器上有一个PHP
# 脚本正在执行,但我现在要上传一个新的PHP脚本,那么当我在上传完毕之后才将
# 旧的文件切换到新的文件。而不是像某些程序那样在开始上传的时候就将旧的文件
# 覆盖掉了,这样做的目的就是可以最大程度的减少正在运行中的程序错误。该选项
# 与虚拟配额不能同时使用。
# NoTruncate               yes

# 该选项可以接受3个可选值:
# 0 : 禁用 SSL/TLS 加密层 (默认).
# 1 : 同时接受传统的和加密的连接
# 2 : 拒绝没有经过 SSL/TLS 安全验证的连接,包括匿名连接
# 在没有确定下面三个问题之前不要盲目的取消注释:
# 1) 编译PureFTPd时是否启用了 SSL/TLS 支持 (--with-tls),
# 2) 系统中是否包含一个有效的证书
# 3) 开启后只有兼容的客户端才能登陆
# TLS                      1

# 在 standalone 模式下只监听IPV4的地址 (与禁用 IPv6 相同)
# 默认是IPV4与IPV6同时监听
# IPV4Only                 yes

# 在 standalone 模式下只监听IPV6的地址 (与禁用 IPv4 相同)
# IPV6Only                 yes

# 文件名的UTF-8支持
# FileSystemCharset big5
# ClientCharset     big5

本文来源:http://www.bbyears.com/caozuoxitong/58236.html