本教程介绍如何在CentOS 7使用安装和配置,用于在设备之间共享文件的FTP服务器。
FTP 文件传输协议,是用于将文件传输到远程网络的标准网络协议。 有几种可用于Linux的开源FTP服务器。
最着名和广泛使用的是pureftpd,Proftpd,VSFTPD。 我们将安装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_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/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
重启 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
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服务器。如果您有任何问题或反馈,请随时留下评论。