现在我们来做一下FTP实验记录把
我们这次的环境还是Ubuntu 20.04 LTS

安装 vsftpd

我们先来安装vsftpd这个包

1
2
sudo apt update
sudo apt install vsftpd

安装完毕之后,我们使用下面指令看它是否成功运行

1
sudo systemctl status vsftpd

输出应显示vsftpd服务处于活动状态并正在运行如下图所示

打开防火墙

如果您正在运行UFW防火墙 ,则需要开放FTP端口
要打开端口21(FTP 命令端口)、端口20(FTP 数据端口)
30000-31000(被动端口范围),请运行以下命令

1
2
sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp

为避免被锁定,请确保端口22已打开

1
sudo ufw allow OpenSSH

通过禁用和重新启用UFW重新加载UFW规则:

1
2
sudo ufw disable
sudo ufw enable

我们需要来验证一下是否正确运行:

1
sudo ufw status

创建 FTP 用户

为了测试FTP服务器,我们将创建一个新用户

创建一个名为 的新用户ftptest并设置强密码:

1
sudo adduser ftptest

如果您只想ftpuser通过FTP登录
您应该通过在 SSH 配置文件中
将他们的用户名列入黑名单
来禁用他们的 SSH 访问

在文本编辑器中打开SSH配置

1
sudo vi /etc/ssh/sshd_config

将以下内容添加到文件底部
替换ftptest为您要拒绝SSHSFTP访问的用户
您可以在此处添加由单个空格分隔的多个用户

1
DenyUsers ftptest

然后重启SSH服务令其生效

1
sudo service sshd restart

配置vsftpd

在开始在使用 FTP 之前,我们必须对 vsftpd 配置文件进行一些更改

1
sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak

使用你喜欢的编辑器创建一个新的配置文件

1
sudo vi /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
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
force_dot_files=YES
pasv_min_port=30000
pasv_max_port=31000
user_sub_token=$USER
local_root=/home/$USER/ftp

然后我们就重新启动vsftpd

1
sudo systemctl restart vsftpd

目录权限

您现在需要决定允许这个新的 FTP 用户在哪里查看和上传文件
vsftpd使用chroot jails将用户限制在他们的主目录中,并要求主目录不可写

本次我仅仅是想限制目标用户在对应主目录中
在用户的主目录中创建一个名为的新目录ftp
在下面的这个例子中,我们的用户被称为ftptest

我们将创建一个新目录/ftp,用户可以在其中查看和上传文件

1
sudo mkdir /home/ftpuser/ftp

将此目录的所有权分配给我们的新FTP用户,否则他们将无法写入该目录

1
sudo chown ftptest:ftptest /home/ftptest/ftp

插曲

其实本人直接生成新账号的根目录
直接使用ftp是无法访问的
我们现在需要做简单的几步

1
2
3
sudo rm -rf /home/ftptest
sudo mkdir /home/ftptest
sudo mkdir /home/ftptest/ftp

只要我们重新新建文件夹
然后就应该可以成功连接到FTP服务器了

测试FTP

我们现在可以测试vsftpd查看我们是否可以以我们之前创建的用户身份登录
我们现在使用WinSCP来尝试登录