day13:FTP服务

一,FTP概述

概述

FTP(File Transfer Protocol,文件传输协议)是用于在计算机之间传输文件的协议。它工作在网络的应用层,通过 TCP 协议进行数据传输,默认端口号为 21(命令端口,另外将20当做数据端口{主动模式下})。FTP 协议分为客户端和服务端,通过客户端连接服务端以实现文件的上传和下载。FTP 常用于发布和下载软件、网站更新等。

服务端软件

  • vsftpd:安全稳定、性能良好的 Linux FTP 服务端,配置灵活。
  • ProFTPD:易于配置,支持虚拟用户,适合大规模应用。
  • Pure-FTPd:主打简单和高效,具有较高的安全性和兼容性。

客户端工具

  • 命令行 FTP 客户端:在 Linux 和 Windows 系统中都支持,用于执行 FTP 操作的简单命令行工具。(ftp,lftp)
    • lftp:默认匿名用户登录,可以批量下载,也可以下载目录
    • ftp:默认用户+密码方式访问,只能下载文件
  • FileZilla:支持多平台、图形界面的 FTP 客户端,操作便捷,功能全面。
  • WinSCP:适用于 Windows,支持 FTP 及 SFTP 等多种协议,界面友好,适合初学者。

工作模式

FTP 的工作模式有两种:主动模式和被动模式。这两种模式通过不同的端口开启数据传输连接。

  1. 主动模式(Active Mode)

    • 客户端从临时端口向服务端的 21 端口发起连接。
    • 服务端向客户端发送数据传输端口(20 端口),再从该端口向客户端的临时端口建立数据连接。
    • 因为防火墙可能会阻止服务端访问客户端的临时端口,主动模式在受限的网络中可能遇到阻碍。
  2. 被动模式(Passive Mode)

    • 客户端请求服务端开启被动模式,服务端在任意高端口打开数据端口。
    • 客户端连接此数据端口进行数据传输。
    • 被动模式适合在客户端位于防火墙后或受 NAT 保护时使用。

二,FTP服务端搭建

环境准备

防火墙关闭,selinux关闭

安装软件

yum -y install vsftpd

启动

systemctl start vsftpd

测试

先找到自己的ip

配置文件概述

位置:/etc/vsftpd/vsftpd.conf

三,ftp客户端使用

客户端安装

在大部分 Linux 系统中,可以通过包管理器安装命令行 FTP 客户端:ftp/lftp(建议lftp)

FileZilla:跨平台的免费 FTP 客户端,可通过官网下载或使用包管理器安装:sudo yum install filezilla

WinSCP(适用于 Windows):支持多种协议,直接下载安装即可。

连接服务器

命令行方式

lftp/ftp <server-ip-or-domain>【如果lftp要账号登录:-u 账户,密码】

  • ls:列出当前目录内容。
  • cd <目录>:切换到服务器指定目录,并在该目录工作。
  • lcd <目录>:切换到本地指定目录,并在该目录工作。
  • get <文件>【《目标地址》】:下载单个文件到本地。
  • put <文件>【《目标地址》】:上传单个文件到服务器。
  • mget <pattern>【《目标地址》】:批量下载匹配的文件。
  • mput <pattern>【《目标地址》】:批量上传匹配的文件。
  • delete <filename>:删除服务器上的文件。
  • mirror <远程目录> <本地目录>
    • 镜像下载:下载整个目录结构(lftp专有)不支持通配符
  • mirror -R <本地目录> <远程目录>
    • 镜像上传:将本地目录上传到服务器(lftp专有)不支持通配符
图形界面客户端
  • 打开客户端,输入服务器地址、端口(默认 21)、用户名和密码。
  • 连接成功后,文件目录会显示在窗口中,可以直接进行文件的拖拽传输。

四,配置文件详解

  1. 基本访问控制

    1. 设置用户登录权限,结合 /etc/ftpusersuserlist 文件确保用户的安全访问:
    2. # 允许本地系统用户登录
      local_enable=YES  # 启用本地用户登录# 禁止匿名用户访问,确保安全性
      anonymous_enable=NO  # 禁止匿名用户登录# 启用用户列表文件以控制访问权限
      userlist_enable=YES       # 启用用户列表控制访问
      userlist_deny=NO          # 设置为 NO 表示仅允许列表中的用户登录
      userlist_file=/etc/vsftpd/user_list  # 指定允许访问的用户列表文件路径# 启用 TCP Wrappers 访问控制,通过 /etc/hosts.allow 和 /etc/hosts.deny 管理访问
      tcp_wrappers=YES
      
    3. 用户访问控制的优先级说明

      1. /etc/ftpusers 文件:首先检查此文件中列出的用户,任何在此文件中的用户将被禁止访问 FTP,即使在其他文件中允许也会被拒绝。
      2. userlist 配置:在 /etc/ftpusers 中未被禁止的用户,如果配置了 userlist_enable=YESuserlist_deny=NO,则只有在 /etc/vsftpd/user_list 文件中的用户可以访问。
      3. TCP Wrappers (/etc/hosts.allow/etc/hosts.deny)/etc/hosts.allow 中的允许规则优先于 /etc/hosts.deny,未匹配到的 IP 会被默认拒绝。
  2. 目录与文件访问控制

    1. 设置用户的根目录和权限,确保用户只能访问授权的目录:
    2. # 本地用户的根目录
      local_root=/home/$USER/ftp  # 将本地用户限制在其专属目录# 限制用户只能访问其根目录
      chroot_local_user=YES  # 将用户限制在主目录内# 允许在 chroot 环境中进行写操作
      allow_writeable_chroot=YES  # 允许在 chroot 环境中上传文件# 启用 chroot 列表以允许部分用户访问其他目录
      chroot_list_enable=YES  # 启用 chroot 列表
      chroot_list_file=/etc/vsftpd/chroot_list  # 列表中的用户不受 chroot 限制
      
  3. 文件传输控制

    1. 配置文件传输和日志记录,以便于文件权限控制和记录活动:
    2. # 允许上传和删除等写操作
      write_enable=YES  # 启用写操作权限# 设置文件权限掩码
      local_umask=022  # 设置文件权限为 644,目录权限为 755# 启用传输日志记录
      xferlog_enable=YES
      xferlog_file=/var/log/vsftpd.log  # 日志文件位置
      xferlog_std_format=YES  # 使用标准日志格式# 会话和数据连接的超时设置
      idle_session_timeout=300  # 空闲会话超时(秒)
      data_connection_timeout=120  # 数据连接超时(秒)
      

  4. 网络访问控制

    1. 设置 FTP 的工作模式、端口范围及 TCP Wrappers 的网络控制,以确保网络访问安全:
    2. # 启用被动模式支持防火墙环境
      pasv_enable=YES  # 启用被动模式
      pasv_min_port=30000  # 被动模式的最小端口
      pasv_max_port=31000  # 被动模式的最大端口# 设置连接限制
      max_clients=200  # 最大客户端连接数
      max_per_ip=5     # 每个 IP 的最大连接数# 启用 TCP Wrappers
      tcp_wrappers=YES  # 使用 TCP Wrappers 控制访问,查看 /etc/hosts.allow 和 /etc/hosts.deny 文件
      
    3. TCP Wrappers 访问控制优先级说明

      1. 系统首先检查 /etc/hosts.allow 文件,若有匹配项则允许访问,不再检查 /etc/hosts.deny
      2. 如果 /etc/hosts.allow 无匹配项,则检查 /etc/hosts.deny。如匹配到拒绝规则,则拒绝访问。
      3. 若两者均无匹配项,系统默认允许访问。
  5. 限速设置

    1. 限制传输速率以节省带宽:
    2. # 限制本地用户的上传/下载速度
      # local_max_rate=50000  # 最大传输速度设置为 50 KB/s
      
  6. 服务与日志设置

    1. 配置服务的运行模式及欢迎信息,便于管理与监控:
    2. # 启用独立模式并监听 IPv4
      listen=YES         # 独立模式下监听 IPv4
      listen_ipv6=NO     # 禁用 IPv6# 设置欢迎消息
      ftpd_banner=Welcome to My FTP Server  # 登录后显示的欢迎信息# 记录所有 FTP 协议信息以便于调试
      log_ftp_protocol=YES  # 启用详细协议日志
      
  7. 数据目录设置

    1. 灵活配置全局和用户的数据目录:
    2. # 全局公共数据目录
      # local_root=/var/ftp/pub  # 公共目录(可选)# 用户特定的数据目录
      user_sub_token=$USER  # 使用用户名动态生成目录
      local_root=/home/$USER/ftp  # 为每个用户设置专属目录
      

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从0开始的STM32学习之旅:使用中断完成等待型任务(理论部分)

目录 中断 NVIC 中断优先级 先说说一般我们聊到的中断优先级 STM32中的NVIC中断优先级表示 API CubeMx配置说明 很好&#xff0c;我们在之前的学习中已经完成了简单的GPIO输入输出驱动的控制&#xff0c;我们的下一步就是仔细了解一下中断这个事情。 中断 中断这个事情…

使用Python进行数据分析入门

文章目录 Python环境搭建安装Anaconda验证安装 必备库介绍NumPyPandasMatplotlibSciPy 数据导入与清洗导入数据清洗数据 数据探索与分析描述性统计相关性分析 数据可视化绘制直方图 高级主题机器学习深度学习 总结 随着大数据时代的到来&#xff0c;数据分析变得越来越重要。Py…

RabbitMQ + JMeter组合,优化你的中间件处理方式!

RabbitMQ是实现了高级消息队列协议&#xff08;AMQP&#xff09;的开源消息中间件&#xff0c;它是基于Erlang语言编写的&#xff0c;并发能力强&#xff0c;性能好&#xff0c;是目前主流的消息队列中间件之一。 RabbitMQ的安装可参照官网&#xff08; https://www.rabbitmq.c…

python 爬虫 入门 五、抓取图片、视频

目录 一、图片、音频 二、下载视频&#xff1a; 一、图片、音频 抓取图片的手法在上一篇python 爬虫 入门 四、线程&#xff0c;进程&#xff0c;协程-CSDN博客里面其实有&#xff0c;就是文章中的图片部分&#xff0c;在那一篇文章&#xff0c;初始代码的28&#xff0c;29行…

Vulnhub靶机——DC-1

#环境 本次环境是利用VMware15搭建 靶机DC-1( https://download.vulnhub.com/dc/DC-1.zip) --192.168.200.131 Kali2021.1--192.168.200 将以上两个操作系统启动&#xff0c;并设置网卡为NAT模式 #信息收集 使用arp-scan对网段进行扫描&#xff0c;探测存活主机 使用nmap…

吴恩达深度学习笔记(10)12.

多任务学习 什么时候多任务学习有意义&#xff1a; 能从共享低级特征中获益&#xff1b;每个任务拥有的数据相当相似&#xff1b;训练一个足够大的神经网络用于所有任务。 目标定位&#xff1a; 分类定位&#xff08;单个对象&#xff09;与检测不同&#xff08;多个对象&…

Android 音量调节流程分析

音量调节流程分析 按下音量键 音量键被按下后&#xff0c;按键事件会一路派发给Acitivity&#xff0c;如果无人拦截并处理&#xff0c;承载当前Activity的显示PhoneWindow类的onKeyDown()以及onKeyUp()函数将会被处理&#xff0c;从而开始通过音量键调整音量的处理流程&#x…

LLMs在股票投资组合崩溃中的时间关系推理

1. 引言 想象一下&#xff0c;你是一位投资经理&#xff0c;管理着一个多元化的股票投资组合。突然&#xff0c;一场前所未有的全球性事件发生了&#xff0c;比如2007年的金融危机或2020年的新冠疫情&#xff0c;这可能会对你的投资组合造成重大影响。传统的投资组合崩溃检测方…

o1驾驶无人机后空翻,OpenAI开发者日惊掉下巴!2分钟爆改代码写App

【导读】OpenAI伦敦开发者日上&#xff0c;首次曝出了o1五大核心能力&#xff0c;还有图像理解。o1两分钟构建应用驾驶无人机、电话订餐、讲解太阳系&#xff0c;现场演示让所有开发者沸腾。 完整版o1的解禁&#xff0c;离我们不远了&#xff01; 就在刚刚举办的OpenAI伦敦开…

利用AWS服务轻松迁移数据上云

在数字化转型的浪潮中&#xff0c;越来越多的企业意识到将数据迁移至云端的重要性。云服务不仅能够提供更高的灵活性和可扩展性&#xff0c;还能显著降低IT成本。AWS&#xff08;Amazon Web Services&#xff09;作为全球领先的云服务提供商&#xff0c;为企业提供了一系列高效…

期货跟单、量化交易模拟演示系统

演示版可直接下载本文绑定资源。 一、跟单下单 在“排行榜”中选择要跟单的用户&#xff0c;合约可以跟全部&#xff0c;也可以指定跟该用户的某一合约操作&#xff0c;选定跟单的倍数&#xff08;操作手数的倍数&#xff09;/手数&#xff08;指定手数&#xff0c;可以不是对…

界面控件DevExpress WPF中文教程:Data Grid——卡片视图概述

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

【数据结构二叉树】补充:C实现二叉树的层次遍历

1、层次遍历 按层次遍历二叉树的方式&#xff1a;按照“从上到下&#xff0c;从左到右”的顺序遍历二叉树&#xff0c;即先遍历二叉树的第一层的结点&#xff0c;然后是第二层的结点&#xff0c;直到最底层的结点&#xff0c;对每一层的遍历按照从左到右的次序进行。 2、层次…

供应商图纸外发:如何做到既安全又高效?

供应商跟合作伙伴、客户之间会涉及到图纸外发的场景&#xff0c;这是一个涉及数据安全、效率及合规性的重要环节。供应商图纸发送流程一般如下&#xff1a; 1.申请与审批 采购人员根据需要提出发放图纸的申请并提交审批&#xff1b; 采购部负责人审批发放申请&#xff0c;确…

MySQL 9从入门到性能优化-系统信息函数

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

【第一个qt项目的实现和介绍以及程序分析】【正点原子】嵌入式Qt5 C++开发视频

qt项目的实现和介绍 1.第一个qt项目  &#xff08;1).创建qt工程    [1].创建一个存放qt的目录    [2].新建一个qt工程    [3].编译第一个工程    发生错误时的解决方式 二.QT文件介绍  (1).工程中文件简单介绍  (2).项目文件代码流程介绍    [1].添…

推荐一款开源的免费PDF编辑工具:CubePDF Utility

CubePDF Utility是一款功能强大的开源免费PDF编辑器&#xff0c;它采用了基于缩略图的界面设计&#xff0c;为用户提供了直观且高效的PDF编辑体验。该软件特别针对那些希望以简单直观方式编辑 PDF 文件的用户而设计&#xff0c;支持多种操作&#xff0c;如合并、提取、拆分、更…

shodan7,shodan参数使用,常用端口,Google语法

参数使用 alert shodan alert -h(查看帮助文档 这个就是怎么去配置ip监控)我们能在web页面上面去做&#xff0c;而且更加方便&#xff0c;所以就不多讲了 info shodan info(查看你查询的扫描的一些次数每个账户都是每个月有限制次数的)domain shodan domain(查询域名信息…

不是她所期待的那个人

今天那&#xff0c;我又来写用AI小说辣。 从最初的喜欢到最后的讨厌&#xff0c;她对他的感觉经历了一段奇妙的变化。一开始&#xff0c;当她第一次看到他时&#xff0c;她被他的外表所吸引。他高大英俊&#xff0c;阳光活泼的笑容总是让她心生好感。她喜欢和他在一起的感觉&am…

智能合约分享

智能合约练习 一、solidity初学者经典示例代码&#xff1a; 1.存储和检索数据&#xff1a; // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // 声明 Solidity 编译器版本// 定义一个名为 SimpleStorage 的合约 contract SimpleStorage {// 声明一个公共状态变量 d…