本教程介绍如何在Raspbian安装和配置,用于在设备之间共享文件的FTP服务器。
FTP 文件传输协议,是用于将文件传输到远程网络的标准网络协议。 有几种可用于Linux的开源FTP服务器。
最着名和广泛使用的是pureftpd,Proftpd,VSFTPD。 我们将安装VSFTPD,稳定,安全和快速的FTP服务器。
我们还将向您展示如何配置服务器以将用户限制在其家目录,并使用SSL/TLS加密传输。
在开始本教程之前,您已在Raspberry Pi安装 Raspbian。运行FTP服务器不需要图形界面,因此我们的建议是使用Raspbian Lite镜像并启用SSH 。
虽然FTP是一个非常流行的协议,但对于更安全和更快的数据传输,您应该使用SCP 或SFTP。
vsftpd包在Raspbian存储库中可用。 要安装它,请运行命令sudo apt update && sudo apt install vsftpd
。
当安装完成后,FTP服务将自动启动。要验证它,可以运行命令sudo systemctl status vsftpd
打印vsftpd服务状态。输出应显示VSFTPD服务处于active状态。
sudo apt update
sudo apt install vsftpd
sudo systemctl status vsftpd
● vsftpd.service - vsftpd FTP server
Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-03-02 15:17:22 UTC; 3s ago
...
配置VSftpd
VSftpd服务器配置文件位于/etc/vsftpd.conf
。VSftpd服务器设置都在此文件中。 要查看所有可用选项,请访问VSFTPD文档页面。
在以下章节中,我们将介绍配置安全VSFTPD安装所需的一些重要设置。首先打开VSFTPD配置文件使用你喜欢的文本编辑器。
在本教程中,我们使用vim打开文件/etc/vsftpd.conf。
sudo vim /etc/vsftpd.conf
FTP 本地用户
我们仅允许本地用户访问FTP服务器。搜索anonymous_enable
和local_enable
指令并将anonymous_enable
的值改为NO,local_enable
的值改为YES。
anonymous_enable=NO
local_enable=YES
启用上传
搜索write_enable
并取消注释write_enable
指令,允许文件系统的更改,例如上载和删除文件。
write_enable=YES
Chroot Jail
为了防止本地FTP用户访问其家目录之外的文件,请更改chroot_local_user
的值为YES。
默认情况下,出于安全原因,当启用chroot时,如果用户被锁定的目录是可写的,则VSFTPD将拒绝上传文件。
因此还需要启用allow_writeable_chroot
指令,请将allow_writeable_chroot
指令改为YES,这将允许用户上传文件chroot的目录。
chroot_local_user=YES
allow_writeable_chroot=YES
被动 FTP 连接
默认情况下,VSFTPD使用主动模式。要使用被动模式,请设置端口的最小和最大范围。
您可以使用任何端口进行被动的FTP连接。启用被动模式时,FTP客户端在所选范围内的随机端口上打开与服务器的连接。
pasv_min_port=30000
pasv_max_port=31000
限制用户登录
您可以配置VSFTPD以仅允许某些用户登录。要执行此操作,请在文件末尾添加以下配置。
当启用这些选项时,您需要明确将用户名添加到/etc/vsftpd.user_allow_list
文件来指定允许登录的用户。
该文件每一行用户,仅可指定一个用户名。vsftpd.user_allow_lis
文件默认是不存在的,你可以使用vim创建文件/etc/vsftpd.user_allow_list
。
userlist_enable
表示启用user列表,userlist_file
表示指定用户列表的文件,文件的名称可以你喜欢的任何名称。
userlist_deny
指定是允许用户列表的用户还是拒绝用户列表的用户。
当userlist_deny
的值为NO时,这将会拒绝所有用户。仅在用户列表文件的用户是允许的。
当userlist_deny
的值为YES时,这将会允许所有用户,仅在用户列表文件的用户是拒绝的。
注意:用户名是Linux系统的用户名,也就是说使用useradd命令创建的用户。
userlist_enable=YES
userlist_file=/etc/vsftpd.user_allow_list
userlist_deny=NO
重启 vsftpd 服务
这是本教程的vsftpd配置文件。这将配置vsftpd限制用户在其家目录中,允许用户上传文件到家目录任何文件夹。
仅允许指定用户可以访问FTP服务器,你可以在/etc/vsftpd.user_allow_list文件添加允许的用户。
当完成配置后,保存文件并退出vim。然后运行命令sudo systemctl restart vsftpd
重启vsftpd服务。
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
chroot_local_user=YES
allow_writeable_chroot=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
pasv_min_port=30000
pasv_max_port=31000
userlist_enable=YES
userlist_file=/etc/vsftpd.user_allow_list
userlist_deny=NO
sudo systemctl restart vsftpd
设置防火墙
如果您正在运行UFW防火墙,您需要允许FTP流量。打开FTP命令端口21
,FTP数据端口端口20
和被动端口范围30000-31000
,运行ufw命令。
为了避免被锁定,确保SSH打开端口22
,运行命令sudo ufw allow OpenSSH。然后重新启用UFW来重新加载UFW规则。
运行命令sudo ufw disable && sudo ufw enable
。你也可以运行命令sudo ufw status
查看对防火墙的更改。
sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp
sudo ufw allow OpenSSH
sudo ufw disable
sudo ufw enable
Status: active
To Action From
-- ------ ----
20:21/tcp ALLOW Anywhere
30000:31000/tcp ALLOW Anywhere
OpenSSH ALLOW Anywhere
20:21/tcp (v6) ALLOW Anywhere (v6)
30000:31000/tcp (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)
禁用 shell 访问
默认情况下,在创建用户时,如果未明确指定,用户也可以通过SSH访问服务器。要禁用 shell 访问权限,
请创建一个新的shell,将打印消息,告诉用户其帐户仅限于ftp访问。运行echo命令和chmod命令,创建/bin/ftponly
文件并使其可执行。
然后运行命令将新创建的shell追加到/etc/shells
文件中,最后将用户登录shell更改为/bin/ftponly
。
您可以使用相同的命令更改要仅提供FTP访问的所有用户,newftpuser是Linux 用户的名称,记得更改为你用户。
echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly
sudo chmod a+x /bin/ftponly
echo "/bin/ftponly" | sudo tee -a /etc/shells
sudo usermod newftpuser -s /bin/ftponly
结论
我们向您展示如何在Raspbian安装和配置FTP服务器。如果您有任何问题或反馈,请随时留下评论。