ProFTPD要支持上传续传,那么必须设置:
AllowOverwrite on
AllowStoreRestart on
其中AllowOverwrite有潜在的安全性风险,建议全局设置off,仅在上传目录设置on。
上面这些是搜索一下都有的,不过下面这个是基本没有提及的,否则本文就没有存在的必要了。就是上传目录需要<Limit SIZE>
权限,否则客户端因无法获得服务器上的文件大小而导致永远发送REST 0
,这样的结果就是每次都从文件的第0个字节开始续传,无法达到断点续传的目的。另禁止<Limit LIST>
权限不会对上传断点续传造成任何影响,这样有利于规避风险。
而对于下载断点续传来说,文件尺寸是客户端从本地获取的,因此只需要AllowRetrieveRestart on
允许REST应用于下载即可,而不需要<Limit SIZE>
权限。
———————————————————————————–
proftpd默认设置下载可以断线续传,如何设置上传可以续传呢
更改proftpd.conf的相关配置,加上类似于下面的字符串。
<Directory /*>
AllowOverwrite on
AllowRetrieveRestart on
AllowStoreRestart on
</Directory>
或者
在ftpaccess中设置:
host-limit class count time message
其中class是定义的某类用户比如real,guest,count是允许此类用户的同时连接数,time是连接时间,可以设置为Any,message是超过连接数以后的提示信息文件。
附:ftpaccess指令大全
名称
ftpaccess – ftpd 的配置档
描述
这个 ftpaccess 档案是用来配置下述功能的运作
存取功能(Access Capabilities)
autogroup <群组名称> <类别> [<类别> …]
如果一个匿名的(ANONYMOUS) 使用者是任何 <类别> 的成员,
那麽 ftp 伺服器将会实行一次 setegid() 到该 <群组名称>
。这允许特殊类别的匿名使用者存取 group-and-owner-read-
only 的档案以及目录。<群组名称> 是 /etc/group 里的一个
有效群组(或是你的 getgrent() 呼叫所查阅的地方)。
class <类别> <类型列表> <全球位址> [<全球位址> …]
定义使用者的 <类别> ,使用 <全球位址> 格式的来源位址。
可以定义 <类别> 多个成员。可以有多个 “class” 指令列出
该类别额外的成员。如果多个 “calss” 指令可以应用到该次
的连线期间,会使用在 access 档案中第一个列出的。尝试为
一台主机定义一个有效的类别失败的话将会引起存取被拒绝。
<类型列表> 是一个以任何 “anonymous”, “guest” 及 “real”
关键字所组成使用逗点隔开的列表。如果包含 “real” 关键字
,该类别可以符合使用 FTP 存取真实的帐号的使用者,而如
果包含 “anonymous” 关键字该类别可以符合使用匿名 FTP 的
使用者。而 “guest” 关键字符合访客存取帐号(参阅 “guest
group” 以取得更多资讯)
<全球位址> 可以是一个全球的领域名称或是一个全球的数字
位址。
deny <全球位址> <讯息档案>
永远拒绝符合 <全球位址> 主机的存取。显示 <讯息档案> 。
<全球位址> 可以是 “!nameserved” 用来拒绝没有名称伺服器
服务中的节点的存取。
guestgroup <群组名称> [<群组名称> …]
如果一个真实的(REAL)使用者是任何 <群组名称> 的成员,该
次连线期间的设立完全如同匿名的 FTP 一般。换句话说,会
执行一次 chroot() ,而且该使用者不再被允许发出 USER 及
PASS 指令。<群组名称> 是 /etc/group 里的一个有效群组(
或是你的 getgrent() 呼叫所查阅的地方)。
该使用者的 home 目录必须适当地加以设定,跟匿名 FTP 所
要做的完全一样。在 passwd 项目里的 home 目录栏位被分成
两个目录。第一个栏位将是 chroot() 呼叫的根目录参数。第
二个部份是相对於该根目录的使用者 home 目录。这两半是以
“/./” 分隔开的。
范例:
在 /etc/passwd 里,该真实的项目:
guest1::100:92:Guest
Account:/ftp/./incoming:/etc/ftponly
当 guest1 成功地签入的时候,此 ftp 伺服器将会执行一次
chroot(“/ftp”) 然後接著 chdir(“/incoming”) 。该 guest
使用者将只能够存取 /ftp 下的目录结构(此目录对 guest1
而言看起来跟用起来就像是 / 目录),就如同一个匿名 FTP
使用者所见到的。
limit <类别> <时间> <讯息档案>
在某 <时间> 将某 <类别> 限制为 个使用者,若使用者
的存取被拒绝则显示 <讯息档案> 内容。限制的检查只在签入
时期实行。如果多个 “limit” 指令可以应用到该次连线期间
的话,会使用第一个适合的。尝试定义一个有效的限制失败,
或是值为 -1 的限制,等於不设限。<时间> 使用 UUCP L.sys
档案相同的格式。
loginfails <数字>
在 <数字> 签入失败後,记录一个″重复签入失败 (repeated
login failures)讯息″并且终止该 FTP 连线。预设值是 5。
private
使用者签入之後,SITE GROUP 及 SITE GPASS 指令可以用来
指定一增强存取的群组以及与之有关的密码。如果该群组名称
以及密码是有效的,该使用者变成(经由 setegid())一个在
群组存取档案 /etc/ftpgroups 中所指定群组的成员。
该群组存取档案的格式是:
存取群组名称:经编码的密码:真实群组名称
其中的存取群组是一个随意的(文数字+标点)字串。经编码
的密码是经由 crypt(3) 编码过的密码,与 /etc/passwd 里
的完全一样。真实群组名称是 /etc/group 里所列出有效群组
其中的一个名称。
注意:要使这个选项能运作於匿名的 FTP 使用者,该 FTP 伺
服器必须保持使 /etc/group 永久开启而且将群组存取档案载
入记忆体。这意指 (1) 该 ftp 伺服器现在使一个额外的档案
描述子(file descriptor) 开启,以及 (2) 经由 SITE GROUP
使用者必须的密码以及存取权利的承认在一次 FTP 连线期间
以内将会是静态的。如果你有紧急的需求要*现在*改变存取
群组以及/或是密码,那麽你只要砍掉(kill)所有正在执行中
的 FTP 伺服器。
资讯功能(Informational Capabilities)
banner <路径>
作用与 message 指令类似,除了此 banner 是在使用者键入
使用者名称/密码之前显示以外。该 <路径> 系相对於真实的
系统根目录,不是匿名 FTP 所使用的根目录。
警告:这个指令的使用可以完全地防止不相容的 FTP 客户端
程式使用该 FTP 伺服器。并非所有的客户端都能够处理多行
回应(multi-line responses)(这正是 banner 显示的方式)
email <名称>
定义 ftp 档案处(archive)维护者的电子邮递位址。这个字串
将会在每一次使用 %E 代换变数(magic cookie)的时候印出。
message <路径> {<时机> {<类别> …}}
定义一个配合 <路径> 的档案名称在使用者签入时或是在使用
切换工作目录指令的时候 ftpd 将会显示该档案的内容。该项
<时机> 参数可以是 “LOGIN” 或 “CWD=<目录>”。如果 <时机>
是 “CWD=<目录>” 的话,<目录> 指定将会引发该通知的新预设
目录。
该选择性的 <类别> 指定允许该讯息只对特殊类别的成员显示
。可以指定超过一个类别。
在说明档中可以有″代换变数(magic cookies)″ 这会使 ftp
伺服器以指定的文字字串取代该变数:
%T 本地时间 (form Thu Nov 15 17:12:42
1990)
%F CWD 所在分割区的剩馀空间 (kbytes)
[并非所有系统都有支援]
%C 目前的工作目录
%E 定义在 ftpaccess 中维护者的电子邮递位址
%R 远端主机名称
%L 本地主机名称
%U 签入时所给的使用者名称
%M 这个类别所允许的最大使用者数目
%N 这个类别目前的使用者数目
此项 message 将只显示一次以避免惹使用者讨厌。要记得当
MESSAGEs 被一匿名的 FTP 使用者引发时,该 <路径> 必须是
相对於匿名 FTP 目录树的根目录。
readme <路径> {<时机> {<类别>}}
定义一个配合 <路径> 的档案名称在使用者签入时或是在使用
切换工作目录指令的时候 ftpd 将会告知使用者该档案存在及
修改的日期。 <时机> 参数可以是 “LOGIN” 或 “CWD=<目录>”
。若 <时机> 是 “CWD=<目录>” 的话,<目录> 指定将会引发
该通知的新预设目录。此项讯息将只显示一次以避免打扰使用
者。要记得当 README 讯息被一匿名的 FTP 使用者引发时,
该 <路径> 必须是相对於匿名 FTP 目录树的根目录。
该选择性的 <类别> 指定允许该讯息只对特殊类别的成员显示
。可以指定超过一个类别。
记录功能(Logging Capabilities)
log commands <类型列表>
以使用者启动个别的记录指令。 <类型列表> 是一个以任何的
“anonymous”, “guest” 及 “real” 关键字所组成使用逗点隔
开的列表。如果包含 “real” 关键字,将会为使用 FTP 存取
真实帐号的使用者做记录,而如果包含 “anonymous” 关键字
则将会为使用匿名 FTP 的使用者做记录。 “guest” 关键字
符合访客存取帐号(参阅 “guestgroup” 以取得更多资讯)
log transfers <类型列表> <目录>
启动对真实的或匿名的 FTP 使用者的档案传输记录。对传输
到伺服器(进来)的记录可以跟从伺服器传输(出去)分开来
启动。 <类型列表> 是一个以任何的 “anonymous”, “guest”
及 “real” 关键字所组成使用逗点隔开的列表。如果其中包含
有 “real” 关键字,将会为使用 FTP 存取真实帐号的使用者
做记录,而如果包含 “anonymous” 关键字则将会为使用匿名
FTP 的使用者做记录。而 “guest” 关键字符合访客存取帐号
(参阅 “guestgroup” 以取得更多资讯)。 <目录> 是一个以
任何的 “inbound” 以及 “outbound” 两个关键字所组成以逗
点隔开的列表,而且将会分别引发对送往该伺服器以及从该伺
服器送出的传输记录。
其它功能(Miscellaneous Capabilities)
alias <字串> <目录>
为一个目录定义一个别名,<字串>。可以用来加入逻辑目录的
其它概念。
例如:
alias rfc: /pub/doc/rfc
允许使用者从任何目录以指令 “cd rfc:” 存取 /pub/doc/rfc
。别名只应用於 cd 指令上。
cdpath <目录>
定义 cdpath 里的一个项目。这定义一个在改变目录时使用的
搜寻路径。
例如:
cdpath /pub/packages
cdpath /.aliases
允许使用者直接 cd 到任何 /pub/packages 或 /.alias 目录
以下的目录。该搜寻路径系以该行出现在 ftpaccess 档案里
的顺序定义。
如果使用者所下的指令是:
cd foo
则会以下列的顺序搜寻该目录:
./foo
一个称为 “foo” 的别名
/pub/packages/foo
/.aliases/foo
该 cd path 只能够配合 cd 指令使用。如果你有数量很大的
别名那麽你可能想要设立一个目录别名链结到所有你希望能让
使用者使用的区域。
compress [ …]
tar [ …]
为任何符合任何 的类别启动压缩(compress)或
包裹(tar)功能。实际的转换(conversions)定义在外部的档案
FTPLIB/ftpconversions 之中。
shutdown <路径>
如果 <路径> 所指的档案存在,伺服器将会规律地检查该档案
以便得知该伺服器是否将要被停机。如果计画一次停机,则会
通告使用者,新的连线在停机之前的一段指定的时间之後会被
拒绝且目前的连线在停机之前的一段指定的时间之後会被停止
。<路径>指到一个结构如下的档案:
<年> <月> <日> <时> <分> <拒绝_期间>
<抛弃_期间>
<本文>
<年> 任何 > 1970 的年份
<月> 0-11 <—- 注意!
<时> 0-23
<分> 0-59
<拒绝_期间> 以及 <抛弃_期间> 是在停机之前新的连线将会
被拒绝以及存在的连线将会被抛弃的一段格式为 HHMM 的期间
。
<本文> 跟从任何讯息(参阅 “message”)的一般规则,配合
下列额外可用的代换变数:
%s 系统将要停机的时间
%r 新的连线将会被拒绝的时间
%d 目前的连线将会被抛弃的时间
所有时间的格式都是: ddd MMM DD hh:mm:ss YYYY 。在该配
置档中只能有一个 “shutdown” 指令。
外部程式 ftpshut(8) 可以用来自动化产生这个档案的程序。
许可功能(Permission Capabilities)
chmod <类型列表>
delete <类型列表>
overwrite <类型列表>
umask <类型列表>
允许或不允许执行指定功能的能力。依照预设值,允许所有的
使用者执行。
<类型列表> 是一个以任何 “anonymous”, “guest” 及 “real”
关键字所组成使用逗点隔开的列表。
passwd-check ()
定义该伺服器对匿名 ftp 密码检查的层级与执行。
none 不执行密码检查。
trivial 密码中必须包含一个 ‘@’ 字元。
rfc822 密码必须是一个 rfc822 相容的位址。
warn 警告该使用者,但是允许他们签入。
enforce 警告该使用者,并且接著将之踢出。
path-filter <类型列表> <讯息> <允许的字元集>
{<不允许的正规表示式> …}
对於属於 <类型列表> 的使用者,path-filter 定义控制何种
档案名称允许或不允许的正规表示式 (regular expressions)
。可以有多个不允许的正规表示式。如果一个档案名称因为不
符合正规表示式的标准而无效的话,将会显示 <讯息> 给该使
用者。例如:
path-filter anonymous /etc/pathmsg ^[-A-Za-
z0-9._]*$ ^. ^-
指定所有匿名使用者所上传的档案名称只能以 A-Z, a-z, 0-9
以及 “._-” 组成而且不能以一个 “.” 或是一个 “-” 开始。
如果该档案名称是不合法的,则将会显示 /etc/pathmsg 给该
使用者。
upload <拥有者> <群组>
[“dirs”|”nodirs”]
配合 定义一个认可或拒绝上传的目录。
如果其认可上传,所有档案将会由 <拥有者> 以及 <群组> 所
拥有而且将会具有根据 设置的权限(permission)。
目录系以最佳-符合(best-match)为基础。
例如:
upload * no
upload /incoming yes ftp daemon 0666
upload /incoming/gifs yes jlc guest 0600
nodirs
这将仅允许上传到 /incoming 以及 /incoming/gifs。上传到
/incoming 的档案将由 ftp/daemon 所拥有并且具有 0666 的
权限。上传到 /incoming/gifs 的档案将由 jlc/guest 拥有
并且具有 0600 的权限。
选择性的 “dir” 以及 “nodir” 关键字可以指定允许或不允许
使用 mkdir 指令建立新的子目录。
该 upload 关键字只应用於匿名的使用者。