Ubuntu搭建FTP服务器

news2024/12/24 2:21:17

目录

1.ftp简介

2.vsftpd

2.1.介绍

2.2.安装与卸载

2.3.综合案例 - 本地用户模式  

2.4.1.创建FTP用户

2.4.2.配置vsftpd

2.4.3.配置防火墙

 


1.ftp简介

一般来讲,人们将计算机联网的首要目的就是获取资料,而文件传输是一种非常重要的获取资料的方式。

FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20用于进行数据传输,端口21用于接受客户端发出的相关FTP命令与参数。

FTP服务器普遍部署于内网中,具有容易搭建、方便管理的特点,有些FTP客户端工具还可以支持文件的多点下载以及断点续传技术。

FTP服务器是按照FTP协议在互联网上提供文件存储和访问服务的主机,FTP客户端则是向服务器发送连接请求,以建立数据传输链路的主机。FTP协议有下面两种工作模式:

主动模式:FTP服务器主动向客户端发起连接请求;

被动模式的工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输。  

2.vsftpd

2.1.介绍

vsftpd 的全称是 Very Secure FTP Daemon 的意思;安全性是它的一个最大的特点,vsftpd是一个UNIX类操作系统上运行的服务器的名称,它可以运行在LinuxBSDSolarisHP-UNIX等系统上面,是一个完全免费的、开放源码的ftp服务器软件,支持很多其他的FTP服务器所不支持的特征。

vsftpd 也支持 chroot 功能,chroot 顾名思义就是 change root directory 的意思,root 指的是根目录而非系统管理员;chroot可以将用户的某个特定的目录变成根目录(家目录),所以与该目录没有关系的其他目录就不会被访问了;

vsftpd 这个服务的启动者身份为一般用户,所以对于 Linux 系统的权限较低,对于 Linux 系统的危害就相对的减低了;绝大部分 ftp 会使用到的额外指令功能 (dir, ls, cd ...) 都已经被整合到 vsftpd 主程序当中了,因此理论上 vsftpd 不需要使用到额外的系统提供的指令,所以在 chroot 的情况下,vsftpd 不但可以顺利运作,且不需要额外功能对于系统来说也比较安全;

vsftpd作为更加安全的文件传输协议服务程序,允许用户以3种认证模式登录FTP服务器:

  • 匿名用户模式:任何人无需密码验证就可以直接登录到FTP服务器。这种模式最不安全,一般只用来保存不重要的公开文件,不推荐在生产环境中使用。

  • 本地用户模式:通过Linux系统本地账号进行验证的模式,相较于匿名用户模式更安全。

  • 虚拟用户模式:FTP服务器的专有用户。虚拟用户只能访问Linux系统为其提供的FTP服务,而不能访问Linux系统的其他资源,进一步增强了FTP服务器的安全性。

本次课将主要介绍被动模式下,使用本地用户访问FTP服务器的配置方法。

 

2.2.安装与卸载

安装vsftpd

# 更新apt软件包列表
sudo apt-get update 
# 安装vsftpd
sudo apt-get install vsftpd
# 检测是否安装
vsftpd -version   
# 设置FTP服务开机自启动。
sudo systemctl enable vsftpd.service
# 启动FTP服务
sudo systemctl start vsftpd.service

执行该命令时如果提示错误信息Job for vsftpd.service failed because the control process exited with error code,请排查是否存在下述问题:

  • 21端口被占用时,使用lsof -i:21命令查看是否存在进程,如果存在进程,使用kill -9 <进程号>命令杀掉进程。

  • 网络环境不支持IPv6时,在/etc/vsftpd.conf配置文件中,将listen_ipv6=YES修改为listen_ipv6=NO

  • MAC地址不匹配时,运行ifconfig命令查看MAC地址,并在/etc/sysconfig/network-scripts/ifcfg-xxx配置文件中新增或修改HWADDR=<MAC地址>

运行以下命令,查看FTP服务监听的端口:

# 安装netstate sudo apt install -y net-tools
# 查看FTP服务的端口 sudo netstat -antup | grep ftp

出现类似回显信息,表示FTP服务已启动,监听的端口号为21。

此时,vsftpd默认已开启本地用户模式,还需要继续进行配置才能正常使用FTP服务。

卸载vsftpd

# 卸载ftp服务,--purge:选项表示彻底删除改软件和相关文件
sudo apt-get remove --purge vsftpd   

2.3.综合案例 - 本地用户模式  

2.4.1.创建FTP用户

创建FTP用户及主目录。

# 创建FTP用户主目录
sudo mkdir /home/uftp
# 添加FTP用户uftp,指定用户主目录和所用shell
sudo useradd -d /home/uftp -s /bin/bash uftp
# 设置uftp的密码
sudo passwd uftp
# 输入密码:
# 再次输入密码:

-s /bin/bash表示允许用户与操作系统进行交互。

但是也有特殊需求,如希望设置的用户只能访问FTP,而不能直接登录系统。(可选)

# 将uftp用户的Shell修改为/sbin/nologin,它不允许用户登录系统
sudo usermod -s /bin/nologin uftp

更改/home/uftp/目录的拥有者为uftp

sudo chown -R uftp:uftp /home/uftp/

2.4.2.配置vsftpd

可以通过编辑/etc/vsftpd.conf文件来配置vsftpd服务器。大多数设置在配置文件中都有详细记录。有关所有可用选项,请访问官方vsftpd 页面。

编辑vsftpd.conf文件,命令如下:

# 在编辑之前先完成vsftpd.conf的备份
sudo cp vim /etc/vsftpd.conf /etc/vsftpd.conf.bak
# 编辑vsftpd.conf文件
sudo vim /etc/vsftpd.conf

禁止匿名登录FTP服务器,仅允许本地用户登录:

#禁止匿名登录FTP服务器。
anonymous_enable=NO
#允许本地用户登录FTP服务器。
local_enable=YES

在行首添加#注释掉以下参数,关闭监听IPv6 sockets,开启IPv4ipV4ipV6不能同时被监听):

# 启用IPv4
listen=YES
# 关闭监听IPv6 sockets
#listen_ipv6=YES

取消注释write_enable设置以允许对文件系统进行更改,例如上传和删除文件:

# 取消注释write_enable
write_enable=YES

开启FTP的被动模式,设置数据传输的端口范围:(添加在/etc/vsftpd.conf文件的最后)

# 开启被动模式。
pasv_enable=YES
#设置被动模式下,建立数据传输可使用的端口范围的最小值。
#建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
pasv_min_port=50000
#设置被动模式下,建立数据传输可使用的端口范围的最大值。
pasv_max_port=50010

配置chroot,为防止FTP用户访问其主目录之外的任何文件:(添加在/etc/vsftpd.conf文件的最后)

# 全部用户被限制在主目录
chroot_local_user=YES
# 启用例外用户名单
chroot_list_enable=YES
# (default follows)
# 指定例外用户列表文件,列表中用户不被锁定在主目录
chroot_list_file=/etc/chroot_list

重要:没有例外用户时,也必须创建chroot_list文件,内容可为空。

创建chroot_list文件,按i,进入编辑模式。输入例外用户名单。此名单中的用户不会被锁定在主目录,可以访问其他目录。

sudo vim /etc/chroot_list

如果有多个用户,则一行一个。

默认情况下,为了防止安全漏洞,启用chroot后,如果用户锁定的目录可写,则vsftpd将拒绝上传文件,在vsftpd配置文件中添加以下指令。

allow_writeable_chroot=YES

如果不配置,则FTP客户端连接时将提示:500 OOPS: vsftpd: refusing to run with writable root inside chroot()

重启FTP服务使配置生效

# 重启FTP服务
sudo systemctl restart vsftpd
# 查询FTP服务状态
sudo systemctl status vsftpd

2.4.3.配置防火墙

如果正在运行UFW防火墙,则需要允许FTP通信。

要打开端口21(FTP命令端口),端口20(FTP数据端口)和50000-50010(被动端口范围),请运行以下命令:

sudo ufw allow 20:21/tcp
sudo ufw allow 50000:50010/tcp

最后,可以使用不同的FTP客户端连接vsftpd服务器进行连接测试,例如:flashfxpfileZilla等等。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2080676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

盘点 8 月份 火火火 的开源项目

01 Rnote&#xff1a;释放创意&#xff0c;手绘与笔记的开源之选 Rnote是一个基于矢量的开源绘图应用&#xff0c;专为手绘、手写笔记以及文档和图片注释设计。 它适用于学生、教师以及拥有绘图板的用户&#xff0c;提供了 PDF 和图片的导入导出功能&#xff0c;无限画布以及适…

单词拆分[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个字符串s和一个字符串列表wordDict作为字典。如果可以利用字典中出现的一个或多个单词拼接出s则返回true。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 示例 1&#x…

【第54课】XSS跨站Cookie盗取表单劫持网络钓鱼溯源分析项目平台框架

免责声明 本文发布的工具和脚本&#xff0c;仅用作测试和学习研究&#xff0c;禁止用于商业用途&#xff0c;不能保证其合法性&#xff0c;准确性&#xff0c;完整性和有效性&#xff0c;请根据情况自行判断。 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利&#xff0…

004、架构_计算节点

架构总览 重要线程 管理线程:主要负责元数据相关的管理,涉及启动、DDL、切换;执行线程:是CN最重要的核心线程组,涉及解析、执行计划、分发、聚合;路由线程:主要负责向DN节点分发语句,涉及读写分离、子语句;GTM代理线程:主要负责与GTM交互、涉及申请、活跃GTID查询、释…

YASKAWA机器人维修操作命令攻略-移动命令运用案例

移动命令 1. MOVJ 命令运用案例&#xff1a; MOVJ VJ50.00 PL2 NWAIT UNTIL IN(1)ON 含义&#xff1a;在这个点以关节坐标&#xff0c;按 50.00%的再现速度&#xff0c;定位精度为 2&#xff0c;同时执行下一条非移动 指令&#xff0c;判断输入信号 1 为 on 后&#xff0c;执行…

助力航运管理数字智能化,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建江面河道运输场景下来往航行船只自动检测识别系统

在全球化浪潮的推动下&#xff0c;物流行业作为连接世界的桥梁&#xff0c;其快速发展与进化不仅重塑了国际贸易的格局&#xff0c;更深刻影响着全球贸易金融的进程。其中&#xff0c;海运作为大宗商品跨国、全球化贸易的支柱性运输方式&#xff0c;其重要性不言而喻。随着各国…

ios去水印软件免费版,精选五大高效工具,告别水印烦恼!

随着社交媒体的普及&#xff0c;越来越多的人喜欢在网络上分享自己的生活点滴。在分享视频时&#xff0c;水印往往会影响美观。为了帮助大家解决这个问题&#xff0c;本文为您推荐五大高效免费的iOS去水印软件&#xff0c;让您轻松告别水印烦恼&#xff01; 软件一&#xff1a…

第137天:横向移动-Linux_ssh工具杂项Linux靶场环境搭建

实验环境及图解&#xff1a; 通过网盘分享的文件&#xff1a;137-Linux内网环境镜像文件 链接: https://pan.baidu.com/s/1W_5DvhbkGYMqML4mi1rjQA?pwdad6r 提取码: ad6r 一般情况下SSH密钥存放在~/.ssh/目录下&#xff0c;也可以文件中搜索已保存的SSH凭证 ~/.ssh/config ~/.…

eclipse下载安装与配置代码补全与中文版

eclipse下载安装与配置中文版 eclipse下载eclipse安装eclipse配置代码补全eclipse配置中文版 eclipse下载 首先我们从官网下载eclipse&#xff0c;点击后是如下页面 我们往下滑&#xff0c;选择自己需要的版本&#xff0c;在这里我们选择的是Windows的Java开发版本&#xff0c…

【自动驾驶】决策规划算法 | 数学基础(二)凸优化与非凸优化

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

机器学习||笔记

在学习机器学习之前&#xff0c;应具备以下基础&#xff1a; 编程技能&#xff1a;精通 Python&#xff0c;掌握数据结构、函数、面向对象编程&#xff0c;熟悉 Git 和 Jupyter Notebook。 数学基础&#xff1a; 线性代数&#xff1a;矩阵运算、特征值与特征向量。微积分&…

2009年

一、选择 B C D B A 答案 C 叶子节点可能出现在最下层和次下层 所以最多七层&#xff0c;前六层是满二叉树 C 答案 B A D A B 二、大题

JVM垃圾回收算法以及垃圾收集器

JVM垃圾回收算法 JVM垃圾回收算法分为三类&#xff1a;标记清除算法、标记整理算法、 复制算法 标记清除算法 垃圾回收分为2个阶段,分别是标记和清除,效率高有磁盘碎片,内存不连续 标记整理算法 标记清除算法一样,将存活对象都向内存另一端移动,然后清理边界以外的垃圾,无…

Windows 11系统 Eclipse 2024版本安装教程和环境搭建

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 Eclipse 是一个开源的集成开发环境 (IDE)&#xff0c;主要用于 Java 开发&#xff0c;但也支持其他编程语言如 C、Python 和 PHP。它提供了丰富的工具和插件&#xff0c;用于编写、调试和管理代码&#x…

【时时三省】(C语言基础)指针进阶4

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 阅读两段有趣的代码: 代码1: (*(void(*)())0)(); 意思是调用0地址处的函数 该函数无参&#xff0c;返回类型是void 1.void(*)()&#xff0d;函数指针 2.(void(*)())0&#xff0d;对0进…

Python编码系列—Python中的安全密码存储与验证:实战指南

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

基于SSM+JSP的手机商城系统网站

系统背景 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于网上手机商城所牵扯的管理及数据保存都是非常多的&#xff0c;例如管理员&#xff1b;主页、个人中心、用户管理、商品分类管理、商品信息管理、系统管理、订单管理&#xff0c;用户&#xff1b;主页、个人…

快速了解Git服务器端基础及基本操作命令(一)

&#x1f600;前言 本篇博文是关于Git服务器端的一些基础使用及基本操作命令&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意…

力扣面试150 插入区间 模拟

Problem: 57. 插入区间 &#x1f468;‍&#x1f3eb; 代码随想录 模拟 ⏰ 时间复杂度&#xff1a; O ( n ) O(n) O(n) class Solution {public int[][] insert(int[][] intervals, int[] newInterval) {int idx 0;List<int[]> res new ArrayList<>();while (…

如何用Hive进行高校考试分析:大数据技术提升教育质量

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…