步骤 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

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

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

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

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

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

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

chroot_local_user=YES
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=1097775ftp_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、 现在是时候测试我们上面的设置是否可以工作了。让我们使用匿名登录测试,我们可以从下面的截图看到匿名登录没有被允许。

# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : anonymous
530 Permission denied.
Login failed.
ftp>

测试 FTP 匿名登录

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

# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : aaronkilik
530 Permission denied.
Login failed.
ftp>

FTP 用户登录失败

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

# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
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 目录。

# ftp 192.168.56.10
Connected to 192.168.56.10 (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

FTP 用户家目录登录成功

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

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

via: http://www.tecmint.com/install-ftp-server-in-centos-7/

作者:Aaron Kili 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如何在 CentOS 7 中安装、配置和安全加固 FTP 服务的更多相关文章

  1. 如何在CentOS系统中安装配置SNMP服务

    CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,现在有一大部分服务器在使用此操作系统:SNMP(简单网络 ...

  2. 如何在 CentOS 8 中安装 Cockpit Web 控制台

    如何在 CentOS 8 中安装 Cockpit Web 控制台 [日期:2019-10-31] 来源:Linux公社  作者:醉落红尘 [字体:大 中 小]   在本文中,我们将帮助您在CentOS ...

  3. 如何在CentOS 7中安装最新Git(源码安装)

    如何在CentOS 7中安装最新Git 2017年05月20日 11:49:53 阅读数:1624 Git是在今天的软件开发行业一个非常有用的版本控制工具.我一直使用Git.于是为Linux公社的读者 ...

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

    虽然有些人使用 Linux 来表示整个操作系统,但要注意的是,严格地来说,Linux 只是个内核.另一方面,发行版是一个完整功能的系统,它建立在内核之上,具有各种各样的应用程序工具和库. 在正常操作期 ...

  5. 在CentOS 7中安装配置JDK8

    为什么80%的码农都做不了架构师?>>>   ###说明 参考博客:http://blog.csdn.net/czmchen/article/details/41047187 系统环 ...

  6. 【转】如何在CentOS/RHEL中安装基于Web的监控系统 linux-das

    Linux-dash是一款为Linux设计的基于Web的轻量级监控面板.这个程序会实时显示各种不同的系统属性,比如CPU负载.RAM使用率.磁盘使用率.网速.网络连接.RX/TX带宽.登录用户.运行的 ...

  7. 在阿里云的CentOS环境中安装配置MySQL、JDK、Maven

    Welcome to Alibaba Cloud Elastic Compute Service ! [root@izbp19stm1x1k2io1e7r3tz ~]# rpm -Uvh http:/ ...

  8. CentOS 7中安装和配置Promethues

    Prometheus 是什么? Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的.随着发展,越来越多公司和组织接受采用Prome ...

  9. 在CentOS 7中安装nginx服务器

    简要地介绍一下,如何在CentOS 7中安装nginx服务器  下载对应当前系统版本的nginx包(package) # wget  http://nginx.org/packages/centos/ ...

随机推荐

  1. python接口自动化6-重定向(Location)

    前言 某屌丝男A鼓起勇气向女神B打电话表白,女神B是个心机婊觉得屌丝男A是好人,不想直接拒绝于是设置呼叫转移给闺蜜C了,最终屌丝男A和女神闺蜜C表白成功了,这种场景其实就是重定向了. 一.重定向 1. ...

  2. [翻译] Fast Image Cache

    https://github.com/path/FastImageCache Fast Image Cache is an efficient, persistent, and—above all—f ...

  3. Android之使用XMLPull解析xml(二)

    转自:http://www.blogjava.net/sxyx2008/archive/2010/08/04/327885.html 介绍下在Android中极力推荐的xmlpull方式解析xml.x ...

  4. CRFPP/CRF++编译安装与部署

    CRFPP/CRF++编译安装与部署 下载CRF++ https://taku910.github.io/crfpp/#download 说明:在上面网站中下载CRF++ 0.58 解压 tar zx ...

  5. JTS(Geometry)(转)

    原文链接:http://blog.csdn.net/cdl2008sky/article/details/7268577 空间数据模型(1).JTS Geometry model (2).ISO Ge ...

  6. Redis中对Key进行分类

    使用":"体现层次 >set key1:key2:key4 value1 "OK" >set key1:key2:key5 value2 " ...

  7. C语言:通过函数指针来完成两个数的加减乘除

    // //  main.c //  Function_pointer // //  Created by mac on 15/8/2. //  Copyright (c) 2015年. All rig ...

  8. 远程视频监控之应用篇(mjpg-streamer)

    这篇文章将主要结合源码介绍mjpg-streamer,使小伙伴们了解视频监控的实现. 一.移植 tar xvf mjpg-streamer-r63.tar.gz cd mjpg-streamer-r6 ...

  9. iOS开发-多线程之GCD(Grand Central Dispatch)

    Grand Central Dispatch(GCD)是一个强有力的方式取执行多线程任务,不管你在回调的时候是异步或者同步的,可以优化应用程序支持多核心处理器和其他的对称多处理系统的系统.开发使用的过 ...

  10. CF 463D Gargari and Permutations [dp]

    给出一个长为n的数列的k个排列(1 ≤ n ≤ 1000; 2 ≤ k ≤ 5).求这个k个数列的最长公共子序列的长度 dp[i]=max{dp[j]+1,where j<i 且j,i相应的字符 ...