一、安装部分

cd /usr/local/src/

wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.36.tar.bz2


tar -jxvf pure-ftpd-1.0.36.tar.bz2

cd pure-ftpd-1.0.36

./configure --prefix=/usr/local/pure-ftpd-1.0.36 --with-everything

make && make install


mkdir /usr/local/pure-ftpd-1.0.36/etc

cp configuration-file/pure-config.pl /usr/local/pure-ftpd-1.0.36/sbin/

cp configuration-file/pure-ftpd.conf /usr/local/pure-ftpd-1.0.36/etc/

chmod 755 /usr/local/pure-ftpd-1.0.36/sbin/pure-config.pl


ln -s /usr/local/pure-ftpd-1.0.36/bin/* /usr/local/bin/

ln -s /usr/local/pure-ftpd-1.0.36/sbin/* /usr/local/sbin/

ln -s /usr/local/pure-ftpd-1.0.36/share/man/man8/ /usr/local/share/man/man8


二、配置部分(注意修改iptables策略)

用以下内容覆盖配置文件/usr/local/pure-ftpd-1.0.36/etc/pure-ftpd.conf(建议先备份):


ChrootEveryone yes

BrokenClientsCompatibility yes

MaxClientsNumber 50

Daemonize yes

MaxClientsPerIP 20

VerboseLog yes

DisplayDotFiles yes

AnonymousOnly no

NoAnonymous no

SyslogFacility none

DontResolve yes

MaxIdleTime 15

PureDB /usr/local/pure-ftpd-1.0.36/etc/pureftpd.pdb

LimitRecursion 10000 8

AnonymousCanCreateDirs yes

MaxLoad 4

PassivePortRange 30000 31000

AntiWarez yes

Bind 20021

AnonymousBandwidth 200

UserBandwidth 1000

Umask 133:022

MinUID 100

AllowUserFXP no

AllowAnonymousFXP no

ProhibitDotFilesWrite no

ProhibitDotFilesRead no

AutoRename no

AnonymousCantUpload no

AltLog clf:/var/log/pureftpd.log

CreateHomeDir yes

MaxDiskUsage 99

CustomerProof yes


注:1、匿名FTP默认无删除权限

2、

在以上基础上添加\修改以下4行,可以做到以下功能:

NoChmod yes #不能修改权限

KeepAllFiles yes #不能删除文件(可以删除空目录)

NoRename yes #不能重命名

AutoRename yes #(修改no为yes)上传文件已经存在时,用户选择覆盖会产生file.1 file.2形式的文件,防止恶意覆盖。



三、启动和关闭

启动:pure-config.pl /usr/local/pure-ftpd-1.0.36/etc/pure-ftpd.conf

重启:killall pure-ftpd && pure-config.pl /usr/local/pure-ftpd-1.0.36/etc/pure-ftpd.conf

脚本: service pureftpd {start|stop|restart}

注:脚本见本博客:http://sndapk.blog.51cto.com/5385144/1338431


启动后测试匿名用户


四、虚拟用户配置

1、创建所有虚拟用户映射的系统用户:

useradd -s /sbin/nologin -M ftpuser


2、pureftp的常用操作

添加和修改虚拟用户参数

添加虚拟用户(CreateHomeDir yes时,家目录自动生成)

pure-pw useradd aaa -u503 -g503 -d /tmp/aaa

修改虚拟用户家目录

pure-pw usermod aaa -d /tmp/bbb

修改虚拟用户密码

pure-pw passwd aaa

删除虚拟用户

pure-pw userdel bbb

查看虚拟用户配置信息

pure-pw show aaa


3、让配置生效:

以上命令执行完以后,只影响$HOME/etc/pureftpd.passwd,pureftpd并不直接读取这个文件,本次配置中,服务读取的是$HOME/etc/pureftpd.pdb这个文件,要想修改生效有以下两种方法(无需重启服务)

a、执行命令时结尾加上选项 "-m"同时写入.pdb文件
b、执行pure-pw mkdb重新根据.passwd文件生成.pdb文件


注:虚拟用户的带宽限制要单独指定,同时需要设定匿名用户和虚拟用户的总带宽



4、测试虚拟用户



=============================================================


附一、命令参数和语法

pure-pw useradd<login>[-f<passwdfile>]-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<allowlocalhost>[/<mask>][,...]
[-I<denylocalhost>[/<mask>][,...]
[-y<max number of concurrent sessions>]
[-z<hhmm>-<hhmm>][-m]

部分使用格式:

-z 0900-1800

-r 10.0.0.11/32

-r 10.0.0.0/24


重置用户属性

要禁用文件数配额,执行 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 ''



附二、配置文件讲解

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

ChrootEveryone yes

# 兼容ie等比较非正规化的ftp客户端。

BrokenClientsCompatibility yes

# 最大用户连接数。

MaxClientsNumber 50

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

Daemonize yes

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

MaxClientsPerIP 20

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

VerboseLog yes

# 显示隐藏文件。

DisplayDotFiles yes

# 不允许验证用户。只作为匿名ftp服务器。

AnonymousOnly 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。

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 30000 31000

# 强制某个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

# 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