CentOS 8FTP服务器
FTP(文件传输协议)是一种客户端-服务器网络协议,允许用户在远程计算机之间传输文件。这里有很多可用于Linux的开源FTP服务软件,最流行最常用的FTP服务软件有 PureFTPd, ProFTPD, 和 vsftpd。在本教程中,我们将在CentOS 8[4]上安装vsftpd(非常安全的Ftp守护程序)。这是一个稳定,安全且快速的FTP服务器。我们还将向您展示如何配置vsftpd以限制用户访问其主目录,以及如何使用SSL / TLS加密数据传输。
vsftpd的安装包默认包含在CentOS软件仓库中,要安装它,只需用root帐号或拥有sudo权限的帐号运行如下命令:
#root帐号运行
dnf install vsftpd
#具有sudo权限的非root帐号运行
sudo dnf install vsftpd
一旦软件包安装完成,可以通过如下命令启动vsftpd守护进程并设置vsftpd在系统启动时启动。
sudo systemctl enable vsftpd --now
验证vsftpd服务状态:
sudo systemctl status vsftpd
命令输出结果类似如下,显示vsftpd服务处于活动状态并且正在运行:
● vsftpd.service - Vsftpd ftp daemonLoaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)Active: active (running) since Mon 2020-03-30 15:16:51 EDT; 10s agoProcess: 2880 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
(code=exited, status=0/SUCCESS) ...
配置vsftpd
vsftpd服务的配置存放在/etc/vsftpd/vsftpd.conf配置文件中。大多数配置在文件中都有详细的记录。有关所有配置选项可以参看官网的vsftpd配置说明页面。在下面内容中,我们将介绍配置安全的vsftpd安装所需要的一些重要的配置。
先从打开vsftpd配置文件开始:
sudo vim /etc/vsftpd/vsftpd.conf
FTP 访问控制
我们将仅允许本地用户访问FTP服务器,在配置文件中找到anonymous_enable和local_enable配置项,并确保您的配置与以下行一致:
sudo vim /etc/vsftpd.conf
anonymous_enable=NO
local_enable=YES
启用上传
取消注释write_enable配置项将允许你对系统文件进行更改,例如上传和删除文件。
sudo vim /etc/vsftpd.conf
write_enable=YES
控制访问范围
通过取消chroot配置项,防止FTP用户访问其主目录之外的任何文件。
sudo vim /etc/vsftpd.conf
chroot_local_user=YES
默认情况下,启用chroot时,如果用户锁定的目录是可写的,则vsftpd将拒绝上传文件。这样做是为了防止有安全漏洞。
启用chroot时,可以使用下面任意一种方法允许文件上传。
方法一
推荐允许上传的方法是保持chroot配置的启用情况下配置FTP目录。在本教程中,我们将在用户主目录里创建一个ftp目录。该目录将用作chroot和可写入的uploads目录以上传文件。
sudo vim /etc/vsftpd.conf
user_sub_token=$USER
local_root=/home/$USER/ftp
方法二
这个方法是在vsftpd中添加allow_writeable_chroot配置项。如果必须将用户的可写访问权限授予其主目录,可以使用此选项。
sudo vim /etc/vsftpd/vsftpd.conf
allow_writeable_chroot=YES
被动FTP连接
vsftpd可以使用任何端口进行被动FTP连接。我们将指定端口的最小和最大范围,然后在防火墙中打开该范围。
在vsftpd配置文件中添加如下配置:
sudo vim /etc/vsftpd/vsftpd.conf
pasv_min_port=30000
pasv_max_port=31000
限制用户登录
要仅允许某些用户登录FTP服务器,请在配置文件中userlist_enable = YES行之后添加以下行:
sudo vim /etc/vsftpd/vsftpd.conf
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
启用此选项后,您需要通过将用户名添加到/etc/vsftpd/user_list文件(每行一个用户)中来明确指定哪些用户可以登录。
使用 SSL/TLS 保护传输安全
为了使用SSL/TLS保护传输安全,你需要一个SSL证书并配置FTP 服务器使用该证书。您可以使用由受信任的证书颁发机构签名的现有SSL证书,也可以创建自签名证书。如果你有一个执行服务器IP的域名或者子域,则可以轻松生成一个免费的Let‘s Encrypt证书。在本教程中,我们将使用“ 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选项,将其值更改为pem文件路径,并将ssl_enable指令设置为YES:
sudo vim /etc/vsftpd/vsftpd.conf
rsa_cert_file=/etc/vsftpd/vsftpd.pemrsa_private_key_file=/etc/vsftpd/vsftpd.pemssl_enable=YES
重启vsftpd服务
你完成配置文件编辑后,你的配置文件内容将会类似下面内容:
vim /ec/vsftpd/vsftpd.conf
anonymous_enable=NOlocal_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=vsftpduser
list_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
创建一个FTP用户
为了测试FTP服务器,我们将创建一个新用户。
- 如果您已经有要授予FTP访问权限的用户,请跳过第一步。
- 如果在配置文件中设置
allow_writeable_chroot = YES,请跳过第三步。
- 创建一个名为newftpuser的用户:
sudo adduser newftpuser
sudo passwd newftpuser
- 添加用户到允许ftp的用户列表
echo "newftpuser" | sudo tee -a /etc/vsftpd/user_list
- 创建ftp目录并配置正确的权限
sudo mkdir -p /home/newftpuser/ftp/uploadsudo
chmod 550 /home/newftpuser/ftpsudo
chmod 750 /home/newftpuser/ftp/uploadsudo
chown -R newftpuser: /home/newftpuser/ftp
禁止shell访问
默认情况下,在创建用户时,如果未明确指定,则该用户将具有对服务器的SSH访问权限。
要禁用shell程序访问,我们将创建一个新的shell程序,该shell程序将仅打印一条消息,告诉用户其帐户仅限于FTP访问。
echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' |
sudo tee -a /bin/ftponlysudo chmod a+x /bin/ftponly
运行以下命令来创建/bin/ftponly 并使它可执行:
echo "/bin/ftponly" | sudo tee -a /etc/shells
将用户shell更改为/bin/ftponly:
sudo usermod newftpuser -s /bin/ftponly
使用相同的命令为仅希望授予FTP访问权限的其他用户更改shell程序。
相关文章:
CentOS 8FTP服务器
FTP(文件传输协议)是一种客户端-服务器网络协议,允许用户在远程计算机之间传输文件。这里有很多可用于Linux的开源FTP服务软件,最流行最常用的FTP服务软件有 PureFTPd, ProFTPD, 和 vsftpd。在本教程中,我们将在CentOS…...
C++ | Leetcode C++题解之第385题迷你语法分析器
题目: 题解: class Solution { public:NestedInteger deserialize(string s) {if (s[0] ! [) {return NestedInteger(stoi(s));}stack<NestedInteger> st;int num 0;bool negative false;for (int i 0; i < s.size(); i) {char c s[i];if …...
【软件设计师真题】第一大题---数据流图设计
解答数据流图的题目关键在于细心。 考试时一定要仔细阅读题目说明和给出的流程图。另外,解题时要懂得将说明和流程图进行对照,将父图和子图进行对照,切忌按照常识来猜测。同时应按照一定顺序考虑问题,以防遗漏,比如可以…...
系统架构的发展历程之模块化与组件化
模块化开发方法 模块化开发方法是指把一个待开发的软件分解成若干个小的而且简单的部分,采用对复杂事物分而治之的经典原则。模块化开发方法涉及的主要问题是模块设计的规则,即系统如何分解成模块。而每一模块都可独立开发与测试,最后再组装…...
基因组学中的深度学习
----/ START /---- 基因组学其实是一门将数据驱动作为主要研究手段的学科,机器学习方法和统计学方法在基因组学中的应用一直都比较广泛。 不过现在多组学数据进一步激增——这个从目前逐渐增多的各类大规模人群基因组项目上可以看出来,这其实带来了新的挑…...
解决老师询问最高分数问题的编程方案
解决老师询问最高分数问题的编程方案 问题分析数据结构选择:线段树线段树的基本操作伪代码伪代码:构建线段树伪代码:更新操作伪代码:查询操作C语言实现代码详细解释在日常教学中,老师经常需要查询某一群学生中的最高分数,并有时会更新某位同学的成绩。为了实现这一功能,…...
com.baomidou.mybatisplus.annotation.DbType 无法引入
com.baomidou.mybatisplus.annotation.DbType 无法引入爆红 解决 解决 ❤️ 3.4.1 是mybatis-plus版本,根据实际的配置→版本一致 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-annotation</artifactId>&…...
从零开始学习JVM(七)- StringTable字符串常量池
1 概述 String应该是Java使用最多的类吧,很少有Java程序没有使用到String的。在Java中创建对象是一件挺耗费性能的事,而且我们又经常使用相同的String对象,那么创建这些相同的对象不是白白浪费性能吗。所以就有了StringTable这一特殊的存在&…...
数据库课程设计mysql
进行 MySQL 数据库课程设计通常包括以下几个步骤,从需求分析到数据库设计和实现。以下是一个常见的流程及要点: 1. 需求分析 首先,明确系统的功能需求。这包括用户需求、业务流程、功能模块等。你需要与相关人员(比如老师、同学…...
AI学习指南深度学习篇-带动量的随机梯度下降法的基本原理
AI学习指南深度学习篇——带动量的随机梯度下降法的基本原理 引言 在深度学习中,优化算法被广泛应用于训练神经网络模型。随机梯度下降法(SGD)是最常用的优化算法之一,但单独使用SGD在收敛速度和稳定性方面存在一些问题。为了应…...
点餐小程序实战教程03创建应用
目录 1 创建应用2 第一部分侧边栏3 第二部分页面功能区4 第三部分大纲树5 第四部分代码区6 第五部分模式切换7 第六部分编辑区域8 第七部分组件区域9 第八部分,发布区域10 第九部分开发调试和高阶配置总结 上一篇我们介绍了如何实现后端API,介绍了登录验…...
鸿蒙自动化发布测试版本app
创建API客户端 API客户端是AppGallery Connect用于管理用户访问AppGallery Connect API的身份凭据,您可以给不同角色创建不同的API客户端,使不同角色可以访问对应权限的AppGallery Connect API。在访问某个API前,必须创建有权访问该API的API…...
力扣9.7
115.不同的子序列 题目 给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数,结果需要对 109 7 取模。 数据范围 1 < s.length, t.length < 1000s 和 t 由英文字母组成 分析 令dp[i][j]为s的前i个字符构成的子序列中为t的前j…...
GPU 带宽功耗优化
移动端GPU 的内存结构: 先简述移动端内存cache结构;上图的UMA结构 on-Chip memory 包括了 L1、L2 cache,非常关键的移动端的 Tiles 也是保存在 on-chip上还包括寄存器文件:提供给每个核心使用的极高速存储。 共享内存(…...
Linux Centos 7网络配置
本步骤基于Centos 7,使用的虚拟机是VMware Workstation Pro,最终可实现虚拟机与外网互通。如为其他发行版本的linux,可能会有差异。 1、检查外网访问状态 ping www.baidu.com 2、查看网卡配置信息 ip addr 3、配置网卡 cd /etc/sysconfig…...
第三天旅游线路规划
第三天:从贾登峪到禾木风景区,晚上住宿贾登峪; 从贾登峪到禾木风景区入口: 1、行程安排 根据上面的耗时情况,规划一天的行程安排如下: 1)早上9:00起床,吃完早饭&#…...
C++第四十七弹---深入理解异常机制:try, catch, throw全面解析
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1.C语言传统的处理错误的方式 2.C异常概念 3. 异常的使用 3.1 异常的抛出和捕获 3.2 异常的重新抛出 3.3 异常安全 3.4 异常规范 4.自定义…...
go 和 java 技术选型思考
背景: go和java我这边自身都在使用,感受比较深,java使用了有7年多,go也就是今年开始的,公司需要所以就学了使用,发现这两个语言都很好,需要根据场景选择,我写下我这边的看法。 关于…...
传统CV算法——边缘算子与图像金字塔算法介绍
边缘算子 图像梯度算子 - Sobel Sobel算子是一种用于边缘检测的图像梯度算子,它通过计算图像亮度的空间梯度来突出显示图像中的边缘。Sobel算子主要识别图像中亮度变化快的区域,这些区域通常对应于边缘。它是通过对图像进行水平和垂直方向的差分运算来…...
图像去噪算法性能比较与分析
在数字图像处理领域,去噪是一个重要且常见的任务。本文将介绍一种实验,通过MATLAB实现多种去噪算法,并比较它们的性能。实验中使用了包括中值滤波(MF)、自适应加权中值滤波(ACWMF)、差分同态算法…...
马年市场快报分析:欧美组合式一氧化碳及可燃气体报警器指南
马年市场快报分析:欧美组合式一氧化碳及可燃气体报警器指南根据您提供的快报内容,我将从专业角度逐步分析欧美组合式一氧化碳(CO)及可燃气体报警器的关键信息,包括安全标准、风险因素、探测器区别、安装建议以及相关产…...
掌握QMK Toolbox的4个实战阶段:开源键盘定制工具从入门到精通的学习路径
掌握QMK Toolbox的4个实战阶段:开源键盘定制工具从入门到精通的学习路径 【免费下载链接】qmk_toolbox A Toolbox companion for QMK Firmware 项目地址: https://gitcode.com/gh_mirrors/qm/qmk_toolbox QMK Toolbox是一款专为机械键盘定制开发的开源工具&a…...
超分辨数据集全景图:从经典基准到实战选型指南
1. 超分辨数据集入门:为什么选择比努力更重要 刚接触超分辨率技术时,我和大多数新手一样,第一反应是赶紧找个开源模型跑起来。结果发现同样的代码,在Set5上PSNR能到40,换成自己的照片却糊成一团。后来才明白࿰…...
镜头背后的AI魔法:Qwen-Edit多角度编辑技术的深度探索
镜头背后的AI魔法:Qwen-Edit多角度编辑技术的深度探索 【免费下载链接】Qwen-Edit-2509-Multiple-angles 项目地址: https://ai.gitcode.com/hf_mirrors/dx8152/Qwen-Edit-2509-Multiple-angles 问题溯源:当静态图像遇见动态视角需求 在博物馆的…...
VS2022 + WinForms:从拖控件到写逻辑,手把手带你做出第一个C#计算器
VS2022 WinForms:从拖控件到写逻辑,手把手带你做出第一个C#计算器 第一次打开Visual Studio 2022时,那个闪亮的启动界面可能会让你既兴奋又不知所措。作为微软最新的集成开发环境,VS2022为C#开发者提供了强大的工具链࿰…...
保姆级教程:用Python+OpenCV搞定汽车360全景拼接(附C++移植思路)
从零构建汽车360全景系统:PythonOpenCV实战与C工程化指南 当你第一次坐上驾驶座,启动车辆时,中控屏上突然展现出车辆周围无死角的鸟瞰视图——这就是现代汽车360全景系统带来的神奇体验。作为提升驾驶安全性和便利性的关键技术,它…...
SenseVoice-small实战教程:导出SRT/VTT字幕文件用于Premiere剪辑
SenseVoice-small实战教程:导出SRT/VTT字幕文件用于Premiere剪辑 你是不是经常遇到这样的烦恼?录了一段视频,或者拿到一段会议录音,想要给它配上精准的字幕,却发现自己要花几个小时去听写、校对、打时间轴?…...
深度解析ImageToSTL:从二维图像到三维打印模型的技术实现
深度解析ImageToSTL:从二维图像到三维打印模型的技术实现 【免费下载链接】ImageToSTL This tool allows you to easily convert any image into a 3D print-ready STL model. The surface of the model will display the image when illuminated from the left sid…...
nRF52832蓝牙开发实战:手把手教你配置广播与扫描(基于SES和nRF5 SDK 15.3)
nRF52832蓝牙开发实战:从零配置广播与扫描全流程解析 在物联网设备开发中,蓝牙低功耗(BLE)技术因其低功耗、低成本的特点成为连接智能设备的首选方案。作为Nordic Semiconductor的明星产品,nRF52832凭借其强大的处理能…...
c++阿克曼函数详解
不爱吃饭的蓝胖子要开始整活了!!!大家好,我是蓝胖子!好久不见,倍感思念!今天带来的是--C阿克曼函数~~希望你能看到最后,有惊喜哈!正片开始 ——————————————…...
