Linux——搭建FTP服务器

news2024/11/6 3:15:21

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.coloradmin.cn/o/1413298.html

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

相关文章

掌握可视化大屏:提升数据分析和决策能力的关键(下)

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Java - OpenSSL与国密OpenSSL

文章目录 一、定义 OpenSSL:OpenSSL是一个开放源代码的SSL/TLS协议实现,也是一个功能丰富的加密库,提供了各种主要的加密算法、常用的密钥和证书封装管理功能以及SSL协议。它被广泛应用于Web服务器、电子邮件服务器、VPN等网络应用中&#x…

dvwa靶场文件上传high

dvwa upload high 第一次尝试(查看是否是前端验证)第二次尝试我的上传思路最后发现是图片码上传修改配置文件尝试蚁🗡连接菜刀连接 第一次尝试(查看是否是前端验证) 因为我是初学者,所以无法从代码审计角度…

第14次修改了可删除可持久保存的前端html备忘录:增加一个翻牌钟,修改背景主题:现代深色

第14次修改了可删除可持久保存的前端html备忘录&#xff1a;增加一个翻牌钟&#xff0c;修改背景主题&#xff1a;现代深色 备忘录代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta http-equiv"X…

Scala基础知识

scala 1、scala简介 ​ scala是运行在JVM上的多范式编程语言&#xff0c;同时支持面向对象和面向函数式编程。 2、scala解释器 要启动scala解释器&#xff0c;只需要以下几步&#xff1a; 按住windows键 r输入scala即可 在scala命令提示窗口中执行:quit&#xff0c;即可退…

线扫相机使用教程

一.线扫相机的采集原理 在现有的工业 2D 相机中&#xff0c;主要有两种类型的相机&#xff0c;面阵相机和线扫相机。这两种相机有其 各自的特点。 面阵相机&#xff1a;主要用于采集较小尺寸的产品&#xff0c;特别是长度方向较小的产品。其采集原理是通过 单次或多次曝光&…

nav02 学习03 机器人传感器

机器人传感器 移动机器人配备了大量传感器&#xff0c;使它们能够看到和感知周围的环境。这些传感器获取的信息可用于构建和维护环境地图、在地图上定位机器人以及查看环境中的障碍物。这些任务对于能够安全有效地在动态环境中导航机器人至关重要。 机器人的传感器类似人的感官…

蓝桥杯备战——7.DS18B20温度传感器

1.分析原理图 通过上图我们可以看到DS18B20通过单总线接到了单片机的P14上。 2.查阅DS18B20使用手册 比赛的时候是会提供DS18B20单总线通讯协议的代码&#xff0c;但是没有提供读取温度数据的代码&#xff0c;所以还是需要我们去查看手册&#xff0c;我只把重要部分截下来了 …

使用Spring Boot和Tess4J实现本地与远程图片的文字识别

概要&#xff1a; 在本文中&#xff0c;我们将探讨如何在Spring Boot应用程序里集成Tess4J来实现OCR&#xff08;光学字符识别&#xff09;&#xff0c;以识别出本地和远程图片中的文字。我们将从添加依赖说起&#xff0c;然后创建服务类以实现OCR&#xff0c;最后展示如何处理…

用友移动管理系统 getApp SQL注入漏洞复现

0x01 产品简介 用友移动系统管理是用友公司推出的一款移动办公解决方案,旨在帮助企业实现移动办公、提高管理效率和员工工作灵活性。它提供了一系列功能和工具,方便用户在移动设备上管理和处理企业的系统和业务。 0x02 漏洞概述 用友移动管理系统 getApp 功能点未对用户的…

Hadoop增加新节点环境配置(自用)

完成Hadoop集群增添一个新的节点配置&#xff08;文中命名为&#xff09;Hadoop106&#xff0c;没有进行继续为该节点分配身份职能的步骤 1.在VMware中安装CentOS 7 新建虚拟机 1.⾸先我们创建⼀个新的虚拟机&#xff0c;也可以点⽂件-新建虚拟机。 2.选择⾃定义&#xff0c…

[C++]使用纯opencv部署yolov8旋转框目标检测

【官方框架地址】 https://github.com/ultralytics/ultralytics 【算法介绍】 YOLOv8是一种先进的对象检测算法&#xff0c;它通过单个神经网络实现了快速的物体检测。其中&#xff0c;旋转框检测是YOLOv8的一项重要特性&#xff0c;它可以有效地检测出不同方向和角度的物体。…

掌握可视化大屏:提升数据分析和决策能力的关键(上)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【CSS】字体效果展示

测试时使用了Google浏览器。 1.Courier New 2.monospace 3.Franklin Gothic Medium 4.Arial Narrow 5.Arial 6.sans-serif 7.Gill Sans MT 8.Calibri 9.Trebuchet MS 10.Lucida Sans 11.Lucida Grande 12.Lucida Sans Unicode 13.Geneva 14.Verdana 15.Segoe UI 16.Tahoma 17.…

PCB【基板】

1、fr4板是一种常用的绝缘基材&#xff0c;由玻璃纤维和环氧树脂组成【稳定性和耐温性、通信设备、消费电子和汽车电子、低功率电子产品】 2、铝基板&#xff0c;则是将铝合金作为基材【良好的导热性能、功率电子模块、高功率和高温环境】

(大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量

今天&#xff0c;面试了一家公司&#xff0c;什么也不说先来三道面试题做做&#xff0c;第一题。 那么&#xff0c;我们就开始做题吧&#xff0c;谁叫我们是打工人呢。 题目是这样的&#xff1a; 统计除豪车外&#xff0c;销售最差的车 车辆按批销售&#xff0c;每次销售若干…

【笔记】顺利通过EMC试验(16-41)-视频笔记

目录 视频链接 P1:电子设备中有哪些主要骚扰源 P2:怎样减小DC模块的骚扰 P3:PCB上的辐射源究竟在哪里 P4:怎样控制PCB板的电磁辐射 P5:多层线路板是解决电磁兼容问题的简单方法 P6:怎样处理地线上的裂缝 P7:怎样降低时钟信号的辐射 P8:为什么IO接口的处理特别重要 P9…

使用NVIDIA TensorRT-LLM支持CodeFuse-CodeLlama-34B上的int4量化和推理优化实践

本文首发于 NVIDIA 一、概述 CodeFuse&#xff08;https://github.com/codefuse-ai&#xff09;是由蚂蚁集团开发的代码语言大模型&#xff0c;旨在支持整个软件开发生命周期&#xff0c;涵盖设计、需求、编码、测试、部署、运维等关键阶段。 为了在下游任务上获得更好的精…

【idea打包】idea打包项目了,虽然出现BUILD SUCCESS,但是jar是个无法启动的jar

idea的打包问题 问题怎么解决解决后的样子运行成功的样子 问题 我执行打包命令后生成一个jar&#xff0c;但是在执行 java -jar 命令之后出现了一下的情况 打开jar包里面的MANIFEST.MF 里面是这样的 Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Built-By: WX…

【华为 ICT HCIA eNSP 习题汇总】——题目集10

1、以下哪个动态路由协议不能应用在 IPv6 网络中&#xff1f; A、IS-IS B、RIPng C、BGP4 D、OSPFv3 考点&#xff1a;路由技术原理 解析&#xff1a;&#xff08;A&#xff09; IS-ISv6 是在 IPv6 环境下&#xff0c;IS-IS 协议进行了相应的扩展和改进&#xff0c;以适应 IPv6…