ProFTPD的<Limit>
配置部分允许进行强大的细粒度控制,即:允许谁使用哪些FTP命令。 然而,这种能力是以复杂性为代价的。 本文档描述了编写<Limit>
部分时要记住的一些事项。
优先权
也许使用<Limit>
最难的地方是理解它的优先级规则,它决定了<Limit>
限制何时生效。 首先,Limit指令中有三种类型的参数:“RAW”FTP命令、FTP命令组和ALL关键字。
1)http://www.proftpd.org/docs/howto/FTP.html 中列出了“原始”FTP命令,包括RFC强制的X变体FTP命令。
2)FTP命令组:
使用“RAW”FTP命令的<Limit>
具有最高优先级,其次是使用命令组的<Limit>
,最后是使用ALL关键字的<Limit>
。 如果<Limit>
同时具有“原始”命令和命令组,那么使用“RAW”命令的Limit部分限制生效。
SITE命令
若要将<Limit>
应用于SITE命令,则将“SITE”和命令通过下划线(“_”)组合,如下所示:
<Limit SITE_command>
比如:对SITE CHMOD设置限制,可以:
<Limit SITE_CHMOD>
DenyAll
</Limit>
继承
<Limit>
一般在proftpd.conf的<Directory>
部分中使用,这样,<Limit>
将被出现在<Directory>
路径中的所有子目录继承,除非被“更近”的<Limit>
部分明确覆盖。因此,可以配置一个<Limit>
部分,拒绝所有目录的所有FTP命令,然后在适当的子目录(例如pub /或incoming /目录)中明确允许READ或WRITE命令组。
使用 AllowUser和DenyUser
在使用AllowUser指定某些用户支持某些FTP命令时,最好为每个用户使用一个AllowUser,尽量不要用一个AllowUser列出所有的用户,比如:
AllowUser bob,dave,wendy
最好使用如下方式替换:
AllowUser bob
AllowUser dave
AllowUser wendy
以上对DenyUser同样有效。
注意事项:
<Limit>
部分中使用的名称,例如AllowUser,DenyUser,AllowGroup和DenyGroup,不会解析为ID,仅适用于名称。
举例:
1、示例一:目录仅上传权限:
<Directory /path/to/uploads>
<Limit ALL>
DenyAll
</Limit>
<Limit CDUP CWD PWD XCWD XCUP>
AllowAll
</Limit>
<Limit STOR STOU>
AllowAll
</Limit>
</Directory>
其中,<Limit ALL>
部分阻止/path/to/uploads目录中使用所有的FTP命令,然后开始定义可以使用那些命令:允许CDUP和CWD命令(及其X变体),以便用户可以进入目录,然后允许STOR和STOU,以便用户可以将文件上传到目录中。
2、示例二:“盲目”目录,用户可以从目录下载和上传文件,但是无法看到目录内容
<Directory /path/to/dir>
<Limit LIST NLST MLSD MLST STAT>
DenyAll
</Limit>
</Directory>
默认情况下,目录允许所有命令。 通过阻止列出目录内容的FTP命令(即LIST,MLSD,MLST和NLST),可以阻止了客户端看到目录中的任何内容。
3、LOGIN命令
<Limit LOGIN>
AllowUser barb
AllowUser dave
AllowGroup ftpuser
DenyAll
</Limit>
允许选定的系统用户能够连接到他们的proftpd服务器:允许用户barb和dave以及ftpuser组中的任何用户登录。 所有其他用户将被拒绝。
如果某个网站只允许匿名访问,则使用LOGIN命令组进行配置,如上所述:
<Limit LOGIN>
DenyAll
</Limit>
<Anonymous ~ftp>
<Limit LOGIN>
AllowAll
</Limit>
...
</Anonymous>