如何上传文件
与 VPS 进行小文件传输时,可以使用 scp 来保证安全。然而,在进行大文件传输时,还是 FTP 更加快速靠谱。在 VPS 上安装 FTP 遇到了很多坑,所以在此记录一下。
VPS 环境
- Debian 4.9.30-2+deb9u5 (2017-09-19) x86_64
- Linux new 4.9.0-3-amd64
FTP 服务
安装 vsftpd 服务
apt-get install vsftpd
启动服务
systemctl start vsftpd.service #启动
systemctl enable vsftpd.service #开机自启
配置
vim /etc/vsftpd.conf
修改:
anonymous_enable=NO # 禁止匿名访问
local_enable=YES # 允许本地用户登陆
write_enable=YES # 允许上传文件
local_umask=022 # 777-022=755,设置上传文件的权限
chroot_local_user=YES # 限制只能访问用户自己的根目录
chroot_list_enable=YES # 开启列表管理根目录
chroot_list_file=/etc/vsftpd.chroot_list # 不受限制的用户列表
local_root=/home/ftp # 用户目录
pasv_enable=YES # 使用被动模式
pasv_min_port=12345 # 设置被动模式传输的最小端口号
pasv_max_port=54321 # 最大端口号
pasv_address=11.11.11.11 # VPS 的外网 ip
listen_port=21 # 发出命令用的端口
如果没有vsftpd.chroot_list
,新建一个
创建目录
mkdir /home/ftp
chmod a-w /home/ftp
# 必须去掉根目录的可读权限,否则连接时报500错误
创建用户
useradd -d /home/ftp/ftpuser -M ftpuser
passwd ftpuser
如果需要上传文件,不仅需要 ftp 允许写入,还需要 ftpuser 用户被允许在该目录写入。具体权限管理可以搜索chmod
mkdir /home/ftp/ftpuser
防火墙
vim /etc/iptables.test.rules
放开相关端口限制
-A INPUT -p tcp --dport 21 -j ACCEPT
-A OUTPUT -p tcp --dport 21 -j ACCEPT
-A INPUT -p tcp --dport 12345:54321 -j ACCEPT
-A OUTPUT -p tcp --dport 12345:54321 -j ACCEPT
应用防火墙规则
iptables-restore < /etc/iptables.test.rules
其他注意事项
登陆 530 login incorrect 错误
vim /etc/pam.d/vsftpd
注释掉
#auth required pam_shells.so
重启服务
systemctl restart vsftpd.service
主动模式与被动模式
FTP是基于TCP的服务,使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是21(命令端口)和20(数据端口)。但FTP工作方式的不同,数据端口并不总是20。这就是主动与被动FTP的最大不同之处。
主动模式:数据连接上,服务端从20端口去连接客户端大于1024的端口 命令连接:客户端 (>1024端口) -> 服务器 21端口 数据连接:客户端 (>1024端口) <- 服务器 20端口 优势:主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。
被动模式:数据连接上,客户端从大于1024端口去连接服务端大于1024的端口 命令连接:客户端 (>1024端口) -> 服务器 21端 数据连接:客户端 (>1024端口) -> 服务器 (>1024端口) 优势:被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。