如何在 CentOS 8 上使用 Vsftpd 配置 FTP 服务器

本文最先发布在:https://www.itcoder.tech/posts/how-to-setup-ftp-server-with-vsftpd-on-centos-8/

FTP (文件传输协议) 是一个客户端-服务端 网络协议,它允许用户在本地客户端和远程服务器之间传输文件。

在 Linux 上有很多开源的 FTP 服务器可用。最流行并且最常被使用的服务器包括PureFTPd, ProFTPD, and vsftpd.

在这篇指南中,我们将会在 CentOS 8 上安装 vsftpd (Very Secure Ftp Daemon)。它是一个稳定的,安全的,并且快速的 FTP 服务器。我们将会向你展示如何配置 vsftpd 来限制用户访问他们的主目录,并且使用 SSL/TLS 来加密数据传输。

一、 在 CentOS 8 上安装 vsftpd

vsftpd 软件包在默认的 CentOS 源仓库中可用。想要安装它,以 root 或者其他有 sudo 权限的用户身份运行下面的命令:

sudo dnf install vsftpd

一旦软件包被安装,启动 vsftpd 守护程序,并且启用开机自动启动:

sudo systemctl enable vsftpd --now

验证服务器状态:

sudo systemctl status vsftpd

输出将会像下面这样,显示 vsftpd 服务已经激活并且运行:

● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-03-30 15:16:51 EDT; 10s ago
  Process: 2880 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
  ...

二、 配置 vsftpd

vsftpd 设置被存储在/etc/vsftpd/vsftpd.conf配置文件中。 文件中的大部分设置都在文档中有详细说明。想要查看所有的选项,浏览 vsftpd 官方网站页面

在下面的章节中,我们将会一起看看一些配置vsftpd安全性相关的重要的设置。

打开 vsftpd 配置文件:

sudo nano /etc/vsftpd/vsftpd.conf

2.1 FTP Access

我们仅仅允许本地用户可以访问 FTP 服务器,找到 anonymous_enablelocal_enable 指令,并且确保你的配置像下面这样:

anonymous_enable=NO
local_enable=YES

2.2 允许上传

取消write_enable的注释,允许对文件系统的修改,例如 上传或者删除文件。

write_enable=YES

2.3 Chroot Jail

通过取消chroot指令的注释,阻止 FTP 用户 访问任何他们主目录外的文件。

chroot_local_user=YES

默认情况下,当chroot启用时,如果用户不允许写入一个文件夹,那么 vsftpd 会拒绝用户上传文件到该目录。 这是为了防止出现安全问题。

chroot被启用时,使用下面的任何一种方法来允许上传。

  • 方法一 - 这是通过启用chroot并且配置FTP目录来允许上传的一种推荐方式。在这个指南中,我们将会在用户主目录创建一个ftp目录,这个目录将会充当 chroot 并且一个可写的uploads目录用于上传文件。
user_sub_token=$USER
local_root=/home/$USER/ftp
  • 方法二 - 另一个选项就是在 vsftpd 配置文件中添加下面的指令。 使用这个选项,你必须授权你的用户对他的主目录写权限。
allow_writeable_chroot=YES

2.4 FTP 被动模式

vsftpd 可以使用 FTP 被动模式连接的任何端口。 我们将会指令一个最小端口和最大端口,稍后还要在防火墙中打开这个端口范围。

在配置文件中添加下面的行:

pasv_min_port=30000
pasv_max_port=31000

2.5 限制用户登录

想要允许指定用户登录 FTP 服务器,在userlist_enable=YES一行下面添加下面的配置:

userlist_file=/etc/vsftpd/user_list
userlist_deny=NO

当这个选项启用时,你需要通过将用户名添加到/etc/vsftpd/user_list(一个用户一行)来明确指定哪些用户可以登录。

2.6 使用 SSL/TLS 加密传输

为了使用 SSL/TLS 加密 FTP 传输, 你需要一个 SSL 证书,并且配置 FTP 服务器使用它。

你可以使用一个由可信证书授权商颁发的SSL 证书或者创建一个 自建证书。

如果你由一个域名或者一个子域名指向 FTP 服务器的公网 IP 地址,你可以很容易生成一个免费的Let’s Encrypt SSL证书。

在这个指南中,我们将会使用openssl生成一个自签名的 SSL 证书。

下面的命令将会创建一个2048位的私钥 和 10年有效期的自签名证书。私钥和证书都被保存在同一个文件:

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_filersa_private_key_file 指令,修改它们的值到pam文件路径 并且设置ssl_enable指令到YES:

rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES

如果没有指定其他的,那么 FTP 服务器将会仅仅使用 TLS 来进行安全连接。

2.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

三、 打开防火墙

如果你正在运行 FTP 服务器,你需要允许 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

四、创建一个 FTP 用户

想要测试 FTP 服务器,你需要创建一个新用户。

  • 如果你已经拥有一个用户,你仅仅需要让他可以访问 FTP 访问,跳过第一步。
  • 如果你在配置中设置allow_writeable_chroot=YES,跳过第三部。

01.创建一个新用户,名称为newftpuser:

sudo adduser newftpuser

下一步,你需要设置用户密码:

sudo passwd newftpuser

02.添加用户到允许的 FTP 用户列表:

echo "newftpuser" | sudo tee -a /etc/vsftpd/user_list

03.创建 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 服务器完全可用,并且你可以使用任何可以配置 TLS 加密的 FTP客户端,例如 FileZilla 来连接你的 FTP 服务器。

五、禁用 Shell 访问

默认情况下,当创建一个用户时,如果没有明显的指定,这个用户将可以通过 SSH 访问到服务器。

想要禁用 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文件中:

echo "/bin/ftponly" | sudo tee -a /etc/shells

修改这个用户 shell 到/bin/ftponly:

sudo usermod newftpuser -s /bin/ftponly

使用同样的命令来修改其他用户的 shell,限制他们仅仅只能通过 FTP 访问。

六、 总结

我们已经向你展示了如何在 CentOS 8 上安装和配置一个安全并且快速的 FTP 服务器。

想要更安全,更快速的数据传输,你应该使用 SCP 或者 SFTP

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容

  • FTP服务概述 简单FTP构建及访问 VSFTP服务基础 用户禁锢、黑白名单 FTP并发及带宽限制 一、FTP服务...
    紫_轩阅读 7,583评论 3 25
  • vsftpd.conf 部分:文件格式(5)索引 返回主要内容 名称 vsftpd.conf - vsftpd的配...
    张龙象阅读 2,269评论 0 1
  • 图片更清晰,文字在最下面 FTP是TCP/IP的一种应用,使用TCP而不是UDP,所以是可靠的,面向连接的。 FT...
    停下浮躁的心阅读 1,691评论 0 4
  • #################匿名权限控制############### anonymous_enable=Y...
    牧民阅读 4,475评论 2 4
  • 利用我们前面讲过的“认识你自己”模型,找到了自己的职业定位,结果发现目前的岗位不适合自己,是不是一定得换工作,跳槽...
    happy的芋头阅读 496评论 0 10