Linux——搭建FTP服务器

1、FTP简介

FTP(File Transfer Protocol) :是一种处于应用层的用于文件传输的协议。FTP客户端和FTP服务器之间的通信使用TCP/IP协议族。它规定了客户端和服务器之间的通信格式和命令集,包括用户认证、文件传输、文件名和目录信息等,允许用户在远程计算机上上传和下载文件。FTP协议的客户端可以是任何支持FTP协议的程序,例如Windows系统中的FileZilla、Mac OS系统中的Cyberduck、Linux系统中的vsftpd等。

FTP协议的工作原理:FTP协议的工作原理是客户端向服务器发送命令,服务器响应这些命令,并完成文件传输。

FTP协议的安全性:FTP协议是一种非安全的文件传输协议,因为它不使用加密技术来保护文件传输的安全性。这意味着,如果FTP服务器没有得到适当的保护,那么它的文件可能会被未经授权的用户访问或修改。因此,在使用FTP协议时,应确保FTP服务器和客户端都得到了适当的保护,例如使用防火墙和加密技术等。
FTP协议的服务器通常运行在Unix或Linux系统中,例如Apache的vsftpd、ProFTPD等。

1.1 FTP端口

FTP服务端默认使用的端口号为20和21,其中20是数据端口,21是命令端口。

命令端口:FTP服务端监听21端口号来等待控制连接建立,客户端有一个Socket用来连接FTP服务器的端口,21端口负责FTP命令的发送和接收返回的响应信息,只需要很小的网络带宽。建立控制连接时,服务端会验证客户身份,决定是否建立数据连接;当需要目录列表、传输文件时,建立数据连接,并且每次客户端都是用不同的端口号来建立数据连接;在数据连接存在期间,控制连接必须存在,一旦控制连接断开,数据连接会自动关闭;数据传输完毕,会中断这条临时的数据连接。在FTP连接期间,控制连接始终保持连接状态。

数据端口:FTP服务端监听20端口来等待数据连接,依赖于控制连接(必须先建立控制连接)、连接方式

1.2 连接模式

主动连接:

1、FTP客户端向FTP服务器发送PORT命令:FTP客户端(N端口 >= 1024)向FTP服务器发送一个PORT命令(21),告诉服务器本地的数据端口(N+1)。
2、FTP服务器响应PORT命令:FTP服务器收到PORT命令后,会响应一个端口号(20),将这个端口号告诉FTP客户端,并将其作为数据传输的源端口。
3、FTP服务器打开数据连接:FTP服务器的数据连接端口(20)打开一个连接到FTP客户端使用之前指定的端口号(N+1)。然后,进行数据传输。

被动连接:

1、FTP客户端向FTP服务器发送PASV命令:FTP客户端(N端口 >= 1024)向FTP服务器发送一个PASV命令(21),告诉服务器本地的数据端口(N+1)。
2、FTP服务器响应PASV命令:FTP服务器收到PASV命令后,会响应一个端口号(P>= 1024)。将这个端口号告诉FTP客户端,并将其作为数据传输的目标端口。
3、FTP客户端打开数据连接:FTP客户端使用之前指定的端口号(N+1)打开一个连接到FTP服务器的数据连接(P)。然后,进行数据传输。

主动连接问题在于客户端,FTP的客户端并没有实际建立一个到服务器数据端口的连接,它只是简单的告诉服务器自己监听的端口号,服务器再回来连接客户端这个指定的端口。对于客户端的防火墙来说,这是从外部系统建立到内部客户端的连接,这是通常会被阻塞的。在被动连接中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。

1、安装vspd

sudo yum install vsftpd   # Centos
sudo apt-get install vsftpd  # Ubuntu

2、配置服务
服务文件:/usr/lib/systemd/system/vsftpd.service
配置文件: /etc/vsftpd/vsftpd.conf
FTP用户配置文件:
/etc/vsftpd/ftpusers 此文件中的用户禁止登录服务器(需要配置)
/etc/vsftpd/user_list 此文件中的用户允许登录服务器

日志文件:/etc/logrotate.d/vsftpd ( 默认日志文件路径)

服务器配置如下:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022

dirmessage_enable=YES
connect_from_port_20=YES

xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES

listen=NO
listen_ipv6=YES

pam_service_name=vsftpd 
chroot_local_user=YES
local_root=/data
userlist_file=/etc/vsftpd/user_list

tcp_wrappers=YES
download_enable=YES

userlist_enable=NO
                                               
  • anonymous_enable=NO:禁止匿名用户访问FTP服务器。
  • local_enable=YES:允许本地用户(linux系统用户)通过其用户名登录FTP服务器。
  • write_enable=YES:允许FTP用户在服务器上写入文件。
  • local_umask=022:设置新创建文件的权限,通常用于确保文件有适当的权限。
  • dirmessage_enable=YES:允许用户在进入新目录时显示目录消息。
  • connect_from_port_20=YES:使用端口20作为数据连接的源端口。
  • xferlog_enable=YES:启用传输日志记录功能。
  • xferlog_file=/var/log/vsftpd.log:设置传输日志的文件路径。
  • xferlog_std_format=YES:使用标准的传输日志格式。
  • listen=NO:vsftpd将不会作为独立的服务运行,而是作为inetd或xinetd服务的一部分运行。
  • listen_ipv6=YES:允许vsftpd监听IPv6连接。
  • pam_service_name=vsftpd:使用Pluggable Authentication Modules (PAM)的配置名称。
  • chroot_local_user=YES:将本地用户限制在其主目录中。
  • local_root=/home:本地用户的根目录设置。
  • userlist_file=/etc/vsftpd/user_list:包含允许访问FTP服务器的用户列表的文件路径。
  • tcp_wrappers=YES:启用tcp-wrappers,用于网络访问控制。
  • download_enable=YES:允许FTP用户下载文件。

3、编辑/etc/vsftpd/user_list文件,加入允许登录的用户:
若没有用户,需要useradd 创建用户(不建议使用root用户)。

useradd  test1

在这里插入图片描述
userlist_deny和userlist_enable配置:默认情况下userlist_deny的值为YES,userlist_enable的值为NO。ftpusers 文件的优先级高于 user_list。如果一个用户同时出现在 ftpusers 和 user_list 文件中,那么该用户将被视为不允许访问 FTP 服务。
当userlist_enable=YES时,userlist_deny项的配置才有效,此时userlist_deny=YES表示user_list是一个黑名单,即所有出现在名单中的用户都会被拒绝登入;而userlist_deny=NO表示user_list是一个白名单,即只有出现在名单中的用户才会被准许登入。

配置现象
userlist_enable=YESftpusers 中用户允许访问user_list中用户允许访问
userlist_enable=NOftpusers 中用户禁止访问user_list中用户允许访问
userlist_deny=YESftpusers 中用户禁止访问(登录时可以看到密码输入提示,但仍无法访问)user_list中用户禁止访问
userlist_deny=NOftpusers 中用户禁止访问user_list中用户允许访问
userlist_enable=YES userlist_deny=YESftpusers 中用户禁止访问user_list中用户禁止访问(登录时不会出现密码提示,直接被服务器拒绝)
userlist_enable=YES userlist_deny=NOftpusers 中用户禁止访问user_list中用户允许访问

4、匿名访问:
若想让所有人不进行认证也可访问FTP服务器,可配置匿名访问:

anonymous_enable=YES
local_enable=YES
write_enable=YES

anon_upload_enable=YES
anon_mkdir_write_enable=YES
  • anonymous_enable=YES:允许匿名用户登录
  • local_enable=YES:也允许本地用户登录
  • anon_upload_enable=YES:允许匿名用户上传文件
  • anon_mkdir_write_enable=YES:允许匿名用户创建目录

配置文件部分参数:

参数作用
listen=NO是否以独立运行的方式监听服务
listen_address=ip地址设置要监听的IP地址
listen_port=21设置FTP服务的监听端口
download_enable=YES是否允许下载文件
userlist_enable=YES设置用户列表为"允许"
userlist_deny=YES设置用户列表为"禁止"
xferlog_enable=YES是否记录日志
xferlog_file=xferlog_file日志路径
max_clients=0最大客户端连接数,0为不限制
max_per_ip=0同一IP地址的最大连接数,0为不限制
anonymous_enable=YES是否允许匿名用户访问
anon_upload_enable=YES是否允许匿名用户上传文件
anon_umask匿名用户上传文件的umask
anon_root=/var/ftp匿名用户的ftp根目录
anon_mkdir_write_enable=YES是否允许匿名用户创建目录
anon_other_write_enable=YES是否开放匿名用户的其他写入权限(重命名、删除等)
anon_max_rate=0匿名用户的最大传输速率,0为不限制
local_enable=yes是否允许本地用户登录
local_umask=022本地用户上传文件的umask值
local_root=/vat/ftp本地用户的ftp根目录
local_max_rate=0本地用户的最大传输速率,0为不限制
chroot_local_user=YES是否将用户权限禁锢在ftp目录,以确保安全
tcp_wrappers=YES使用 tcp_wrappers 进行网络访问控制

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

专业133总分400+上海交通大学819考研经验分享上交819电子信息与通信工程

今年专业819信号系统与信号处理133,总分400,如愿考上梦中上海交通大学,通过自己将近一年的复习,实现了人生中目前为止最大的逆袭(自己本科学校很普通),总结自己的复习经历,希望可以给…

时序预测 | MATLAB实现ICEEMDAN-SSA-GRU、ICEEMDAN-GRU、SSA-GRU、GRU时间序列预测对比

时序预测 | MATLAB实现ICEEMDAN-SSA-GRU、ICEEMDAN-GRU、SSA-GRU、GRU时间序列预测对比 目录 时序预测 | MATLAB实现ICEEMDAN-SSA-GRU、ICEEMDAN-GRU、SSA-GRU、GRU时间序列预测对比预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 时序预测 | MATLAB实现ICEEMDAN…

第七篇【传奇开心果】beeware的toga开发移动应用示例:gui工具包介绍和常用组件使用方法示例

传奇开心果博文系列 系列博文目录beeware的toga开发移动应用示例系列博文目录一、beeware和toga介绍二、Toga常用组件使用方法示例三、归纳总结系列博文目录 beeware的toga开发移动应用示例系列 博文目录 一、beeware和toga介绍 1.BeeWare介绍 BeeWare是一个可以让Python开…

C语言入门(二)、每日Linux(三)——gcc命令,通过gcc命令熟悉C语言程序实现的过程

使用gcc编译C语言程序 C语言程序实现的过程gcc命令基础用法常用选项编译和汇编选项:优化选项:调试选项:链接选项:警告选项: 实验对于-o选项 通过gcc命令熟悉C语言程序的执行过程1.预处理2.编译阶段3.汇编阶段4.链接阶段…

【Rose】用例图活动图绘制

绘制【Rose】用例图、活动图 文章目录 安装Rose后、画图前的准备工作绘制用例图为用例创建活动图描述用况 安装Rose后、画图前的准备工作 打开Rose,选择第一个J2EE就好。 渲染完的样子: 下面就可以开始画图了。✌✌ 绘制用例图 1、点击【Use Case V…

<蓝桥杯软件赛>零基础备赛20周--第18周--动态规划初步

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周。 在QQ群上交流答疑&am…

2024年【浙江省安全员-C证】考试题库及浙江省安全员-C证模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 2024年【浙江省安全员-C证】考试题库及浙江省安全员-C证模拟考试,包含浙江省安全员-C证考试题库答案和解析及浙江省安全员-C证模拟考试练习。安全生产模拟考试一点通结合国家浙江省安全员-C证考试最新大纲…

Vite+Electron快速构建一个VUE3桌面应用(一)

一. 简介 首先,介绍下vite和Electron。 Vite是一种新型前端构建工具,能够显著提升前端开发体验。Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入Chromium和Node.js到二进制的 Electron 允许您保持一个 JavaScript 代码代码…

Java 魔法类 Unsafe 详解

🍅文末获取联系🍅 👇🏻 精彩项目推荐订阅👇🏻 不然下次找不到哟 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更…

短视频矩阵系统软件/电脑pc企业版/手机端双开发~~源头

短视频矩阵系统软件开发的属性主要包含以下几个方面: 开发属性: 1. 功能属性:功能是短视频矩阵系统的核心属性,包括短视频的采集、编辑、发布、推广、互动等功能。此外,系统的个性化定制也是考虑的重要因素&#xff0…

商品库存管理系统(C语言)

1 设计目的 让商家能够更方便地管理商品库存。 2 需求分析 用户能够实现对商品的入库、出库、删除、修改和查询等功能。 3 总体设计 商品库存管理系统存在以下模块,商品入库模块、商品出库模块、删除商品模块、修改商品模块、查询商品模块、显示商品模块。 4 详细…

linux中安装tomcat并启动运行web项目

在 Linux 中安装 Tomcat 并启动运行 Web 项目,您可以按照以下步骤进行操作: 1.下载和解压 Tomcat: 打开终端(Terminal)。 使用 wget 命令下载 Tomcat 压缩包。例如: wget https://downloads.apache.org/tomcat/tomcat-<version>/bin/apache-tomcat-<version&g…

ZK鉴权设计以及相关探讨

文章目录 1. zk的鉴权设计2. zk鉴权应用范围3. zk鉴权的常用方法4. 推荐配置5. 参考文档 鉴权&#xff0c;分别由鉴和权组成 鉴&#xff1a; 表示身份认证&#xff0c;认证相关用户是否存在以及相关的用户名和密码是否一致权&#xff1a; 完成身份的鉴后&#xff0c;还需要判断…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第六天-Linux文件系统(物联技术666)

链接&#xff1a;https://pan.baidu.com/s/1VUc8cGI7bTtXuGepZZY3Ng?pwd1688 提取码&#xff1a;1688 上午&#xff1a;文件系统介绍 下午&#xff1a;文件系统的制作 教学内容&#xff1a; 在linux中文件分为二种&#xff1a; 根文件和普通文件&#xff1b; Linux以树状…

2024河南省公务员报名确认缴费流程

1、抢考点&#xff01;及时的报名确认以及缴费&#xff01; 2024年1月31日9∶00至2月40日17∶00前进行上传照片、选择考区和网上缴费。需要提醒各位考生的是&#xff0c;各个城市考点容量有限&#xff0c;需要尽早进行确认缴费选考点。每年都有因为报名确认较晚&#xff0c;未能…

云流量回溯在网络管理中的关键应用

云流量回溯是一种在云计算环境下的网络流量分析技术&#xff0c;它能够追踪和还原网络中的流量&#xff0c;为网络管理和安全监控提供了强大的支持。在本文中&#xff0c;我们将探讨云流量回溯的原理&#xff0c;并探讨其在实际网络管理中的关键应用。 1. 云流量回溯概述 云流量…

Docker数据卷挂载(以容器化Mysql为例)

数据卷 数据卷是一个虚拟目录&#xff0c;是容器内目录与****之间映射的桥梁 在执行docker run命令时&#xff0c;使用**-v 本地目录&#xff1a;容器目录**可以完成本地目录挂载 eg.Mysql容器的数据挂载 1.在根目录root下创建目录mysql及三个子目录&#xff1a; cd ~ pwd m…

嵌入式学习第十一天

1.数组和指针的关系: 1.一维数组和指针的关系: int a[5] {1, 2, 3, 4, 5}; int *p NULL; p &a[0]; p a; 数组的数组名a是指向数组第一个元素的一个指针常量 a &a[0] a 的类型可以理解为 int * 有两种情况除…

常见の算法链表问题

时间复杂度 1.链表逆序 package class04;import java.util.ArrayList; import java.util.List;public class Code01_ReverseList {public static class Node {public int value;public Node next;public Node(int data) {value data;}}public static class DoubleNode {publi…

React16源码: React中commitAllHostEffects内部的commitDeletion的源码实现

commitDeletion 1 &#xff09;概述 在 react commit 阶段的 commitRoot 第二个while循环中调用了 commitAllHostEffects&#xff0c;这个函数不仅仅处理了新增节点&#xff0c;更新节点最后一个操作&#xff0c;就是删除节点&#xff0c;就需要调用 commitDeletion&#xff0…
最新文章