一、安装部分
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