简介:

PureFTPd是免费、安全、符合国际标准的FTP 服务器程序。它并没有那些无用而又花哨的功能,而是将重点放到了提高效率和易用性上,独特的实用功能为个人用户和托管服务提供商提供了一个新的选择。


下载:

从官方网站下载最新的稳定版本http://www.pureftpd.org/ 其最新版本是1.0.29,下载地址

为:http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.29.tar.bz2。


系统环境

CentOS 5.4

PureFTPd 1.0.29



编译安装

1

2

3

# 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       启用大多数选项,编译完功能版本的服务器端。


为了方便起见,我在这里使用了几个基本的编译命令来配置编译一个全功能版本的程序


1

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

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


1

2

3

4

5

6

7

# 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的配置文件等等。但是我还是习惯在相应的目录建立符合连接。


1

2

3

4

# 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命令来查看:


1

# 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 注:要修改pure-ftpd.conf中的PureDB文件位置

屏幕上会显示下面的信息

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’命令来完成。当然你也可以手动的来编辑相应的文件。


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

<account>:<password>:<uid>:<gid>:<gecos>:<home directory>:<upload bandwidth>

:<download bandwidth>:<upload ratio>:<download ratio>:<max numberof connections>

:<files quota>:<size quota>:<authorized local IPs>:<refusedlocal IPs>

:<authorized client IPs>:<refused client IPs>:<timerestrictions>

密码字段是加密后的密码,加密方式与系统的用户密码加密方式相同,用户可以执行setup命令配置。

除了account, password, uid, gid, home directory字段外,其他的字段可以为空


●使用命令添加一个虚拟用户

pure-pw命令的格式


pure-pw useradd <login> [-f <passwd file>] -u <uid> [-g <gid>]

-D/-d <home directory> [-c <gecos>]

[-t <download bandwidth>] [-T <upload bandwidth>]

[-n <max number of files>] [-N <max Mbytes>]

[-q <upload ratio>] [-Q <download ratio>]

[-r <allow client host>[/<mask>][,…]

[-R <deny client host>[/<mask>][,…]

[-i <allow local host>[/<mask>][,…]

[-I <deny local host>[/<mask>][,…]

[-y <max number of concurrent sessions>]

[-z <hhmm>-<hhmm>] [-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 <login> [-f <passwd file>] [-m]

如:pure-pw userdel joe

用户home目录中的文件不会被删除,需要手动删除


●更改密码

更改用户密码的命令

# pure-pw passwd <login> [-f <passwd file>] [-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


# 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