前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >如何在 CentOS 8 上使用 Vsftpd 配置 FTP 服务器

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

作者头像
雪梦科技
发布于 2020-05-11 06:31:51
发布于 2020-05-11 06:31:51
3.2K00
代码可运行
举报
文章被收录于专栏:ITCoderITCoder
运行总次数:0
代码可运行

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 权限的用户身份运行下面的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo dnf install vsftpd

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl enable vsftpd --now

验证服务器状态:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl status vsftpd

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
● 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 配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo nano /etc/vsftpd/vsftpd.conf

2.1 FTP Access

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
anonymous_enable=NO
local_enable=YES

2.2 允许上传

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
write_enable=YES

2.3 Chroot Jail

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chroot_local_user=YES

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

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

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

2.4 FTP 被动模式

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pasv_min_port=30000
pasv_max_port=31000

2.5 限制用户登录

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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年有效期的自签名证书。私钥和证书都被保存在同一个文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem

一旦 SSL 证书被创建,打开 vsftpd 配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo nano /etc/vsftpd/vsftpd.conf

找到rsa_cert_filersa_private_key_file 指令,修改它们的值到pam文件路径 并且设置ssl_enable指令到YES:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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(排除注释)应该看起来像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 服务 使修改生效:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl restart vsftpd

三、 打开防火墙

如果你正在运行 FTP 服务器,你需要允许 FTP 流量通过防火墙。

打开21端口(FTP 命令端口),20端口(FTP 数据端口) 和 30000-31000(被动模式端口范围),在你的防火墙中,输入下面的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo firewall-cmd --permanent --add-port=20-21/tcp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp

输入下面的命令,重新加载防火墙规则:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
firewall-cmd --reload

四、创建一个 FTP 用户

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo adduser newftpuser

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo passwd newftpuser

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo "newftpuser" | sudo tee -a /etc/vsftpd/user_list

03.创建 FTP 目录树,并且设置正确的权限:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 并且使它可执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo "/bin/ftponly" | sudo tee -a /etc/shells

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo usermod newftpuser -s /bin/ftponly

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

六、 总结

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年03月31日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何在Debian 9上为用户目录设置vsftpd
FTP是文件传输协议的缩写,是一种曾经广泛用于在客户端和服务器之间移动文件的网络协议。它已被更快,更安全,更方便的文件传输方式所取代。很多休闲互联网用户希望直接从他们的Web浏览器下载https,命令行用户更容易使用的安全协议,如scp或SFTP。
丰一川
2018/11/05
2.9K0
FTP服务器
FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。
胡齐
2019/09/23
13K0
FTP服务器
如何在Ubuntu 16.04上为用户目录设置vsftpd
FTP是文件传输协议的缩写,是一种曾经广泛用于在客户端和服务器之间移动文件的网络协议。它已被更快,更安全,更方便的文件传输方式所取代。许多休闲网民希望直接用https从他们的Web浏览器下载它,而且命令行用户更容易去使用安全的协议,如scp或SFTP。
GeekZ
2018/10/25
2.3K0
Linux云服务器下搭建FTP服务器
FTP工作模式简介 FTP工作会启动两个通道:控制通道和数据通道。 控制通道一般由客户端发起,数据连接分两种:port(主动)和pasv(被动)。 PORT模式: 在客户端需要接收数据时,ftp_cl
吴奇
2017/03/06
17.8K0
如何在Ubuntu 18.04上为用户目录设置vsftpd
FTP是文件传输协议的缩写,是一种曾经广泛用于在客户端和服务器之间移动文件的网络协议。它已被更快,更安全,更方便的文件传输方式所取代。许多普通网民希望通过https直接从他们的网络浏览器下载,命令行用户更有可能使用安全协议,如scp或SFTP。
葡萄
2018/08/08
2.8K0
配置VSFTP文件服务器
FTP 文件传输协议.用于互联网上的控制文件的双向传输,使用FTP来传输时,其实是具有一定程度的危险性,因为数据在因特网上面是完全没有受到保护的明文传输方式,VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,从名称定义上基本可以看出,这是为了解决ftp传输安全性问题的.
微软技术分享
2022/12/28
6.1K0
配置VSFTP文件服务器
如何在Ubuntu 18.04上使用VSFTP快速设置FTP服务器
如果你想将应用程序迁移到最新版本Ubuntu Linux服务器中,并且需要快速启动并运行FTP服务器。如何操作?这实际上非常简单。这里将使用VSFTP服务器向您展示如何做到这一点。
星哥玩云
2022/07/14
1.9K0
CentOS 6.5基于AD域账号联动认证的vsftpd结合SSL加密服务器配置
二、实施步骤: 1、系统基础设置 计算机名、IP地址、网关、子网掩码、DNS设置 2、安装所需要的软件 Yum install httpd -y Yum install vsftpd* -y Yum install pam* -y Yum install mod_ssl* -y
星哥玩云
2022/06/30
9580
ubuntu下部署FTP服务器
FTP是TCP/IP协议组中的协议之一,即文件传输协议,工作在TCP模型的第四层(应用层),使用TCP传输使用交互式的访问,允许客户端指定文件类型和格式,一般为ASCII码和文本格式。
dogfei
2020/07/31
2.4K1
Ubuntu 16.04 配置vsftpd使用 ssl 传输
1、创建证书 $ sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem 2、配置 vsftpd $ sudo vim /etc/vsftpd.conf 替换证书: rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/pri
前Thoughtworks-杨焱
2021/12/08
4730
关于FTP搭建问题
1. 匿名服务器的连接(独立的服务器) 在/etc/vsftpd.conf(或在/etc/vsftpd/vsftpd.conf)配置文件中添加如下几项: Anonymous_enable=yes (允许匿名登陆) Dirmessage_enable=yes (切换目录时,显示目录下.message的内容) Local_umask=022 (FTP上本地的文件权限,默认是077) Connect_form_port_20=yes (启用FTP数据端口的数据连接)* Xferlog_enable=yes (激活上传和下载的日志) Xferlog_std_format=yes (使用标准的日志格式) Ftpd_banner=XXXXX (欢迎信息) Pam_service_name=vsftpd (验证方式)* Listen=yes (独立的VSFTPD服务器)* 注释:以上配置只能连接FTP服务器,不能上传和下载 注:其中所有和日志欢迎信息相关连的都是可选项,打了星号的无论什么帐户都要添加,是属于FTP的基本选项
云知识Online
2018/05/03
2.5K0
网络系统管理Linux环境——StorageSrv之VSFTPD
禁止使用不安全的 FTP,请使用“CSK Global Root CA”证书颁发机构,颁发的证书,启用 FTPS 服务;
冷影玺
2023/10/11
4220
网络系统管理Linux环境——StorageSrv之VSFTPD
ubuntu 16.04 搭建ftp服务器
如果登录后出现如下错误,则在/etc/vsftpd.conf文件内添加allow_writeable_chroot=YES
全栈程序员站长
2022/09/14
1.6K0
Linux下FTP虚拟账号环境部署总结
vsftp的用户有三种类型:匿名用户、系统用户、虚拟用户。 1)匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous。 2)本地用户登录:使用系统用户登录,在/etc/passwd中。 3)虚拟用户登录:这是FTP专有用户,有两种方式实现虚拟用户,本地数据文件和数据库服务器。 FTP虚拟用户是FTP服务器的专有用户,使用虚拟用户账号可以提供集中管理的FTP根目录,方便了管理员的管理,同时将用于FTP登录的用户名、密码与系统用户账号区别开,进一步增强了FTP服务器的安全性。某种意义上来说
洗尽了浮华
2018/01/22
4.8K0
Linux下FTP虚拟账号环境部署总结
CentOS7安装vsftpd
本地用户的主目录有时候并不能作为ftp的根目录,也可以对每个用户设置设置FTP根目录
十毛
2023/10/16
6290
Ubuntu Server 第九章 文件服务
在文件服务之前,先提下网络。网络是一个意外的产物,最早在美国国防部提出,出于战争的需要,担心军事指挥中心被摧毁,设计了一套去中心化的系统(APPAnet)。NSF利用APPanet发展出来的TCP/IP通讯协议,建立的NTFnet广域网,后来越来越多的组织接入使NSfnet成为Internet的骨干网之一。总结一下
天钧
2019/07/25
1.6K0
Ubuntu Server 第九章 文件服务
在Ubuntu系统上搭建Ftp服务器,并传输文件
新建 /etc/vsftpd.chroot_list 文件,在里面添加登录ftp服务器的linux用户
AnieaLanie
2021/12/27
10.5K0
CentOS7下搭建vsftpd服务器(本地用户模式)
anonymous_enable=NO #禁止匿名登录FTP服务器
yuanfan2012
2020/04/26
4.6K0
CentOS7下vsftpd over SSL/TLS加密传输配置实践
之前有介绍过CentOS下搭建vsftpd服务器,可以参考如下文章 CentOS7下搭建vsftpd服务器(本地用户模式) 下面开启SSL/TLS用于FTP安全加密传输 1、生成自签证书 cd /etc/pki/tls/certs/ openssl req -x509 -nodes -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem -days 365 [root@VM_Server ~]# cd /etc/pki/tls/certs/ [roo
yuanfan2012
2020/08/13
2.1K0
CentOS7下vsftpd over SSL/TLS加密传输配置实践
Linux搭建FTP服务器
注:ftpusers和user_list两个文件可理解为vsftp的黑名单,可在vsftpd.conf中开启userlist_deny参数即可生效,无论如何,我们创建的ftp用户不在这两个文件中即可保证可以正常使用。
用户6914340
2021/10/09
15.8K0
Linux搭建FTP服务器
相关推荐
如何在Debian 9上为用户目录设置vsftpd
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验