本文介绍在CentOS 8系统上安装和配置安全快速的FTP Server,将在CentOS 8上安装vsftpd(非常安全的Ftp守护程序),还将展示如何使用vsftpd以限制用户访问其主目录,以及如何使用SSL/TLS加密数据传输。额外建议:为了更安全、更快地进行数据传输,应使用SCP或SFTP。
在CentOS 8上安装vsftpd vsftpd软件包在默认的CentOS 8存储库中可用,要安装它,请以root或具有sudo特权的用户身份运行以下命令: sudo dnf install vsftpd 安装软件包后,启动vsftpd守护程序并使其在启动时自动启动: sudo systemctl enable vsftpd --now 验证服务状态: sudo systemctl status vsftpd 输出将类似于以下内容,表明vsftpd服务处于活动状态并正在运行:
使用vsftpd以配置FTP Server vsftpd服务器设置存储在/etc/vsftpd/vsftpd.conf配置文件中,大多数设置在文件中都有详细记录。 在以下各节中,我们将介绍配置安全的vsftpd安装所需的一些重要设置。 首先打开vsftpd配置文件: sudo nano /etc/vsftpd/vsftpd.conf 1.FTP访问 我们将仅允许本地用户访问FTP服务器,找到anonymous_enable和local_enable指令,并确保您的配置与以下行匹配,在/etc/vsftpd/vsftpd.conf文件中: /etc/vsftpd/vsftpd.conf anonymous_enable=NO local_enable=YES 2.启用上传 取消注释write_enable设置以允许更改文件系统,例如上载和删除文件,在/etc/vsftpd/vsftpd.conf文件中: /etc/vsftpd/vsftpd.conf write_enable=YES 3.Chroot Jail 通过取消注释chroot指令,防止FTP用户访问其主目录之外的任何文件,在/etc/vsftpd/vsftpd.conf文件中: chroot_local_user=YES 默认情况下,启用chroot时,如果用户锁定的目录是可写的,则vsftpd将拒绝上传文件,这是为了防止安全漏洞。 启用chroot时,请使用以下方法之一允许上传。 方法1、建议的允许上传的方法是保持chroot启用并配置FTP目录,在本教程中,我们将在用户主目录内创建一个ftp目录,它将用作chroot和一个可写的目录,用于上传文件,在/etc/vsftpd/vsftpd.conf文件中: user_sub_token=$USER local_root=/home/$USER/ftp 方法2、另一个选项是在vsftpd配置文件中添加以下指令,如果必须将用户的可写访问权限授予其主目录,请使用此选项,在/etc/vsftpd/vsftpd.conf文件中: allow_writeable_chroot=YES 4.被动FTP连接 vsftpd可以使用任何端口进行被动FTP连接,我们将指定端口的最小和最大范围,然后在防火墙中打开该范围。 将以下行添加到/etc/vsftpd/vsftpd.conf配置文件: pasv_min_port=30000 pasv_max_port=31000 5.限制用户登录 要仅允许某些用户登录FTP服务器,请在userlist_enable=YES行之后添加以下行,在/etc/vsftpd/vsftpd.conf文件中: userlist_file=/etc/vsftpd/user_list userlist_deny=NO 启用此选项后,需要通过将用户名添加到/etc/vsftpd/user_list文件(每行一个用户)来显式指定哪些用户可以登录。 6.使用SSL/TLS保护传输安全 为了使用SSL/TLS加密FTP传输,您需要具有SSL证书并配置FTP服务器以使用它。 您可以使用由受信任的证书颁发机构签名的现有SSL证书,也可以创建自签名证书。 如果您有指向FTP服务器IP地址的域或子域,则可以轻松生成免费的Let’s Encrypt SSL证书,可参考在CentOS 8服务器上用Let‘s Encrypt加密来保护Apache安全。 在本教程中,我们将使用openssl工具生成一个自签名SSL证书。 以下命令将创建一个有效期为10年的2048位私钥和自签名证书,私钥和证书都将保存在同一文件中: sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem 创建SSL证书后,打开vsftpd配置文件: sudo nano /etc/vsftpd/vsftpd.conf 找到rsa_cert_file和rsa_private_key_file指令,将其值更改为pam文件路径,并将ssl_enable指令设置为YES,在/etc/vsftpd/vsftpd.conf文件中: rsa_cert_file=/etc/vsftpd/vsftpd.pem rsa_private_key_file=/etc/vsftpd/vsftpd.pem ssl_enable=YES 如果没有另外指定,则FTP服务器将仅使用TLS建立安全连接。 7.重新启动vsftpd服务 完成编辑后,vsftpd配置文件(不包括注释)应如下所示,即/etc/vsftpd/vsftpd.conf文件: anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES chroot_local_user=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES userlist_file=/etc/vsftpd/user_list userlist_deny=NO tcp_wrappers=YES user_sub_token=$USER local_root=/home/$USER/ftp pasv_min_port=30000 pasv_max_port=31000 rsa_cert_file=/etc/vsftpd/vsftpd.pem rsa_private_key_file=/etc/vsftpd/vsftpd.pem ssl_enable=YES 保存文件并重新启动vsftpd服务,以使更改生效: sudo systemctl restart vsftpd
打开防火墙 如何在centos 8上配置和管理防火墙?如果您正在运行,则需要允许FTP流量。 要打开21端口(FTP命令端口),20端口(FTP数据端口)和30000-31000(被动端口范围),请在防火墙上输入以下命令: sudo firewall-cmd --permanent --add-port=20-21/tcp sudo firewall-cmd --permanent --add-port=30000-31000/tcp 通过输入以下命令重新加载防火墙规则: firewall-cmd --reload 参考:在CentOS 8系统上配置和管理防火墙(Firewall)的方法。
创建一个FTP用户 为了测试FTP Server,我们将创建一个新用户。 如果您已经有要授予FTP访问权限的用户,请跳过第一步。 如果在配置文件中设置allow_writeable_chroot=YES,请跳过第3步。 1、创建一个名为newftpuser的新用户: sudo adduser newftpuser 接下来,您需要设置用户密码: sudo passwd newftpuser 2、将用户添加到允许的FTP用户列表中: echo "newftpuser" | sudo tee -a /etc/vsftpd/user_list 3、创建FTP目录树并设置正确的权限: sudo mkdir -p /home/newftpuser/ftp/upload sudo chmod 550 /home/newftpuser/ftp sudo chmod 750 /home/newftpuser/ftp/upload sudo chown -R newftpuser: /home/newftpuser/ftp 用户将能够将其文件上传到ftp/upload目录。 此时,您的FTP Server已完全正常运行,您应该能够使用任何可配置为使用TLS加密的FTP客户端(例如FileZilla)连接到服务器。
禁用Shell访问 默认情况下,在创建用户时,如果未明确指定,则该用户将具有对服务器的SSH访问权限。 要禁用Shell程序访问,我们将创建一个新的Shell程序,该Shell程序将仅打印一条消息,告诉用户其帐户仅限于FTP访问。 运行以下命令来创建/bin/ftponly shell并使它可执行: echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly sudo chmod a+x /bin/ftponly 将新的shell附加到/etc/shells文件中的有效shell列表中: echo "/bin/ftponly" | sudo tee -a /etc/shells 将用户shell更改为/bin/ftponly: sudo usermod newftpuser -s /bin/ftponly 使用相同的命令为仅希望授予FTP访问权限的其他用户更改Shell程序。
相关主题 |