FTPserver 配置

我的空间

搜索+互联网+EC+系统架构

2009-07-18 16:29

FtpServer配置详解

可以去CSDN上下载完整PDF版本:http://download.csdn.net/source/1500341


1与Spring整合 - 1 -
2 server元素 - 1 -
3 listener元素 - 2 -
4 User Manager - 4 -
4.1 个性化User Manager - 5 -
4.2 数据库用户管理方式 - 5 -
4.2.1配置参数 - 6 -
4.2.2 数据源配置 - 6 -
4.2.3FTP_USER表结构 - 6 -
4.2.4 基于文件的用户管理 - 7 -

FtpServer配置是基于XML的,它匹配了XML Schema,在XML编辑器里可以方便的修改进行配置。XML文档结构如下:
<server xmlns="http://mina.apache.org/ftpserver/spring/v1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://mina.apache.org/ftpserver/spring/v1 http://mina.apache.org/ftpserver/ftpserver-1.0.xsd"
id="myServer">
</server>
其中id是必需的,设置服务器的标识。
在server元素里面,可以添加新的元素配置server实例中的组件,如listeners(监听器) 和user managers用户管理器。
1与Spring整合
Apache FtpServer使用了Spring框架实现配置,因此从Spring框架中可以得到很多配置的好处。例如,可以将server元素置于Spring配置文件的任何位置,当FtpServer在classpath下时,Spring可以为你启动FtpServer。
2 server元素
一些配置是针对整个server的,影响到所有的listener和登陆限制,强加的listener登陆人数。采用XML配置,可有的配置项如下:
<server xmlns="http://mina.apache.org/ftpserver/spring/v1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://mina.apache.org/ftpserver/spring/v1 http://mina.apache.org/ftpserver/ftpserver-1.0.xsd"
    id="server"
    max-logins="500"
anon-enabled="false"
max-anon-logins="123"
max-login-failures="124"
login-failure-delay="125"
>
...
</server>

Server元素详解
元素 描述 是否必需 默认值
id XML配置文件中的唯一标识符 Yes
max-logins 最大并发用户数 No 10
max-anon-logins 最大匿名用户数 No 10
anon-enabled 是否允许匿名用户登陆 No true
max-login-failures 连接关闭前登陆失败后尝试次数 No 3
login-failure-delay 登陆失败后的时间延迟(ms),用于限制配置暴力破解密码 No 500

3 listener元素
Listener是FtpServer中负责监听网络socket接口,当客户端连接后创建用户session、执行命令等。一个FtpServer可以同时拥有多个listerner,以下是一些例子:
1)一个在21端口的默认监听;
2)一个在21端口的超速通道监听,一个隐式的在22端口上的SSL监听
3)一个在内部IP超速通道监听,一个外部IP的SSL监听
Listener以name标识,默认Listener的名称是“default”。
主要的网络配置表现在listener上,例如监听端口、SSL配置。
在XML配置格式内,所有的监听器以“listeners”元素进行配置。因此一个XML配置看起来像:
<listeners>
      <nio-listener name="default" port="2222" implicit-ssl="true" idle-timeout="60" local-address="1.2.3.4">
        <ssl>
         <keystore file="mykeystore.jks" password="secret" key-password="otherSecret" />
             <truststore file="mytruststore.jks" password="secret"/>
       </ssl>
       <data-connection idle-timeout="60">
         <active enabled="true" local-address="1.2.3.4" local-port="2323" ip-check="true"/>
         <passive ports="123-125" address="1.2.3.4" external-address="1.2.3.4" />
        </data-connection>
        <blacklist>1.2.3.0/16, 1.2.4.0/16, 1.2.3.4</blacklist>
    </nio-listener>
</listeners>

nio元素
装配FtpServer的监听器叫做nio-listener,因为它是基于Java NIO的以提升性能和规模。
元素 描述 是否必需 默认值
name 监听名称,如果是“default”,它会覆盖默认的监听器 Yes
port 监听器接受连接的端口 No 21
local-address 监听器绑定的服务器地址 No All available
implicit-ssl 如果使用隐式的SSL,其值为true No false
idle-timeout 非活跃客户端断开时间。如果值设为0,则闲置时间不可用(一个客户端可以永远闲置,如果没有从服务器断开)如果一个较低的最大闲置时间配置给用户(比如使用PropertiesUserManager闲置时间配置),它会覆盖listener值.这样listener值强加以更高的阈值 ,但是低层值可以提供给每个用户。 No 300

ssl元素
对于需要FTPS 支持的Listener必须。
元素 描述 是否必需 默认值
protocol 使用SSL协议,支持的值有“SSL”和“TLS” No TLS
client-authentication 是否客户端认证?支持的值有:“NEED”, “WANT”和“NONE” No NONE
enabled-ciphersuites 对于本连接的一个可用的逗号分隔的密码组件列表。可用的加密组件依赖于所采用的Java版本, 这里 是Sun's JSSE 提供. No 所有的加密组件均可用

keystore元素
如果提供了ssl元素,它将是必须的。它为密钥存储提供配置,用于查找私钥和服务器证书。
元素 描述 是否必需 默认值
file 密钥存储路径 Yes
password 密钥存储密码 Yes
key-password 密钥存储中的密钥密码 No 密钥存储密码
key-alias 密钥存储中Key的别名 No Uses first key found
type 密钥存储类型 No JKS
algorithm 密钥存储算法 No SunX509

truststore
该元素用于配置信任存储,以定位信任的证书。
元素 描述 是否必需 默认值
file 密钥存储路径 Yes
password 密钥存储密码 No 无密码可读取证书
type 密钥存储类型 No JRE密码钥存储, 一般情况为 JKS
algorithm 密钥存储算法 No SunX509

data-connection元素
为数据连接提供配置
元素 描述 是否必需 默认值
idle-timeout 闲置数据连接关闭时间 No 300


active元素
为积极数据连接提供配置
元素 描述 是否必需 默认值
enabled 如果积极数据连接不被允许,值为false No true
local-address 服务器创建数据连接时使用的本地地址 No Any available
local-port 服务器创建数据连接时使用的本地端口 No Any available
ip-check 服务器是否检查数据连接IP否与控制socket的IP相同? No false

passive元素
为消极数据连接提供配置
元素 描述 是否必需 默认值
ports 服务器创建消极数据连接时使用的本地端口 No Any available port
address 服务器监听消极数据连接的地址 No 与控制socket地址相同
external-address 服务器声明在PASV答复中监听的地址。当服务器在NAT防火墙后,客户端看到的IP不同于服务回使用的IP时很有用。 No

blacklist元素


4 User Manager
FtpServer同时支持文件方式和数据库方式的用户管理。
4.1 个性化User Manager
可以编写自己的UserManager整合应用,自编写的用户管理器需要实现org.apache.ftpserver.ftplet.UserManager接口。在Spring配置文件中,需要bean元素来配置你的UserManager。这给你了所有Spring的优势,可以融合其他的bean。也可以根据Spring的扩展机制,提供自己的XML格式。
4.2 数据库用户管理方式
可以将用户信息存储在数据库中,JBDC用于访问数据库。这个User Manager已经在MYSQL、HSQLDB和FireBird数据库下进行了测试。所有的信息存储在FTP_USER表中,一个示例的数据库DDL文件在<INSTALL_DIR>/res/ftp-db.sql下。需要将JDBC包加入到classpath下。
示例:
<db-user-manager encrypt-passwords="salted">
   <data-source>
    <beans:bean class="some.datasoure.class" />
   </data-source>
   <insert-user>INSERT INTO FTP_USER (userid, userpassword,
    homedirectory, enableflag, writepermission, idletime, uploadrate,
    downloadrate) VALUES ('{userid}', '{userpassword}', '{homedirectory}',
    '{enableflag}', '{writepermission}', {idletime}, {uploadrate},
    {downloadrate})</insert-user>
   <update-user>UPDATE FTP_USER SET
    userpassword='{userpassword}',homedirectory='{homedirectory}',enableflag={enableflag},writepermission={writepermission},idletime={idletime},uploadrate={uploadrate},downloadrate={downloadrate}
    WHERE userid='{userid}'</update-user>
   <delete-user>DELETE FROM FTP_USER WHERE userid = '{userid}'
   </delete-user>
   <select-user>SELECT userid, userpassword, homedirectory,
    enableflag, writepermission, idletime, uploadrate, downloadrate FROM
    FTP_USER WHERE userid = '{userid}'</select-user>
   <select-all-users>SELECT userid FROM FTP_USER ORDER BY userid
   </select-all-users>
   <is-admin>SELECT userid FROM FTP_USER WHERE userid='{userid}' AND
    userid='admin'</is-admin>
   <authenticate>SELECT userpassword from FTP_USER WHERE userid='{userid}'</authenticate>
</db-user-manager>

4.2.1配置参数
db-user-manager element
元素 描述 是否必需 默认值
encrypt-passwords 它表明了密码是如何存储的。可用值为:clear普通文本,MD5哈希算法或者salted哈希盐化密码。建议采用salted。 No md5
子元素 描述 是否必需 默认值
data-source 普通Spring bean配置的数据源 Yes
insert-user SQL语句插入一个新的用户,所有的动态值在运行时会被取代。 Yes
update-user SQL语句插入修改一个用户,所有的动态值在运行时会被取代。 Yes
delete-user SQL语句删除一个用户,所有的动态值在运行时会被取代。 Yes
select-user SQL语句查询一个用户,所有的动态值在运行时会被取代。 Yes
select-all-users SQL语句插入所有用户,所有的动态值在运行时会被取代。 Yes
is-admin 查询一个用户是否是管理员用户,所有的动态值在运行时会被取代。 Yes
authenticate QL语句认证一个用户,所有的动态值在运行时会被取代。 Yes

4.2.2 数据源配置
数据源必须按数据库提供方描述那样配置,可以用BasicDataSource来满足一般的要求,它是由Apache Commons DBCP 项目组提供。
使用BasicDataSource连接Mysql。
<data-source>
<beans:bean class="org.apache.commons.dbcp.BasicDataSource">
   <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
   <beans:property name="url" value="jdbc:mysql://localhost/ftpd" />
   <beans:property name="username" value="myuser" />
   <beans:property name="password" value="secret" />
   </beans:bean>
</data-source>

4.2.3FTP_USER表结构
Column Type Default value
userid VARCHAR(64), Primary key
userpassword VARCHAR(64)
homedirectory VARCHAR(128)
enableflag BOOLEAN TRUE
writepermission BOOLEAN FALSE
idletime INT 0
uploadrate INT 0
downloadrate INT 0
maxloginnumber INT 0
maxloginperip INT 0
4.2.4 基于文件的用户管理
这是默认的用户管理方式,使用properties文件管理所有的用户。
示例:
<file-user-manager file="users.properties" encrypt-passwords="true" />

file-user-manager元素
元素 描述 是否必需 默认值
file 存储用户的properties文件路径 Yes
encrypt-passwords 加密方式,具体见前面 No md5
5 配置消息端口
当客户端需要一个消极端口连接时,服务器端应当提供相应的端口以供连接使用。默认情况下,FtpServer会选择任何可以利用的端口。然而,这也可以被使用passive data connection配置覆盖。允许的的消极端口可以被指定到一个端口(如20020),多个端口(如20020,20030,20040),或者一个范围(20020-20030)。默认的一个开放关闭的范围,以1开始,65535结束;例如范围60000-,是指从60000-65535。任何一个指定的值或者范围的组合,都可以使用。
当服务器端使用完所有的端口(一个客户端处理一个数据转换),下一个客户端必须等待可用端口。因此,建议采用多个端口。
如果一个值(某个指定端口,或者一个范围值的开始或者结束),在允许的0-65535之外,则在服务器启动的时候就会报错。
示例:
123 端口 123 作为passive port
123,133 端口123 和 133作为passive port
123-125 从123 到125内任何一个端口都可以作为passive port
123-125, 127, 129-130 从123 到125内任何一个端口, 端口 127 或从129到130内的端口 都可以作为passive port
0   任意一个端口均可作为passive port

6 TLS-SSL Support
这里解释了怎么使Apache FTP Server使用Transport Layer Security (TLS)来加密服务器-客户端的通信。
FtpServer使用Java Secure Sockets Extension (JSSE) 基础组件提供TLS/SSL socket。JSSE与一些提供商Java发布版一起。对于这些发布版本,请遵从供应商的指示配置JVM以使用JSSE服务。
6.1安全模式
显式安全模式
在这种模式下服务器支持安全和非安全的连接,一旦得到客户端请求(通过SSL认证),服务器端转向SSL/TLS模式。在这种情况下,服务器端不应该采用隐式SSL(默认情况下值):
<nio-listener name="default" implicit-ssl="false">

隐式安全模式
采用隐式的SSL连接,即总是在控制socket上可用。需要做的第一件事情就是告诉listener:
<nio-listener name="default" implicit-ssl="true">
如果设置采用隐式的SSL连接,应该考虑数据连接的隐式安全。
6.2 数据连接安全
隐式安全监听器并不保证加密数据转换。要在数据连接中使用SSL/TLS客户端要么必须发送“PROT P”命令,要么隐式安全也能在数据连接中可用。
<data-connection implicit-ssl="true">
如果没有显式地配置SSL密钥存储(keystores)和信任存储(truststores)为数据连接,它将从listener中继承。这是基本的配置。
不同的FTP客户端动作不同,关于隐式的数据连接,一些臆想了一个SSL socket,而一些总是发送“PROT P”命令,下面表格中展示了一些客户端的特性,请报告一些其他的:

FTP客户端 动作
FileZilla 在隐式模式下自动发送 "PROT P"命令
DartFTP/PowerTCP 臆想了一个SSL socket

本文最近访客

评论
 
 
 发布 
500 / 0

百度空间,让世界发现你
向世界展示自己,发布喜爱的图片、文字和音乐

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值