我已经阅读了相当多的安装指南,但却无法弄清楚如何配置 VSFTPD 以进行仅限 LAN 访问,以及如何将访问限制到单个目录(例如:~/Downloads)。
如果可能的话,我甚至不想在互联网上暴露它的存在。任何帮助都将不胜感激。
电脑:Ubuntu Mate 19.04 64 位。
答案1
仅限 LAN 访问
最好使用防火墙规则来完成此操作。我们将ufw
使用简单的防火墙为了这。
首先我们检查ufw
sudo ufw status
如果看到Status: inactive
则使用以下命令启用ufw
:
sudo ufw enable
如以下链接所述,我们将允许端口 20 和 21 进行基本的 VSFTPD 访问。我们不会使用简单的 ufw 规则,例如:
sudo ufw allow ftp
因为这样就可以允许从任何地方进行访问。要允许仅 LAN 访问,我们将使用高级语法:
sudo ufw allow from 192.168.0.0/24 to any port 20 proto tcp
sudo ufw allow from 192.168.0.0/24 to any port 21 proto tcp
这from 192.168.0.0/24
是 LAN-Only 部分。您的可能有所不同。一些家用路由器分配 192.168.0.x 范围内的 IP 地址,而其他路由器分配 192.168.1.x 范围内的 IP 地址,其中 x 介于 2-255 之间。子网掩码/24
表示允许该范围内的任何 x 值。
这to any
意味着分配给这台计算机的任何 IP 地址都是可以的。由于这台计算机不充当路由器,因此这种设置是可以的。
(port 20
或21
)是此规则打开的端口。
是proto tcp
唯一可以使用的tcp
协议(而不是协议)。udp
如果我们想将端口 990 和 40,000 到 50,000 端口添加到防火墙,如下面的教程所示,我们可以使用一个命令来执行此操作:
sudo ufw allow from 192.168.0.0/24 to any port 990,40000:50000 proto tcp
关于 IPv6 的说明
我对 IPv6 本地地址和子网掩码了解不够,无法写出包含 IPv6 ufw 规则的答案。没有任何 Ivv6允许规则任何使用 IPv6 地址访问该ftp
站点的尝试都将被拒绝。
这个问题的答案表明 IPv6 可能没有简单的解决方案:如何在 ufw 中允许本地 IPv6 子网?
值得一提的是,以下允许规则语法(基于对上述问题的回答)被接受ufw
:
sudo ufw allow from fe80::/64 to any port 21 proto tcp
这应该允许从以 开头的链路本地 IPv6 范围进行 ftp 访问fe80
。
限制用户只能进入一个目录
这在数字海洋教程.主要步骤如下:
在此示例中,用户名是sammy
。基本概念是用户sammy
不得具有写权限到用户可访问目录的基目录。使用ftp
以下命令创建文件夹、设置其所有权并确保删除写入权限:
sudo mkdir /home/sammy/ftp
sudo chown nobody:nogroup /home/sammy/ftp
sudo chmod a-w /home/sammy/ftp
接下来,我们创建可以上传文件的目录并将所有权分配给用户:
sudo mkdir /home/sammy/ftp/files
sudo chown sammy:sammy /home/sammy/ftp/files
接下来我们在nano中编辑VSFTPD配置文件:
sudo nano /etc/vsftpd.conf
并作以下修改/补充:
. . .
# Allow anonymous FTP? (Disabled by default).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES
. . .
write_enable=YES
. . .
chroot_local_user=YES
. . .
user_sub_token=$USER
local_root=/home/$USER/ftp
. . .
完成更改后,保存并退出文件。
然后,我们创建并将用户添加到文件中。我们将使用 -a 标志附加到文件:
echo "sammy" | sudo tee -a /etc/vsftpd.userlist
最后我们重新启动守护进程来加载配置更改:
sudo systemctl restart vsftpd
希望这可以帮助