本教程介绍如何在CentOS 7使用安装和配置,用于在设备之间共享文件的FTP服务器。

FTP 文件传输协议,是用于将文件传输到远程网络的标准网络协议。 有几种可用于Linux的开源FTP服务器。

最着名和广泛使用的是pureftpdProftpdVSFTPD。 我们将安装VSFTPD,稳定,安全和快速的FTP服务器。

我们还将向您展示如何配置服务器以将用户限制在其家目录,并使用SSL/TLS加密传输。

虽然FTP是一个非常流行的协议,但对于更安全和更快的数据传输,您应该使用SCP SFTP

vsftpd包在CentOS 7仓库中可用。 要安装它,请运行命令sudo dnf install vsftpd

当安装完成后,FTP服务将自动启动。要验证它,可以运行命令sudo systemctl status vsftpd打印vsftpd服务状态。输出应显示VSFTPD服务处于active状态。

vsftpd在CentOS 7默认不会自动启动,因此,你还需要设置vsftpd服务的自动启动运行命令sudo systemctl enable vsftpd --now

sudo yum install vsftpd -y
sudo systemctl enable vsftpd --now
sudo systemctl start 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/vsftpd.conf。

sudo vim /etc/vsftpd/vsftpd.conf

FTP 本地用户

我们仅允许本地用户访问FTP服务器。搜索anonymous_enablelocal_enable指令并将anonymous_enable的值改为NO,local_enable的值改为YES。

anonymous_enable=NO
local_enable=YES
/etc/vsftpd/vsftpd.conf

启用上传

搜索write_enable并取消注释write_enable指令,允许文件系统的更改,例如上载和删除文件。

write_enable=YES
/etc/vsftpd/vsftpd.conf

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
/etc/vsftpd/vsftpd.conf

被动 FTP 连接

默认情况下,VSFTPD使用主动模式。要使用被动模式,请设置端口的最小和最大范围。

您可以使用任何端口进行被动的FTP连接。启用被动模式时,FTP客户端在所选范围内的随机端口上打开与服务器的连接。

pasv_min_port=30000
pasv_max_port=31000
/etc/vsftpd/vsftpd.conf

限制用户登录

您可以配置VSFTPD以仅允许某些用户登录。要执行此操作,请在文件末尾添加以下配置。

当启用这些选项时,您需要明确将用户名添加到/etc/vsftpd/vsftpd.user_allow_list文件来指定允许登录的用户。

该文件每一行用户,仅可指定一个用户名。vsftpd.user_allow_lis文件默认是不存在的,你可以使用vim命令创建文件/etc/vsftpd/vsftpd.user_allow_list

userlist_enable表示启用用户列表,userlist_file表示指定用户列表的文件,文件的名称可以你喜欢的任何名称。

userlist_deny指定是允许用户列表的用户还是拒绝用户列表的用户。

userlist_deny的值为NO时,这将会拒绝所有用户。仅在用户列表文件的用户是允许的。

userlist_deny的值为YES时,这将会允许所有用户,仅在用户列表文件的用户是拒绝的。

注意:用户名是Linux系统的用户名,也就是说使用useradd命令创建的用户。

userlist_enable=YES
userlist_file=/etc/vsftpd/vsftpd.user_allow_list
userlist_deny=NO
/etc/vsftpd/vsftpd.conf

重启 vsftpd 服务

这是本教程的vsftpd配置文件。这将配置vsftpd限制用户在其家目录中,允许用户上传文件到家目录任何文件夹。

仅允许指定用户可以访问FTP服务器,你可以在/etc/vsftpd/vsftpd.user_allow_list文件添加允许的用户。

当完成配置后,保存文件并退出vim。然后运行命令sudo systemctl restart vsftpd重启vsftpd服务。

如果你遇到Response: 500 OOPS: chroot的错误,这是因为SELinux阻止vsftpd对家目录的访问。

但是需要注意一点是在较新版本的 CentOS/RHEL 中,Selinux ftp_home_dir变量已被删除。

如果你尝试设置ftp_home_dir的值,你将会遇到Boolean ftp_home_dir is not defined的错误。

因此,您可以设置ftpd_full_access变量,解决此SELinux问题。运行命令sudo setsebool -P ftpd_full_access on

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
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/vsftpd.user_allow_list
userlist_deny=NO
/etc/vsftpd/vsftpd.conf
sudo setsebool -P ftpd_full_access on

sudo systemctl restart vsftpd

设置防火墙

如果您正在运行Firewalld防火墙,您需要允许FTP流量。打开FTP命令端口21,FTP数据端口端口20和被动端口范围30000-31000,运行firewall-cmd命令。

为了避免被锁定,确保SSH打开端口22。然后重新载如firewall来重新加载防火墙规则。

运行命令sudo firewall-cmd --reload。你也可以运行命令sudo firewall-cmd --zone=public --list-all查看对防火墙的更改。

sudo firewall-cmd --permanent --add-port=20-21/tcp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp
sudo firewall-cmd --permanent --zone=public --add-service=ssh

sudo firewall-cmd --reload

禁用 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

结论

我们向您展示如何在CentOS 7安装和配置FTP服务器。如果您有任何问题或反馈,请随时留下评论。