捯饬了几天亚马逊的 EC2,这里稍微总结记录一下 ftp 服务的配置过程
一、安装
安装的是 linux 下比较有名的 vsftpd,服务器环境 Ubuntu 14.04.1 LTS,vsftpd版本 3.0.2,安装相当简单:
1
| sudo apt-get install vsftpd
|
安装完成可以看看 ftp 服务是否已经运行:
1 2
| netstat -a | grep ftp tcp 0 0 *:ftp *:* LISTEN
|
查看是否打开21端口:
1 2
| sudo netstat -npltu | grep 21 tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 20497/vsftpd
|
启动,重启和停止 vsftpd,还有查看状态:
1 2 3 4
| service vsftpd start service vsftpd restart service vsftpd stop service vsftpd status
|
先备份一下默认的配置文件:
1
| sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup
|
二、配置
接下来有几个字段需要重新配置一番:
1 2
| # Uncomment this to enable any form of FTP write command. write_enable=YES
|
是否允许执行FTP写入操作,我们要往服务器上传输文件,当然要 yes
1 2 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 文件中用户将会被限制在其家目录中。
1 2
| # This string is the name of the PAM service vsftpd will use. pam_service_name=ftp
|
这是 vsftpd 将要使用的PAM服务名称
最后,在 vsftpd.conf 文件中添加以下:
1 2 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
|
最终去除注释的配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| listen=YES anonymous_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
|
三、创建用户
1 2
| sudo useradd -s /sbin/nologin -d /var/www -g ftp username sudo passwd username
|
注:确保 /var/www 这个目录已存在
四、开启端口
最后,要在 AWS 控制台中开启相关端口:
1 2
| TCP Ports 20 - 21 TCP Ports 13000 - 13100
|
五、问题
使用FTP客户端连接服务器的时候,无法登陆,从FTP日志中看到客户端在执行AUTH TLS命令后,提示“无法连接到服务器”的错误信息
登陆时设置FTP客户端不要求会话加密,即采用普通的FTP会话方式。以FileZilla软件为例,客户在管理站点的时候,“加密”选择为“只使用普通FTP(不安全)”即可,如下图所示: