一.安装配置pure-ftpd
 
[root@bsd01 ~]#cd /usr/ports/ftp/pure-ftpd
[root@bsd01 pure-ftpd]#make install clean
 
然后会出现“make config”的界面,选择需要的组件即可:
Options for pure-ftpd 1.0.21_2
────────────────────────────────────
[    ] LDAP           Support for users in LDAP directories
[X] MYSQL            Support for users in MySQL database
[X] PAM              Support for PAM authentication
[       ] PGSQL           Support for users in PostgreSQL database
[X] PRIVSEP          Enable privilege separation
[X] PERUSERLIMITS    Per-user concurrency limits
[X] THROTTLING      Bandwidth throttling
[X] BANNER          Show pure-ftpd welcome upon session start
[X] UPLOADSCRIPT    Support uploadscript daemon
[X] UTF8            Support for charset conversion (expreimental)
[X] SENDFILE        Support for the sendfile syscall
 
────────────────────────────────────
安装完毕后,可以清除一下配置选项:
[root@bsd01 pure-ftpd]#make rmconfig
如果你想让pureftpd开机自动启动,则编辑/etc/rc.conf文件,加入“ pureftpd_enable="YES" ”。
先复制pure-ftpd.conf配置文件,并授予可以修改的权限:
[root@bsd01 pure-ftpd]#cd /usr/local/etc
[root@bsd01 etc]#cp pure-ftpd.conf.sample pure-ftpd.conf
[root@bsd01 etc]#chmod u+w pure-ftpd.conf
现在编辑pure-ftpd.conf文件:
[root@bsd01 etc]#vi pure-ftpd.conf
NoAnonymous      no 改为
NoAnonymous      yes
# PureDB                /etc/pureftpd.pdb      改为
PureDB                /usr/local/etc/pureftpd.pdb
#CreateHomeDir        yes改为
CreateHomeDir        yes
然后重启一下pure-ftpd服务:
[root@bsd01 etc]#/usr/local/etc/rc.d/pure-ftpd restart
或者/usr/local/sbin/pure-config.dl /usr/local/etc/pure-ftpd.conf
二.配置本地用户登录
root@bsd01 ~]#pw group add ftpuser -g 2001
[root@bsd01 ~]#pw user add ftp -u 2001 -g 2001 -s /dev/null -d /home/ftp -m
[root@bsd01 ~]#id ftp
[root@bsd01 ~]#finger ftp
三.使用pureftpd.pdb文本数据库来管理ftp虚拟用户
 
pureftpd.pdb虚拟用户只要使用pure-pw命令来管理,pure-pw有很多参数,可以使用“pure-pw --help”来查看。
大致为:pure-pw useradd | usermod | userdel | passwd | show | mkdb | list。
作用为:添加用户 | 修改用户 | 删除用户 | 修改密码 | 查看登陆状态 | 写入数据库 | 列出所有用
现在我们做一个实例:在文本数据库中建立一个ftp用户:用户名:jetken,密码:123,home目录:/data/web
1.     先建立目录:
[root@bsd01 ~]#cd /data
[root@bsd01 data1]#mkdir web
[root@bsd01 data1]#touch ./web/test.php
[root@bsd01 data1]#chown -R 2001:2001 web
[root@bsd01 data1]#ls -l web
2.     然后添加用户:
[root@bsd01 data1]#pure-pw useradd jetken -u 2001 -g 2001 -d /data/web
Password:123
Enter it again:123
[root@bsd01 data1]#pure-pw mkdb
[root@bsd01 data1]#pure-pw list
web                /data/web/./
四.配置使用mysql认证方式登录
1.     修改配置文件
cd /usr/local/etc 
cp pureftpd-mysql.conf.sample pureftpd-mysql.conf 
cp pure-ftpd.conf.sample pure-ftpd.conf 
2.     现在开始修改 pure-ftpd.conf 配置文件了﹐以便让这台SERVER可以更好的、稳定的运行起来﹐请按下面步骤
执行﹕ ee /usr/local/etc/pure-ftpd.conf 
重点介绍需要注意的配置选项:
# Cage in every user in his home directory
ChrootEveryone               yes # 限制所有用户在其主目录中
MySQLConfigFile                /usr/local/etc/pureftpd-mysql.conf # 打开mysql认证,文件路径一定不能错
UnixAuthentication             yes # 同时开启了系统帐号的认证方式
BrokenClientsCompatibility yes            #客户端可以使用IE登录ftp
DisplayDotFiles no
NoAnonymous yes
CreateHomeDir yes
3.     修改pure-ftpd.conf配置文件
ee /usr/local/etc/pureftpd-mysql.conf 
MYSQLServer      127.0.0.1
MYSQLPort        3306
MYSQLSocket      /tmp/mysql.sock
MYSQLUser        pureftpd ##允许访问Mysql中数据库的用户名
MYSQLPassword    12345 ##允许访问Mysql中数据库的密码
MYSQLDatabase    pureftpd ##允许访问Mysql中数据库的名称
MYSQLCrypt     cleartext ##密码认证方式
MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L"
MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L"
上面的选项很有用的,你可以对每一个用户单独配置上传下载的速度 
4.     建立pureftpd数据库,和users表
CREATE TABLE users ( 
User varchar(16) NOT NULL default '', 
status enum('0','1') NOT NULL default '0', 
Password varchar(64) NOT NULL default '', 
Uid varchar(11) NOT NULL default '-1', 
Gid varchar(11) NOT NULL default '-1', 
Dir varchar(128) NOT NULL default '', 
ULBandwidth smallint(5) NOT NULL default '0', 
DLBandwidth smallint(5) NOT NULL default '0', 
comment tinytext NOT NULL, 
ipaccess varchar(15) NOT NULL default '*', 
QuotaSize smallint(5) NOT NULL default '0', 
QuotaFiles int(11) NOT NULL default 0, 
PRIMARY KEY (User), 
UNIQUE KEY User (User) 
) TYPE=MyISAM; 
注意这里的表格的名称一定要和pureftpd-mysql.conf中的sql语句的一致,否则会出现找不到表格的问题
5.         建立pureftpd用户
mysql>grant all privileges on pureftpd.* to pureftpd@localhost identified by '12345';
给用户pureftpd 密码12345 操作表pureftpd.*的所有权利
mysql>FLUSH PRIVILEGES; 
重载受权表
6.         插入用户数据
mysql> insert into users values('******************);
7.         建立用户的主目录
Mkdir     /data/test1
Chown 2003:2001 /data/test1
 
 
 
 
Pure-ftpd.conf详细配置说明
############################################################
#                                                           #
#          Configuration file for pure-ftpd wrappers        #
#                                                           #
############################################################
 
# 如果你想要使用配置文件代替命令行选项来运行 Pure-FTPd ,请运行下面的命令:
#
# /usr/local/pureftpd/sbin/pure-config.pl /usr/local/pureftpd/etc/pure-ftpd.conf
#
# RPM 缺省使用另外一个配置文件:
# /etc/sysconfig/pure-ftpd
#
# 请不要忘了浏览一下 http://www.pureftpd.org/documentation.html 的
# 文档,查看全部的选项列表。
 
# 限制所有用户在其主目录中
 
 ChrootEveryone               yes
 
 
# 如果前一个指令被设置为了 "no",下面组的成员(GID)就不受主目录的限制了。而其他的用户还是
# 会被限制在自己的主目录里。如果你不想把任何用户限制在自己的主目录里,只要注释掉 ChrootEveryone
# 和 TrustedGID 就可以了。
 
# TrustedGID                     100
 
# 兼容ie等比较非正规化的ftp客户端
 
 BrokenClientsCompatibility no
 
# 服务器总共允许同时连接的最大用户数
 
 MaxClientsNumber             50
 
# 做为守护(doemon)进程运行(Fork in background)
 
 Daemonize                    yes
 
# 同一IP允许同时连接的用户数(Maximum number of sim clients with the same IP address)
 
 MaxClientsPerIP              8
 
# 如果你要记录所有的客户命令,设置这个指令为 "yes"。
# This directive can be duplicated to also log server responses.
 
 VerboseLog                   no
 
# 即使客户端没有发送 '-a' 选项也列出隐藏文件( dot-files )。
 
 DisplayDotFiles              yes
 
# 不允许认证用户 - 仅作为一个公共的匿名FTP。
 
 AnonymousOnly                no
 
# 不允许匿名连接,仅允许认证用户使用。
 
 NoAnonymous                  no
 
# Syslog facility (auth, authpriv, daemon, ftp, security, user, local*)
# 缺省的功能( facility )是 "ftp"。 "none" 将禁止日志。
 
 SyslogFacility               ftp
 
# 定制用户登陆后的显示信息(Display fortune cookies)
 
# FortunesFile               /usr/share/fortune/zippy
 
# 在日志文件中不解析主机名。日志没那么详细的话,就使用更少的带宽。在一个访问量很大 
# 的站点中,设置这个指令为 "yes" ,如果你没有一个能工作的DNS的话。
 
 DontResolve                  yes
 
# 客户端允许的最大的空闲时间(分钟,缺省15分钟)
 
 MaxIdleTime                  15
 
# LDAP 配置文件 (参考 README.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
 
# 如果你要启用 简单的 Unix系统 认证方式(/etc/passwd), 去掉下面行的注释。
 
# UnixAuthentication             yes
 
# 请注意,LDAPConfigFile, MySQLConfigFile, PAMAuthentication 和
# UnixAuthentication 这些指令只能被使用一次,不过,他们能被混合在一起用。例如:如果你使用了
# MySQLConfigFile 和 UnixAuthentication,那么 SQL 服务器将被访问。如果因为用户名未找
# 到而使 SQL 认证失败的话,就会在/etc/passwd 和 /etc/shadow 中尝试另外一种认证,如果因
# 为密码错误而使 SQL 认证失败的话,认证就会在此结束了。认证方式由它们被给出来的顺序而被链
# 接了起来。
 
# 'ls' 命令的递归限制。第一个参数给出文件显示的最大数目。第二个参数给出最大的子目录深度。
 
 LimitRecursion               2000 8
 
# 允许匿名用户创建新目录?
 
 AnonymousCanCreateDirs       no
 
# 如果系统被 loaded 超过下面的值,匿名用户会被禁止下载。
 
 MaxLoad                      4
 
# 被动连接响应的端口范围。- for firewalling.
 
# PassivePortRange           30000 50000
 
# 强制一个IP地址使用被动响应( PASV/EPSV/SPSV replies)。 - for NAT.
# Symbolic host names are also accepted for gateways with dynamic IP
# addresses.
 
# ForcePassiveIP                 192.168.0.1
 
# 匿名用户的上传/下载的比率。
 
# AnonymousRatio                 1 10
 
# 所有用户的上传/下载的比率。
# This directive superscedes the previous one.
 
# UserRatio                  1 10
 
# 不接受所有者为 "ftp" 的文件的下载。例如:那些匿名用户上传后未被本地管理员验证的文件。
 
 AntiWarez                    yes
 
# 服务监听的IP 地址和端口。(缺省是所有IP地址和21端口)
 
# Bind                       127.0.0.1,21
 
# 匿名用户的最大带宽(KB/s)。
 
# AnonymousBandwidth             8
 
# 所有用户的最大带宽(KB/s),包括匿名用户。
# Use AnonymousBandwidth *or* UserBandwidth, both makes no sense.
 
# UserBandwidth              8
 
# 新建目录及文件的属性掩码值。<文件掩码>;:<目录掩码>; .
# 177:077 if you feel paranoid.
 
 Umask                        133:022
 
# 认证用户允许登陆的最小组ID(UID) 。
 
 MinUID                       100
 
# 仅允许认证用户进行 FXP 传输。
 
 AllowUserFXP                 yes
 
# 对匿名用户和非匿名用户允许进行匿名 FXP 传输。
 
 AllowAnonymousFXP            no
 
# 用户不能删除和写点文件(文件名以 '.' 开头的文件),即使用户是文件的所有者也不行。
# 如果 TrustedGID 指令是 enabled ,文件所属组用户能够访问点文件(dot-files)。
 
 ProhibitDotFilesWrite        no
 
# 禁止读点文件(文件名以 '.' 开头的文件) (.history, .ssh...)
 
 ProhibitDotFilesRead         no
 
# 永不覆盖文件。当上传的文件,其文件名已经存在时,自动重命名,如: file.1, file.2, file.3, ...
 
 AutoRename                   no
 
# 不接受匿名用户上传新文件( 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] "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' : 工作区(workaround)反对普通的客户错误,类似于:'chmod 0 public_html' 的错误。
# 那是一个有效的命令,不过,将导致无知的客户所定他们自己的文件,将使你的技术支持忙于愚蠢的的问题中。
# 如果你确信你所有的用户都有基本的Unix知识的话,这个特性将没什么用了。不过,如果你是一个主机提供商
# 的话,启用它。
 
CustomerProof yes
 
# 每一个用户的并发限制。只有在添加了 --with-peruserlimits 编译选项进行编译后,这个指令才起
# 作用。(大部分的二进制的发布版本就是例子)
# 格式是 : <每一个用户最大允许的进程>;:<最大的匿名用户进程>;
# 例如: 3:20 意思是同一个认证用户最大可以有3个同时活动的进程。而且同时最多只能有20个匿名用户进程。
 
# PerUserLimits 3:20