加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Apache-ftpserver配置全攻略

(2011-11-12 09:31:00)
标签:

杂谈

FtpServer配置详解

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


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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有