服务器 Ubuntu 配置 ftp

安装

更新软件包

1
sudo apt upgrade

安装 vsftpd

1
sudo apt-get install vsftpd

ftp 启动,停止,重启,查看状态指令

1
2
3
4
5
6
7
systemctl start vsftpd #启动

systemctl stop vsftpd #停止

systemctl restart vsftpd #重启

systemctl status vsftpd #查看状态

配置

编辑 /etc/vsftpd.conf 文件

1
sudo vi /etc/vsftpd.conf

FTP 配置文件部分说明(需要修改的部分):

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 设置登录 FTP 欢迎信息
ftpd_banner=Welcome to CHL FTP service.

listen=YES # 服务器监听
local_enable=YES # 是否允许本地用户访问
write_enable=YES # 是否允许上传文件,不开启会报 550 permission denied
anonymous_enable=NO # 匿名访问允许,默认不要开启
anon_upload_enable=YES # 匿名上传允许,默认是 NO
anon_mkdir_write_enable=YES # 匿名创建文件夹允许

local_umask=022   # FTP 上本地的文件权限,默认是 077。此时 umask 为 022,则目录为 777-022=755,文件为 666-022=644。
connect_from_port_20=YES # 启用 20 号端口作为数据传送的端口
data_connection_timeout=120 # 设置数据连接超时时间

utf8_filesystem=YES # vsftpd使用 utf8 文件系统
use_localtime=YES
xferlog_enable=YES # 激活上传和下传的日志
xferlog_file=/var/log/vsftpd.log # 设定系统维护记录FTP服务器上传和下载情况的日志文件
xferlog_std_format=YES # 使用标准的日志格式

local_root=/home/ftp # 设置自定义的 ftp 根目录的位置

allow_writeable_chroot=YES # 解决 "500 OOPS: vsftpd: refusing to run with writable root inside chroot()" 问题
write_enable=YES # 允许向 FTP 服务器写入权限
chown_uploads=YES # 设定是否允许改变上传文件的属主,与下面一个设定项配合使用
chown_username=whoever # 设置想要改变的上传文件的属主,可设为 ftp

ascii_upload_enable=YES  # 允许服务器以 ASCII 方式传输数据,但引起 "SIZE /big/file" 方式的 DoS 攻击
ascii_download_enable=YES

# 在默认配置下,本地用户登入FTP后可以使用 cd 命令切换到其他目录,这样会对系统带来安全隐患,可配置如下
chroot_list_enable=YES # 设置是否启用 chroot_list_file 配置项指定的用户列表文件。默认值为NO。
chroot_local_user=YES # 用于指定用户列表文件中的用户是否允许切换到上级目录。默认值为NO。
chroot_list_file=/etc/vsftpd.chroot_list # 禁用名单,用于指定用户列表,该文件用于控制哪些用户可以切换到 home 目录的上级目录。

listen_port=6666 #修改 ftp 服务器端口

# 配置为被动模式
pasv_enable=YES
pasv_min_port=6000 #最小端口
pasv_max_port=7000 #最大端口

chroot_list_enable chroot_local_user chroot_list_file 通过搭配能实现以下几种效果:

  • 当 chroot_list_enable=YES,chroot_local_user=YES 时,在 /etc/vsftpd.chroot_list 文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。
  • 当 chroot_list_enable=YES,chroot_local_user=NO 时,在 /etc/vsftpd.chroot_list 文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。
  • 当 chroot_list_enable=NO,chroot_local_user=YES 时,所有的用户均不能切换到其他目录。
  • 当 chroot_list_enable=NO,chroot_local_user=NO 时,所有的用户均可以切换到其他目录。

通过终端访问 ftp(由于浏览器访问 ftp 在新版 chrome 与 edge 中皆已失效,在这里便不再列出)

1
ftp ip 端口

创建 ftp 上传目录

需要与配置文件中的 local_root 指定的路径一致

1
mkdir -p /home/ftp

创建 ftp 用户

创建 vsftpd 用户组(若已存在请跳过该步)

1
sudo groupadd vsftpd

创建 ftp 用户

1
sudo useradd -g vsftpd -d /home/ftp -M username

参数说明:

  • g:指定用户所属的组
  • d:指定用户登入时的起始目录,这里即为 ftp 上传目录
  • M:不创建用户的家目录

设置 ftp 用户的密码:

1
sudo passwd username

设置 ftp 用户权限

1
sudo chown -R username:vsftpd /home/ftp

由于设置了 chroot_list_enable 这几个选项,需要将用户名写入 /etc/vsftpd.chroot_list 文件,并重启 ftp 服务

1
2
sudo vi /etc/vsftpd.chroot_list
sudo systemctl restart vsftpd

连接 ftp

这里推荐使用 XFTP 连接 ftp,上传下载文件非常方便。XFTP 官方提供了教育版,只需要点击下方链接填写邮箱就会受到包含下载链接的邮件:

https://www.xshell.com/zh/free-for-home-school/