完全指南:如何在CentOS 7中安装、配置和安全加固FTP服务

FTP(文件传输协议)是一种用于通过网络在服务器和客户端之间传输文件的传统并广泛使用的标准工具,特别是在不需要身份验证的情况下(允许匿名用户连接到服务器)。我们必须明白,默认情况下 FTP 是不安全的,因为它不加密传输用户凭据和数据。

在本指南中,我们将介绍在 CentOS/RHEL7 和 Fedora 发行版中安装、配置和保护 FTP 服务器( VSFTPD 代表 “Very Secure FTP Daemon”)的步骤。

请注意,本指南中的所有命令将以 root 身份运行,如果你不使用 root 帐户操作服务器,请使用 sudo命令 获取 root 权限。

步骤 1:安装 FTP 服务器

1、 安装 vsftpd 服务器很直接,只要在终端运行下面的命令。


  1. # yum install vsftpd 

2、 安装完成后,服务先是被禁用的,因此我们需要手动启动,并设置在下次启动时自动启用:


  1. # systemctl start vsftpd 
  2. # systemctl enable vsftpd 

3、 接下来,为了允许从外部系统访问 FTP 服务,我们需要打开 FTP 守护进程监听的 21 端口:


  1. # firewall-cmd --zone=public --permanent --add-port=21/tcp 
  2. # firewall-cmd --zone=public --permanent --add-service=ftp 
  3. # firewall-cmd --reload 

步骤 2: 配置 FTP 服务器

4、 现在,我们会进行一些配置来设置并加密我们的 FTP 服务器,让我们先备份一下原始配置文件 /etc/vsftpd/vsftpd.conf:


  1. # cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig 

接下来,打开上面的文件,并将下面的选项设置相关的值:


  1. anonymous_enable=NO             ### 禁用匿名登录 
  2. local_enable=YES        ### 允许本地用户登录 
  3. write_enable=YES        ### 允许对文件系统做改动的 FTP 命令 
  4. local_umask=022             ### 本地用户创建文件所用的 umask 值 
  5. dirmessage_enable=YES           ### 当用户首次进入一个新目录时显示一个消息 
  6. xferlog_enable=YES      ### 用于记录上传、下载细节的日志文件 
  7. connect_from_port_20=YES        ### 使用端口 20 (ftp-data)用于 PORT 风格的连接 
  8. xferlog_std_format=YES          ### 使用标准的日志格式 
  9. listen=NO               ### 不要让 vsftpd 运行在独立模式 
  10. listen_ipv6=YES             ### vsftpd 将监听 IPv6 而不是 IPv4 
  11. pam_service_name=vsftpd         ###  vsftpd 使用的 PAM 服务名 
  12. userlist_enable=YES             ### vsftpd 支持载入用户列表 
  13. tcp_wrappers=YES        ### 使用 tcp wrappers 

5、 现在基于用户列表文件 /etc/vsftpd.userlist 来配置 FTP 来允许/拒绝用户的访问。

默认情况下,如果设置了 userlist_enable=YES,当 userlist_deny 选项设置为 YES 的时候,userlist_file=/etc/vsftpd.userlist 中列出的用户被拒绝登录。

然而, 更改配置为 userlist_deny=NO,意味着只有在 userlist_file=/etc/vsftpd.userlist 显式指定的用户才允许登录。


  1. userlist_enable=YES                   ### vsftpd 将从 userlist_file 给出的文件中载入用户名列表 
  2. userlist_file=/etc/vsftpd.userlist    ### 存储用户名的文件 
  3. userlist_deny=NO    

这并不是全部,当用户登录到 FTP 服务器时,它们会进入 chroot jail 中,这是仅作为 FTP 会话主目录的本地根目录。

接下来,我们将介绍如何将 FTP 用户 chroot 到 FTP 用户的家目录(本地 root)中的两种可能情况,如下所述。

6、 接下来添加下面的选项来限制 FTP 用户到它们自己的家目录。


  1. chroot_local_user=YES 
  2. allow_writeable_chroot=YES 

chroot_local_user=YES 意味着用户可以设置 chroot jail,默认是登录后的家目录。

同样默认的是,出于安全原因,vsftpd 不会允许 chroot jail 目录可写,然而,我们可以添加 allow_writeable_chroot=YES 来覆盖这个设置。

保存并关闭文件。

步骤 3: 用 SELinux 加密 FTP 服务器

7、现在,让我们设置下面的 SELinux 布尔值来允许 FTP 能读取用户家目录下的文件。请注意,这原本是使用以下命令完成的:


  1. # setsebool -P ftp_home_dir on 

然而,由于这个 bug 报告:https://bugzilla.redhat.com/show_bug.cgi?id=1097775,ftp_home_dir 指令默认是禁用的。

现在,我们会使用 semanage 命令来设置 SELinux 规则来允许 FTP 读取/写入用户的家目录。


  1. # semanage boolean -m ftpd_full_access --on 

这时,我们需要重启 vsftpd 来使目前的设置生效:


  1. # systemctl restart vsftpd 

步骤 4: 测试 FTP 服务器

8、 现在我们会用 useradd 命令创建一个 FTP 用户来测试 FTP 服务器。


  1. # useradd -m -c “Ravi Saive, CEO” -s /bin/bash ravi 
  2. # passwd ravi 

之后,我们如下使用 echo 命令添加用户 ravi 到文件 /etc/vsftpd.userlist 中:


  1. # echo "ravi" | tee -a /etc/vsftpd.userlist 
  2. # cat /etc/vsftpd.userlist 

9、 现在是时候测试我们上面的设置是否可以工作了。让我们使用匿名登录测试,我们可以从下面的截图看到匿名登录没有被允许。


  1. # ftp 192.168.56.10 
  2. Connected to 192.168.56.10  (192.168.56.10). 
  3. 220 Welcome to TecMint.com FTP service. 
  4. Name (192.168.56.10:root) : anonymous 
  5. 530 Permission denied. 
  6. Login failed. 
  7. ftp> 

测试 FTP 匿名登录

10、 让我们也测试一下没有列在 /etc/vsftpd.userlist 中的用户是否有权限登录,下面截图是没有列入的情况:


  1. # ftp 192.168.56.10 
  2. Connected to 192.168.56.10  (192.168.56.10). 
  3. 220 Welcome to TecMint.com FTP service. 
  4. Name (192.168.56.10:root) : aaronkilik 
  5. 530 Permission denied. 
  6. Login failed. 
  7. ftp> 

FTP 用户登录失败

11、 现在最后测试一下列在 /etc/vsftpd.userlist 中的用户是否在登录后真的进入了他/她的家目录:


  1. # ftp 192.168.56.10 
  2. Connected to 192.168.56.10  (192.168.56.10). 
  3. 220 Welcome to TecMint.com FTP service. 
  4. Name (192.168.56.10:root) : ravi 
  5. 331 Please specify the password. 
  6. Password: 
  7. 230 Login successful. 
  8. Remote system type is UNIX. 
  9. Using binary mode to transfer files. 
  10. ftp> ls 

用户成功登录

警告:使用 allow_writeable_chroot=YES 有一定的安全隐患,特别是用户具有上传权限或 shell 访问权限时。

只有当你完全知道你正做什么时才激活此选项。重要的是要注意,这些安全性影响并不是 vsftpd 特定的,它们适用于所有提供了将本地用户置于 chroot jail 中的 FTP 守护进程。

因此,我们将在下一节中看到一种更安全的方法来设置不同的不可写本地根目录。

步骤 5: 配置不同的 FTP 家目录

12、 再次打开 vsftpd 配置文件,并将下面不安全的选项注释掉:


  1. #allow_writeable_chroot=YES 

接着为用户(ravi,你的可能不同)创建另外一个替代根目录,并将所有用户对该目录的可写权限移除:


  1. # mkdir /home/ravi/ftp 
  2. # chown nobody:nobody /home/ravi/ftp 
  3. # chmod a-w /home/ravi/ftp 

13、 接下来,在用户存储他/她的文件的本地根目录下创建一个文件夹:


  1. # mkdir /home/ravi/ftp/files 
  2. # chown ravi:ravi  /home/ravi/ftp/files 
  3. # chmod 0700 /home/ravi/ftp/files/ 

接着在 vsftpd 配置文件中添加/修改这些选项:


  1. user_sub_token=$USER         ### 在本地根目录下插入用户名 
  2. local_root=/home/$USER/ftp   ### 定义任何用户的本地根目录 

保存并关闭文件。再说一次,有新的设置后,让我们重启服务:


  1. # systemctl restart vsftpd 

14、 现在最后在测试一次查看用户本地根目录就是我们在他的家目录创建的 FTP 目录。


  1. # ftp 192.168.56.10 
  2. Connected to 192.168.56.10  (192.168.56.10). 
  3. 220 Welcome to TecMint.com FTP service. 
  4. Name (192.168.56.10:root) : ravi 
  5. 331 Please specify the password. 
  6. Password: 
  7. 230 Login successful. 
  8. Remote system type is UNIX. 
  9. Using binary mode to transfer files. 
  10. ftp> ls 

FTP 用户家目录登录成功

就是这样了!在本文中,我们介绍了如何在 CentOS 7 中安装、配置以及加密的 FTP 服务器,使用下面的评论栏给我们回复,或者分享关于这个主题的任何有用信息。

建议阅读: 在 RHEL/CentOS 7 上安装 ProFTPD 服务器

在下一篇文章中,我们还将向你介绍如何在 CentOS 7 中保护使用 SSL/TLS连接的 FTP 服务器,再此之前,请继续关注 TecMint。

作者:Aaron Kili

来源:51CTO

时间: 2024-11-03 14:42:30

完全指南:如何在CentOS 7中安装、配置和安全加固FTP服务的相关文章

如何在CentOS/RHEL中安装基于Web的监控系统 linux-dash

如何在CentOS/RHEL中安装基于Web的监控系统 linux-dash Linux-dash是一款为Linux设计的基于web的轻量级监控面板.这个程序会实时显示各种不同的系统属性,比如CPU负载.RAM使用率.磁盘使用率.网速.网络连接.RX/TX带宽.登录用户.运行的进程等等.它不会存储长期的统计.因为它没有后端数据库. 本篇文章将会向你展示如何安装和设置Linux dash,这里所使用的web服务器是Nginx. 安装 首先我们要启用EPEL 仓库. 接下来,我们需要用下面的命令安装

如何在 CentOS 7 中安装或升级最新的内核

虽然有些人使用 Linux 来表示整个操作系统,但要注意的是,严格地来说,Linux 只是个内核.另一方面,发行版是一个完整功能的系统,它建立在内核之上,具有各种各样的应用程序工具和库. 在正常操作期间,内核负责执行两个重要任务: 作为硬件和系统上运行的软件之间的接口. 尽可能高效地管理系统资源. 为此,内核通过内置的驱动程序或以后可作为模块安装的驱动程序与硬件通信. 例如,当你计算机上运行的程序想要连接到无线网络时,它会将该请求提交给内核,后者又会使用正确的驱动程序连接到网络. 建议阅读: 如

如何在CentOS 7中安装或升级最新的内核

虽然有些人使用 Linux 来表示整个操作系统,但要注意的是,严格地来说,Linux 只是个内核.另一方面,发行版是一个完整功能的系统,它建立在内核之上,具有各种各样的应用程序工具和库. 在正常操作期间,内核负责执行两个重要任务: 作为硬件和系统上运行的软件之间的接口. 尽可能高效地管理系统资源. 为此,内核通过内置的驱动程序或以后可作为模块安装的驱动程序与硬件通信. 例如,当你计算机上运行的程序想要连接到无线网络时,它会将该请求提交给内核,后者又会使用正确的驱动程序连接到网络. 建议阅读: 如

如何在Centos server中安装domino 9 附加服务器

在Linux系统上安装Domino Server是一个小小的挑战,其实并没有大家想想的复杂,既然是商业性的软件,OEM早就为我们解决了安装的难度,还有就是选择自己熟悉的Linux发行版,各个发行版操作上还是有一定的区别的,这里选择最新的Centos 6,尽量在Server版本的Centos上安装,虽然说Desktop版本也可以 环境介绍: Hostname:gavin-mail01.gavin.com Ip:192.168.110.10 Roles:windows2008R2 Domino Se

CentOS系统中安装配置Apache+PHP+MySQL环境

  首先下载软件; [root@localhost ]# wget http://apache.mirror.phpchina.com/httpd/httpd-2.2.9.tar.gz --00:47:30-- http://apache.mirror.phpchina.com/httpd/httpd-2.2.9.tar.gz Resolving apache.mirror.phpchina.com... 221.194.139.225 Connecting to apache.mirror.p

在阿里云的CentOS环境中安装配置MySQL的教程_Mysql

1 常规错误的yum安装方法: 在前文中记述了CentOS 6.5系统中通过yum方式快速地搭建了LNMP环境,那么是否也能在CentOS 7或CentOS 7.1系统中依葫芦画瓢安装MySql5.6.24呢?答案是否定的. [root@typecodes ~]# yum -y install mysql mysql-server mysql-devel ...................... ....省略部分安装过程.... ...................... Installe

如何在Portal环境中安装配置IBM Business Process Manager小部件

这允许您在单个 Web 门户页面中构建统一的 portlet 和小部件环境,从而在门户页面中运行 BPM 流程和任务. IBM Business Process Manager http://www.aliyun.com/zixun/aggregation/3415.html">Advanced V7.5 包含 WebSphere V7.5 提供的 Business Space(将来也会包含 Business Space),为跨 IBM Business Process Managemen

在CentOS 7中安装Jetty服务器

在CentOS 7中安装Jetty服务器 Jetty 是一款纯Java的HTTP (Web) 服务器和Java Servlet容器. 通常在更大的网络框架中,Jetty经常用于设备间的通信,而其他Web服务器通常给"人类"传递文件 :D.Jetty是一个Eclipse基金会的免费开源项目.这个Web服务器用于如Apache ActiveMQ. Alfresco. Apache Geronimo. Apache Maven. Apache Spark.Google App Engine.

如何在 CentOS 7 中使用 Nginx 和 PHP7-FPM 安装 Nextcloud

Nextcloud 是一款自由 (开源) 的类 Dropbox 软件,由 ownCloud 分支演化形成.它使用 PHP 和 JavaScript 编写,支持多种数据库系统,比如 MySQL/MariaDB.PostgreSQL.Oracle 数据库和 SQLite.它可以使你的桌面系统和云服务器中的文件保持同步,Nextcloud 为 Windows.Linux.Mac.安卓以及苹果手机都提供了客户端支持.Nextcloud 并非只是 Dropbox 的克隆,它还提供了很多附加特性,如日历.联