apache ftp server配置

来源:互联网 发布:单片机的作用是什么 编辑:程序博客网 时间:2024/05/24 15:39

先来简单介绍一下apache ftp server吧,顾名思义这个是Apache下的一个东东,个人感觉还是很新的,到现在才是1.0.X,不过还是相信Apache的品牌效应,这个东东用起来还是很方便的,通过配置文件可以对ftp服务相关参数进行灵活配置,能够支持基于配置文件和数据库的两种用户权限管理,另外还支持SSL协议和数字证书机制。 
下面是官网的简单介绍: 
TheApache FtpServer is a 100% pure Java FTP server. It's designed to be a completeand portable FTP server engine solution based on currently available openprotocols. FtpServer can be run standalone as a Windows service or Unix/Linuxdaemon, or embedded into a Java application. We also provide support forintegration within Spring applications and provide our releases as OSGibundles. 
接下来我就按三部分介绍apache ftp server的使用。 
1.独立部署apache ftp server作为系统服务 
2.作为为window系统的服务 
3.结合spring配置嵌入我们自己的系统 
注:因为Apache FTP Server名字写起来太长,以下简称为AFS. 
1.独立部署AFS 
1.1安装AFS http://mina.apache.org/ftpserver/ 
我用的版本是1.0.4, 本文就以该版本为例。无需安装下载后直接解压即可。 
因为是纯java编写的程序,所以程序部分windowslinux,解压后在程序的bin目录下有这样一系列的可执行文件。其中ftpd.batftpd.sh分别是windows平台和linux下的启动命令。 
1.2启动AFS 
AFS启动时可以指定使用的具体的配置文件,例如: 
bin/ftpd.batres/conf/ftpd-typical.xml 
如果未指定配置文件,那么会默认用自带的res/conf/ftpd-full.xml文件作为配置文件。 
到此为止,一个ftp server就已经运行起来了。 
1.3AFS的配置 
1.3.1AFS配置文件详解 
AFS自带的配置文件ftpd-full.xml为例加以介绍。ftpd-full.xml路径为$AFS_HOME/res/conf/ftpd-full.xml. 
文件内容如下: 

view plaincopy toclipboardprint?

1.      < xmlversion="1.0" encoding="UTF-8" >  

2.      <serverxmlns="http://mina.apache.org/ftpserver/spring/v1"  

3.          xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

4.          xsi:schemaLocation="  

5.            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   

6.            http://mina.apache.org/ftpserver/spring/v1http://mina.apache.org/ftpserver/ftpserver-1.0.xsd      

7.            "  

8.          id="myServer">  

9.          <!--  

10.            Use this section to define custom listeners, or to redefinethe  

11.            default listener, aptly named "default"  

12.        -->  

13.        <listeners>  

14.            <nio-listenername="default" port="2222" implicit-ssl="true"  

15.                idle-timeout="60" local-address="1.2.3.4">  

16.                <ssl>  

17.                    <keystorefile="mykeystore.jks" password="secret"  

18.                        key-password="otherSecret" />  

19.                    <truststorefile="mytruststore.jks" password="secret" />  

20.                </ssl>  

21.                <data-connectionidle-timeout="60">  

22.                    <activeenabled="true" local-address="1.2.3.4" local-port="2323"  

23.                        ip-check="true" />  

24.                    <passiveports="123-125" address="1.2.3.4" external-address="1.2.3.4" />  

25.                </data-connection>  

26.                <blacklist>1.2.3.0/16, 1.2.4.0/16, 1.2.3.4</blacklist>  

27.            </nio-listener>  

28.        </listeners>  

29.        <!--  

30.            Use this section to define your Ftplets, they areconfigured like  

31.            regularSpring beans  

32.        -->  

33.        <ftplets>  

34.            <ftpletname="ftplet1">  

35.                <beans:bean class="org.apache.ftpserver.examples.MyFtplet">  

36.                    <beans:propertyname="foo" value="123" />  

37.                </beans:bean>  

38.            </ftplet>  

39.        </ftplets>  

40.        <!--The user manager, choose one -->  

41.        <file-user-managerfile="users.properties"  

42.            encrypt-passwords="true" />  

43.        <!--<db-user-manager>  

44.            <data-source>  

45.                <beans:bean class="some.datasoure.class" />  

46.            </data-source>  

47.            <insert-user>INSERTINTO FTP_USER (userid, userpassword,  

48.                homedirectory,enableflag, writepermission, idletime, uploadrate,  

49.                downloadrate)VALUES ('{userid}', '{userpassword}',  

50.                '{homedirectory}',  

51.                {enableflag},{writepermission}, {idletime},  

52.                {uploadrate},  

53.                {downloadrate})  

54.            </insert-user>  

55.                <update-user>UPDATEFTP_USER SET  

56.                    userpassword='{userpassword}',homedirectory='{homedirectory}',enableflag={enableflag},writepermission={writepermission},idletime={idletime},uploadrate={uploadrate},downloadrate={downloadrate}  

57.                    WHEREuserid='{userid}'  

58.            </update-user>  

59.                <delete-user>DELETEFROM FTP_USER WHERE userid = '{userid}'  

60.            </delete-user>  

61.                <select-user>SELECTuserid, userpassword, homedirectory,  

62.                    enableflag,writepermission, idletime, uploadrate, downloadrate,  

63.                    maxloginnumber,maxloginperip FROM  

64.                    FTP_USERWHERE userid = '{userid}'  

65.            </select-user>  

66.                <select-all-users>SELECTuserid FROM FTP_USER ORDER BY userid  

67.            </select-all-users>  

68.                <is-admin>SELECTuserid FROM FTP_USER WHERE userid='{userid}'  

69.                    AND  

70.                    userid='admin'  

71.            </is-admin>  

72.                <authenticate>SELECTuserpassword from FTP_USER WHERE  

73.                    userid='{userid}'</authenticate>  

74.        </db-user-manager>-->  

75.        <!--The file system -->  

76.        <native-filesystem case-insensitive="false"  

77.            create-home="true" />  

78.        <!--  

79.            Use this section to define custom commands. Customcommands can also  

80.            overridealready existing commands  

81.        -->  

82.        <commandsuse-default="false">  

83.            <commandname="MYHELP">  

84.                <beans:bean class="org.apache.ftpserver.examples.MYHELP" />  

85.            </command>  

86.        </commands>  

87.        <!--Define the available languages -->  

88.        <messageslanguages="se, no ,da" />  

89.    </server>  


1.3.1.1server的配置 
这一部分在官网写的很清楚,可以查看http://mina.apache.org/ftpserver/configuration.html。在这里本人凭借英语四级的水平斗胆翻译一下。 
属性 
描述 
必填 
默认值 
id 
配置的server在该XML文件中的唯一标识 
 
max-logins 
最大同时在线用户数 
 
10 
max-anon-logins 
最大同时在线匿名用户数 
 
10 
anon-enabled 
是否启动匿名登录 
 
true 
max-login-failures 
最大登录失败次数,达到该次数后连接自动断开。 
 

login-failure-delay 
失败登录后连接延迟时间(以毫秒为单位)。防止恶意用户暴力破解密码。 
 
500 
1.3.1.2listeners 配置 
Listeners组件是负责在ftp server指定的端口上监听client端创建连接和执行命令。一个AFS可以同时有多个listenersListenersname属性作为唯一标识,默认的listenername”default”. 
Attribute 
Description 
Required 
Defaultvalue 
name 
Listener名称,如果设定listener名称为“default”,那么该listener的设置会覆盖默认的listner 
 
port 
Listener监听的端口 
 
21 
local-address 
Server绑定的本地服务地址 
 
Allavailable 
implicit-ssl 
是否实现SSL的支持 
 
false 
idle-timeout 
空闲连接保持连接状态的时长(单位为秒)
 
300 
1.3.2AFS权限控制 
AFS的权限控制有两种方式:文件控制和数据库控制。 
1.3.2.1文件控制权限的配置 
通过文件控制只需在server的配置文件中添加以下配置 
<file-user-managerfile="users.properties" encrypt-passwords="true"/> 
其中users.properties文件权限控制文件,encrypt-passwords可以指定密码存储的方式,有效值包括“clear”(明文),“md5”,”salted”,这个salted不知道是什么意思,应该和MD5类似吧,估计也是一种加密标准,而且官方鼓励使用salted. 
AFS在安装时就提供了一个默认的users.properties文件,配置项一目了然。 
1.3.2.1数据库控制权限 
数据库对用户的权限的管理与通过文件类似,不同就是把对用户的配置移到了数据库的表里面。而且AFS提供了建表的sql语句,文件存放在res下的ftp-db.sql 
关于此处的相关配置可以参见上面的完成配置实例,该部分的需要配置insert-userupdate-userdelete-userselect-userselect-all-usersis-adminauthenticate。一般情况下我们都会用我们不会单独用AFS来增删改用户,但是update-userdelete-userinsert-user一个都不能少,不然AFS启动时校验通不过。另外我们通常会希望AFS的用户管理与我们的应用系统采用统一管理,也就是不再为AFS建立专用的用户管理表,这时候我们可以通过修改select-useris-adminauthenticate等配置项来完成。不要以为随便改写查询sql都可以哦,AFS在处理这几个查询时是通过类似rs.getString(列名)的形式获得记录的,也就是说无论我们怎么修改sql,但是数据列名或者别名一定要和AFS提供的默认查询语句匹配上,不然会有无效列名的错误。 
关于AFS的配置大概就这些,总的来说各个配置项还是很直观的。现在我们就可以执行bin/ftpd.sh启动AFS了。 
2.作为window系统的服务 
如果是在windows平台的话,AFS还可以注册为windows的系统服务来运行。方法也很简单,直接执行: 
<yourhome>bin/serviceinstall 
运行成功后,进到windows的服务管理窗口就可以看到我们新注册的名为Apache FtpServer的服务了。当然服务名是可以指定的,只需: 
<yourhome>bin/serviceinstall <your服务名
此时创建的服务名就为Apache Ftp Servef<你指定的服务名
如果我们想注册服务时用特定的配置文件可以执行如下命令
<yourhome>bin/serviceinstall <your服务名> <你需要执行的文件路径
卸载已经注册的windows服务只需: 
<yourhome>bin/serviceremove <your服务名(不输入为默认)
3.结合spring配置嵌入我们自己的系统 
以上我们介绍的是独立部署AFS,其实AFS还可以结合spring嵌入到我们的应用程序中。 
修改web.xml文件添加spring的相关配置如下: 

view plaincopy toclipboardprint?

1.      < xmlversion="1.0" encoding="UTF-8" >  

2.      <web-appversion="2.4"   

3.          xmlns="http://java.sun.com/xml/ns/j2ee"   

4.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   

5.          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   

6.          http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  

7.          <context-param>  

8.              <param-name>contextConfigLocation</param-name>  

9.              <param-value>classpath*:/applicationContext*.xml</param-value>  

10.        </context-param>  

11.        <listener>  

12.            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  

13.        </listener>  

14.    </web-app>  


src目录下建立spring配置文件applicationContext-ftpserver.xml 
配置方法与前面提到的server配置参数相同,只是此时的server作为spring的一个bean来处理。格式如下: 

view plaincopy toclipboardprint?

1.      < xmlversion="1.0" encoding="UTF-8" >  

2.      <beans  

3.          xmlns="http://www.springframework.org/schema/beans"  

4.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

5.          xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd  

6.          ">  

7.          <description>ftpserverdemo</description>  

8.          <beanid="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">  

9.              <propertyname="jndiName" value="java:comp/env/jdbc/etlui"/>  

10.        </bean>  

11.        <serverxmlns="http://mina.apache.org/ftpserver/spring/v1"  

12.                xmlns:beans="http://www.springframework.org/schema/beans"   

13.                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

14.                xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd   

15.                http://mina.apache.org/ftpserver/spring/v1http://mina.apache.org/ftpserver/ftpserver-1.0.xsd"  

16.            id="demoserver"       

17.            max-logins="500"  

18.            anon-enabled="false"  

19.            max-anon-logins="123"  

20.            max-login-failures="124"  

21.            login-failure-delay="125">  

22.    --具体配置参数  

23.    </server>  

24.    <beanid="ctroller" class="com.harvey.ftpd.ServiceController" init-method="init">  

25.            <propertyname="server">  

26.                <refbean="demoserver"/>  

27.            </property>  

28.            <propertyname="server2">  

29.                <refbean="demoserver2"/>  

30.            </property>  

31.        </bean>  

32.    </beans>  


其中ServiceController代码如下: 

view plaincopy toclipboardprint?

1.      public class ServiceController {  

2.          private FtpServer server = null;  

3.          public void init() {  

4.              try {  

5.                  server.start();  

6.              } catch (FtpException e) {  

7.                  e.printStackTrace();  

8.              }  

9.              System.out.println("systemexit");  

10.        }  

11.        public FtpServer getServer() {  

12.            return server;  

13.        }  

14.        public void setServer(FtpServer server) {  

15.            this.server = server;  

16.        }  

17.    }  


现在我们就可以将AFS纳入到我们的应用程序的管理范畴之内。 
另外再说些其他的,因为server作为spring的一个bean来处理,所以可以配置多个server,也就是为主机配置多个AFS server,虽然可以这样的配置,但是觉得也没有这种必要,只是觉得好玩可以配一下。

原创粉丝点击