Apache Ftp Server 部署,它的帐号密码加密算法是什么呢?

1,171 阅读2分钟

背景

本文介绍 Apache Ftp Server 应用的部署过程及 Java 操作 FTP、SFTP 的流程,主要用于有操作 FTP、SFTP 的业务场景。

SFTP 环境容易得到,凡事 Linux 主机开通 SSH 连接就可以通过 SFTP 操作,但是,FTP 环境可能需要自己搭建,本文介绍使用开源 FTP Server 的过程。

开源应用

Apache 旗下的 Apache Ftp Server ,可以用于搭建自己的 FTP 测试环境。

主要需要关注三点:

  1. 帐号配置:res/conf 目录下的 user.properties。配置 FTP 帐号,关注帐号的根目录、writepermission 写权限、密码 userpassword 这个是如果需要加密,则加密算法是 MD5 值。
  2. 启动配置:ftpd-typical.xml 可以用这个文件,包含典型配置的。默认使用了加密算法,如果密码设置明文,需要启动配置加入这项:
<file-user-manager file="./res/conf/users.properties" 
encrypt-passwords="clear"/>
  1. 启动命令:进入根目录,后台方式启动:
bin/ftpd.sh res/conf/ftpd-typical.xml &

编程启示录

使用 Java 的 FTP 工具包操作目标服务器的文件时,需要注意两点:

  1. 根路径是 FTP 配置的的根路径,例如 /data 和 data ,实际的全路径是 $FTP_HOME/data
  2. 使用 API 创建目录时,多级目录创建会报错,需要逐级创建。

Apache 的 FTPServer 的密码竞然是 MD5,这一点没想到,但是也是挺简单的,文档也没有说明时这个算法,起初还以为是什么复杂的加密算法呢。百度那个密码值发现是 admin 的 MD5 ,自定义了一个密码测试,果然如此。

另外,不需要真的创建系统帐号,只要 user.properties 配置了帐号信息,就可以直接用这些帐号访问 FTP 服务了。

第三点,需要注意帐号的权限,默认的匿名帐号是没有写入权限的 writepermission 为否:

ftpserver.user.anonymous.userpassword=
ftpserver.user.anonymous.homedirectory=./res/home
ftpserver.user.anonymous.enableflag=true
ftpserver.user.anonymous.writepermission=false

按照匿名帐号配置是没有写入权限。