vsftpd指北

温馨提示:本文适合那些需要在 linux 上配置 ftp 而又不需要考虑安全性的人阅读。(比如想在机房专门开一个服务器跑评测)

安装

这种需求的话,用的都是 Ubuntu 吧。 (不过还是贴一下常见的三种安装)

1
2
3
4
yay -S vsftpd
# sudo pacman -S vsftpd
# sudo apt install vsftpd
# sudo yum install vsftpd

然后开机自启动:

1
2
sudo systemctl enable vsftpd
sudo systemctl start vsftpd

配置

机房的使用,就不用 local 账户登录了,这里全部采用匿名用户登录,并且免去密码。

First of All

编辑 /etc/hosts.allow :

1
2
3
4
# Allow all connections
vsftpd: ALL
# IP address range
vsftpd: 10.0.0.0/255.255.255.0

/etc/vsftpd.conf

编辑 /etc/vsftpd.conf :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
listen=NO
listen_ipv6=YES

write_enable=YES

anonymous_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
no_anon_password=YES

chroot_local_user=YES

allow_writeable_chroot=YES

anon_root=#Your ftp path
anon_umask=000
## anon_umask
## 设置用户上传后的文件的权限情况。用户上传的文件的权限 = `777 xor anon_umask` (八进制)。如果需要在 upload 上直接跑CCR、Lemon之类的话最好开000,否则开022

debug

目前遇到了两个 bug ,一个是在加入 allow_writeable_chroot=YES 之后仍然不能将 ftp 根目录设置为可读可写(出现 500 OOPS: vsftpd: refusing to run with writable root inside chroot() )。解决方案:

在 ftp 目录下设置两个目录: upload 和 download 。然后执行:

1
2
chmod 755 -R ftp
chmod 777 -R upload

这样 upload 就实现了可写,而 download 就只能只读。并且 ftp 可以成功访问。

另一个是乱码问题。 Windows 使用的是 GBK 编码,但是 Linux 上一般是 UTF-8 ,而 vsftpd 是不支持编码转换的,所以要在 Windows 端做手脚:

(参考这里

如 Windows 上是 FlashFXP 客户端,选择 站点 - 站点管理器 - 站点列表 - 快速连接 ,选择 使用的连接 ,点击 选项 - 字符编码 - UTF-8

FileZilla 客户端,选择 站点 - 站点管理器 - 站点列表 - 字符集 ,选择 强制UTF-8

其他客户端大同小异,总之是要在 Windows 客户端上把 GBK 编码转为 UTF-8 编码。