捯饬了几天亚马逊的 EC2,这里稍微总结记录一下 ftp 服务的配置过程
一、安装
安装的是 linux 下比较有名的 vsftpd,服务器环境 Ubuntu 14.04.1 LTS,vsftpd版本 3.0.2,安装相当简单:
| 1
 | sudo apt-get install vsftpd
 | 
安装完成可以看看 ftp 服务是否已经运行:
| 12
 
 | netstat -a | grep ftptcp 0 0 *:ftp *:* LISTEN
 
 | 
查看是否打开21端口:
| 12
 
 | sudo netstat -npltu | grep 21tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 20497/vsftpd
 
 | 
启动,重启和停止 vsftpd,还有查看状态:
| 12
 3
 4
 
 | service vsftpd startservice vsftpd restart
 service vsftpd stop
 service vsftpd status
 
 | 
先备份一下默认的配置文件:
| 1
 | sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup
 | 
二、配置
接下来有几个字段需要重新配置一番:
| 12
 
 | # Uncomment this to enable any form of FTP write command.write_enable=YES
 
 | 
是否允许执行FTP写入操作,我们要往服务器上传输文件,当然要 yes
| 12
 3
 4
 5
 6
 
 | # 是否将本地登录的用户通过 chroot() 限制在其家目录中chroot_local_user=YES
 # 是否读取 chroot_list_file 文件中的"chroot例外"用户
 chroot_list_enable=YES
 # (default follows)
 chroot_list_file=/etc/vsftpd.chroot_list
 
 | 
在 vsftpd 服务器中使用 chroot() 来管理是否允许登录用户切换目录,默认情况下本地用户可以切换到其主目录以外的目录进行浏览访问,这样对于服务器来说是不太安全的
据上面的配置,在对应目录下创建 vsftpd.chroot_list 文件。当 chroot_local_user=YES 时,chroot_list_file 文件中用户将不会被限制在其家目录中。 当 chroot_local_user=NO 时,chroot_list_file 文件中用户将会被限制在其家目录中。
| 12
 
 | # This string is the name of the PAM service vsftpd will use.pam_service_name=ftp
 
 | 
这是 vsftpd 将要使用的PAM服务名称
最后,在 vsftpd.conf 文件中添加以下:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | # 是否禁止 userlist_file 文件中的用户登陆userlist_enable=YES
 # 是否允许 userlist_file 文件之外的用户登陆。该指令仅在 userlist_enable=YES 时有意义
 userlist_deny=NO
 # 指定 userlist_enable=YES 时要加载的文件,内容为用户名,一行一个
 userlist_file=/etc/vsftpd.user_list
 # 是否允许使用 PASV 命令获得数据连接的地址端口对
 pasv_enable=YES
 pasv_min_port=13000
 pasv_max_port=13100
 port_enable=YES
 pasv_addr_resolve=NO
 pasv_address=[你的公网ip]
 pasv_promiscuous=YES
 
 | 
最终去除注释的配置如下:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 
 | listen=YESanonymous_enable=NO
 local_enable=YES
 write_enable=YES
 dirmessage_enable=YES
 use_localtime=YES
 xferlog_enable=YES
 connect_from_port_20=YES
 chroot_local_user=YES
 chroot_list_enable=YES
 chroot_list_file=/etc/vsftpd.chroot_list
 secure_chroot_dir=/var/run/vsftpd/empty
 pam_service_name=ftp
 rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
 rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
 userlist_enable=YES
 userlist_deny=NO
 userlist_file=/etc/vsftpd.user_list
 pasv_enable=YES
 pasv_min_port=13000
 pasv_max_port=13100
 port_enable=YES
 pasv_addr_resolve=NO
 pasv_address=54.65.147.146
 pasv_promiscuous=YES
 
 | 
三、创建用户
| 12
 
 | sudo useradd -s /sbin/nologin -d /var/www -g ftp usernamesudo passwd username
 
 | 
注:确保 /var/www 这个目录已存在
四、开启端口
最后,要在 AWS 控制台中开启相关端口:
| 12
 
 | TCP Ports 20 - 21TCP Ports 13000 - 13100
 
 | 
五、问题
使用FTP客户端连接服务器的时候,无法登陆,从FTP日志中看到客户端在执行AUTH TLS命令后,提示“无法连接到服务器”的错误信息
登陆时设置FTP客户端不要求会话加密,即采用普通的FTP会话方式。以FileZilla软件为例,客户在管理站点的时候,“加密”选择为“只使用普通FTP(不安全)”即可,如下图所示:
