Linux中的ftp

2023-11-14

引言:

FTP 是因特网网络上历史最悠久的网络工具,从 1971 年由 A KBHUSHAN 提出第一个 FTP 的RFC(RFC114) 至今近半个世纪来,FTP 凭借其独特的优势一直都是因特网中最重要、最广泛的服务之一。

一、FTP概述

FTP(File TransferProtocol,文件传输协议)是典型的C/S架构的应用层协议,需要由服务端软件、客户端软件两个部分共同实现文件传输功能。FTP客户端和服务器之间的连接是可靠的,面向连接的,为数据的传输提供了可靠的保证。tcp协议:20,21端口。

21端口:用于传输指令

22端口:用于传输数据

FTP是一种文件传输协议,它支持两种模式,一种方式叫做Standard(也就是Active,主动方式),一种是 Passive(也就是PASV被动方式)。

Standard模式FTP的客户端发送PORT命令到FTPserver。Passive模式FTP的客户端发送 PASV命令到FTP Server

Standard模式(主动模式)

FTP客户端首先和FTP Server的TCP

21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。

Passive模式(被动模式)

在建立控制通道的时候和standard模式类似,当客户端通过这个通道发送PASV命令的时候,FTP

server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server将通过这个端口进行数据的传送,这个时候FTp server不再需要建立一个新的和客户端之间的连接

二、FTP的作用及工作原理

1.FTP的作用和模式以及通信方式

FTP (File Transfer Protocol:文件传输协议)作用: Internet 上用来远程传送文件的协议。

vsftp全称(very secure FTP)

vsftp模式:c/s模式

FTP服务器默认使用TCP协议的20、21端口与客户端进行通信

20端口用于建立数据连接,并传输文件数据

21端口用于建立控制连接,并传输FTP控制命令

2.FTP的工作原理

FTP数据连接分为主动模式和被动模式

主动模式:服务器主动发起数据连接

被动模式:服务器被动等待数据连接

2.1主动模式

FTP 客户端连接到FTP 服务器的21号端口,发送用户名和密码,客户端随机开放一个端口(1024以上),发送PORT 命令到FTP 服务器,告知服务器客户端采用主动模式并开放端口,FTP服务器收到PORT主动模式命令和端口后,通过服务器的20号端口和客户端开放的端口连接,发送数据,原理画图所示,(无论是主动还是被动模式,首先的控制通道都是先建立起来,只是在数据传输模式上的区别)1

主动模式有个弊端,客户端必须关闭防火墙,否则不能传输数据。

2.2被动模式

首先客户端的高位端口向服务器的21端口建立FTP连接请求(连接请求包括:认证,用户,密码,连接模式,命令PORT端口);

FTP服务器响应ACK确认,服务器的21号端口和客户端的高位端口建立ftp会话连接,并告诉客户端已开放20号端口,等你来连接;

客户端用自己的一个高位端口连接服务器响应的一个高位端口;

服务器给客户端发送ACK确认,开始数据传输

三、搭建和配置FTP 服务

环境:准备两台虚拟机,其中一台Linux系统做服务器,一台Windows做客户机。并且能互通

3.1安装前准备工作,关闭防火墙

因为ftp服务的端口为21,20是高危端口,所以必须关闭防火墙防止服务操作被屏蔽

systemctl stop firewalld

setenforce 0

3.2查看信息,安装软件包vsftpd

配置ftp服务

[root@localhost ~]# rpm -q vsftpd //查看是否安装了ftp服务

未安装软件包 vsftpd

yum info vsftpd 查看信息

yum install -y vsftpd #yum源一键安装

3.3开启FTP服务,切换目录并做备份

[root@localhost ~]# systemctl start vsftpd //启动ftp服务

[root@localhost ~]# systemctl enable vsftpd //设置开机自启

Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

[root@localhost ~]# systemctl status vsftpd //查看此时ftp服务状态

3.4设置用户固定登录路径

3.4.1创建用户

[root@localhost ~]# useradd zhangsan

[root@localhost ~]# passwd zhangsan

[root@localhost ~]# useradd lisi

[root@localhost ~]# passwd lisi

[root@localhost ~]# useradd wangwu

[root@localhost ~]# passwd wangwu //创建用户并设置密码

3.4.2查看用户账号

[root@localhost ~]# tail -4 /etc/passwd //查看账号

apache❌48:48:Apache:/usr/share/httpd:/sbin/nologin

zhangsan❌1001:1001::/home/zhangsan:/bin/bash

wangwu❌1002:1002::/home/wangwu:/bin/bash

lisi❌1003:1003::/home/lisi:/bin/bash

3.4.3设置固定路径

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf //进入编辑限制用户远程登录到固定路径

将102行开启 chroot_list_enable=YES//开启匿名用户访问,默认已开启

将104行开启 chroot_list_file=/etc/vsftpd/chroot_list //两行取消“#”注解

local_root=/usr/local/html //指定用户登录的目录且不能cd(切换)到其他目录

[root@localhost ~]# mkdir /usr/local/html //创建用户指定登陆的路径

[root@localhost ~]# ls /usr/local//看看是否创建成功

bin etc games html include lib lib64 libexec sbin share src

[root@localhost ~]# vim /etc/vsftpd/chroot_list //将想要限制的用户填入

3.4.4配置用户白名单

[root@localhost vsftpd]# vim /etc/vsftpd/user_list ###进入编辑白名单,在行尾加上lisi

[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf ###进入编辑启用白名单

userlist_enable=YES

userlist_deny=NO

[root@localhost vsftpd]# systemctl restart vsftpd ###重启服务

验证:此时远程登录zhangsan ,wangwu 皆登录失败,只有lisi用户可以登录,所以黑白名单设置成功

3.5设置匿名用户访问的ftp服务(最大权限)

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf

[root@localhost ~]# chmod -R 777 /var/ftp/pub/

vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES #开启匿名用户访问。默认开启

write_enable=YES #开放服务器的写权限(若要上传必须开启)。默认已开启

anon_umask=022 #设置匿名用户所上传数据的权限掩码(反掩码)

anon_upload_enable=YES #允许匿名用户上传文件。默认已注释,需取消注释

anon_mkdir_write_enable=YES #允许匿名用户创建(上传)目录。默认已注释,需取消注释

anon_other_write_enbale=YES #允许删除、重命名、覆盖等操作。需添加

chmod -R 777 /var/ftp/pub/ #为匿名访问ftp的根目录下的pub子目录设置最大权限

以便匿名用户上传数据

systemctl restart vsftpd #重启服务

在windows系统打开开始菜单,输入cmd命令打开命令提示符

ftp 192.168.223.9 #建立ftp连接

匿名访问时,用户名为ftp,密码为空,直接回车即可完成登录

ftp> pwd #匿名访问ftp的根目录为Linux系统的/var/ftp/目录

ftp> ls #查看当前目录

ftp> cd pub #切换到pub目录

ftp> get 文件名 #下载文件到当前windows本地目录

ftp> put 文件名 #上传文件到ftp目录

ftp> quit #退出

详细命令

[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# systemctl disable firewalld

Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

[root@localhost ~]# setenforce 0

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf

[root@localhost ~]# chmod -R 777 /var/ftp/pub/

[root@localhost ~]# systemctl restart vsftpd

[root@localhost ~]# ll /var/ftp/

总用量 0

drwxrwxrwx. 2 root root 6 10月 31 2018 pub

[root@localhost ~]# cd /var/ftp/pub

[root@localhost pub]# touch 22.txt

[root@localhost pub]# ls

22.txt

[root@localhost pub]# ls

19.txt 22.txt

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux中的ftp 的相关文章

  • 这种 bash 文件名提取技术有何用途?

    我有一部分 bash 脚本正在获取不带扩展名的文件名 但我试图了解这里到底发生了什么 是做什么用的 有人可以详细说明 bash 在幕后做了什么吗 如何在一般基础上使用该技术 bin bash for src in tif do txt sr
  • 码头无故停止

    我需要经验丰富的码头用户的建议 我在负载均衡器 亚马逊云 后面维护着 2 台 Linux 机器 使用 Jetty 9 0 3 有时我的 Jetty 容器会被 Thread 2 无故关闭 同时地 显示以下日志并且容器无故停止 没有错误 没有例
  • 找出 Linux 上的默认语言

    有没有办法从C语言中找出Linux系统的默认语言 有 POSIX API 可以实现这个功能吗 例如 我想要一个人类可读格式的字符串 即德语系统上的 German 或 Deutsch 法语系统上的 French 或 Francais 等 有类
  • 从 Python 访问 802.11 无线管理帧

    我想从 Linux 上的 Python 嗅探 802 11 管理 探测请求 帧 这可以从 Scapy 中实现 如下所示 coding utf 8 from scapy all import def proc p if p haslayer
  • 用于编辑 /etc/sudoers 文件的正则表达式模式

    我想删除 etc sudoers 文件中的 uncommnet 轮组 那么我应该使用什么正则表达式模式 cat etc sudoers Allows members of the sys group to run networking so
  • 无需 root 访问权限即可安装 zsh? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有可能 以及如何 我确实需要在几台具有 ssh 访问权限 但没有 root 访问权限 的远程计算机上使用此功能 下载 zsh wget O zsh t
  • 如何从远程 ssh 连接上运行的 tmux(复制模式)复制到本地剪贴板

    我通过 OS X 上的 VirtualBox 运行 Linux 我通过在无头状态下运行虚拟机 然后使用端口转发 sshing 到 Linux 机器来实现这一点 现在 无论复制到我的虚拟机上的剪贴板 我都可以粘贴到我的远程 ssh 会话上 但
  • 将node.js +expressjs应用程序的NODE_ENV设置为ubuntu下的守护进程

    我按照这些说明让守护进程正常工作 http kevin vanzonneveld net techblog article run nodejs as a service on ubuntu karmic http kevin vanzon
  • ubuntu 的 CSS 更少(并且自动编译)? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我尝试过 simples 但现在 l
  • 使用c在linux上分块读写

    我有一个 ASCII 文件 其中每一行都包含一个可变长度的记录 例如 Record 1 15 characters Record 2 200 characters Record 3 500 characters Record n X cha
  • SMP 上如何处理中断?

    SMP 对称多处理器 多核 机器上如何处理中断 内存管理单元是只有一个还是多个 假设两个线程 A 和 B 运行在不同的内核上 同时 访问页表中不存在的内存页面 在这种情况下 将会出现页面错误 并从内存中引入新页面 将会发生的事件的顺序是什么
  • 如何在perl中使用O_ASYNC和fcntl?

    我想使用 O ASYNC 选项 当管道可以读取时 SIGIO 的处理程序将运行 但以下代码不起作用 任何人都可以帮助我吗 bin env perl use Fcntl SIG IO sub print catch SIGIO n my fl
  • 如何将 elf 解释器(ld-linux.so.2/ld-2.17.so)构建为静态库?

    如果我的问题不准确 我深表歉意 因为我没有太多 Linux 相关经验 我目前正在构建一个 Linux 从头开始 主要遵循 linuxfromscratch org 版本的指南 7 3 我遇到了以下问题 当我构建可执行文件时 获取一个称为 E
  • 如何在特定的Java版本上运行应用程序?

    如何运行具有特定 Java 版本的应用程序 我安装了三个 Java 版本 myuser mysystem sudo update alternatives config java There are 3 choices for the al
  • 如何在linux中使用iptables将http和https流量转发到透明代理[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • 如何使用 go1.6.2 构建 linux 32 位

    有没有任何组合GOARCH and GOOS我可以设置哪些值来构建 ELF 32 位二进制文 件 GOOS linux and GOARCH 386 更多示例 架构 32 bit gt GOARCH 386 64 bit gt GOARCH
  • 套接字发送调用被阻塞很长时间

    我每 10 秒在套接字上发送 2 个字节的应用程序数据 阻塞 但发送调用在下面的最后一个实例中被阻塞超过 40 秒 2012 06 13 12 02 46 653417 信息 发送前 2012 06 13 12 02 46 653457 信
  • php_network_getaddresses: getaddrinfo 失败: 名称或服务未知 (0) 连接失败..!

    我正在使用 php 邮件程序功能 但出现以下错误 如何修复它 2016 01 22 06 15 48 SMTP 错误 无法连接到服务器 php network getaddresses getaddrinfo失败 名称或服务未知 0 连接失
  • 使用 --prof 选项创建多个日志文件而不是一个 v8.log 的节点

    我正在尝试使用 prof 选项来分析我的 Node 应用程序 但我发现不是一个单一的 v8 log 文件 而是使用诸如isolate 0x9582b40 v8 log isolate 0xa1cab78 v8 6049 等前缀创建的多个文件
  • 隐式声明“gets”

    据我所知 隐式声明 通常意味着该函数必须在调用之前放置在程序的顶部 或者我需要声明原型 然而 gets应该在stdio h文件 我已包含 有没有什么办法解决这一问题 include

随机推荐

  • 使用Sentencepiece +CNN进行文本分类

    Sentencepiece是google开源的文本Tokenzier工具 其主要原理是利用统计算法 在语料库中生成一个类似分词器的工具 外加可以将词token化的功能 对比开源的分词器 它会将频繁出现的字符串作为词 然后形成词库进行切分 所
  • 清明上河图30亿像素_清明上河图高清下载

    清摹本清明上河图高清全图 一亿像素 是为了方便众多学者们研究品评清明上河图的资源 小编这里给大家带来的是过亿像素的清摹本清明上河图高清全图 画质好到想假的一样 第一眼看到小编觉得以前看的清明上河图都是假的 如果你有需要的话 那就快来IT猫扑
  • 图片素材网站

    七大壁纸网站满足所有分辨率需求 如今手机电脑都是1080p起步 偏高端的2k 高端的4k都逐渐进入普通大众的接受范围 而电视机近两年不是4k都不好意思拿出手 虽然电视4k在今年这个时候对普通人来说也并不实用 我经常就为了找一些分辨率高的壁纸
  • 排序算法-【Java实现】-【桶排序、冒泡排序、快速排序、插入排序】

    排序算法 Java实现 桶 冒泡 快速 归并 插入排序 排序算法演示地址 https www cs usfca edu galles visualization ComparisonSort html 桶排序 顾名思义 将数组分到有限数量的
  • 有序链表转换二叉搜索树

    力扣入口 109 有序链表转化二叉搜索树 给定一个单链表 其中的元素按升序排序 将其转换为高度平衡的二叉搜索树 本题中 一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 思路加图解 思路1 class So
  • 【Python】dlib 无需编译安装 dlib-19.23.0-cp39-cp39-win_amd64.whl

    Dlib介绍 Dlib is a modern C toolkit containing machine learning algorithms and tools for creating complex software in C to
  • HTML5录音并调用百度语音识别

    HTML5录音借鉴的网上的代码 但是下载下来却无法用 查阅了好多资料 终于在国外某网站上找到原因 原来是js函数废弃了 替换为新的js函数名即可 HTML5录音的代码 http www it165 net design html 20140
  • opencv学习笔记十:使用cv2.morphologyEx()实现开运算,闭运算,礼帽与黑帽操作以及梯度运算

    openvc中morphologyEx 函数是一种形态学变化函数 数学形态学可以理解为一种滤波行为 因此也称为形态学滤波 滤波中用到的滤波器 kernal 在形态学中称为结构元素 结构元素往往是由一个特殊的形状构成 如线条 矩形 圆等 基本
  • Tomcat解决跨域问题

    Tomcat解决跨域问题 把下面的代码粘贴到web xml的552行下即可
  • 在 Dev-C++ 或 Code::Blocks 下面配置 EasyX

    前言 EasyX 虽然挺好用 但是目前官方只发布了针对 VC 的使用方法 本文介绍如何将 EasyX 配置到 DevCpp 或 CodeBlocks 里面 并提供相关的库 平时我工作忙 有问题直接在后面留言 我会尽力修改 注 版本太老的 m
  • java域名解析

    import java net InetAddress import java net UnknownHostException public class GetIp static public void main String args
  • Redis实现简单投票系统(微服务系列)

    package com jt redis import redis clients jedis Jedis import java lang reflect Member import java util Set public class
  • .NET网络编程——TCP通信

    一 网络编程的基本概念 1 网络 就是将不同区域的电脑连接到一起 组成局域网 城域网或广域网 把分部在不同地理区域的计算机于专门的外部设备用通信线路 互联成一个规模大 功能强的网络系统 从而使众多的计算机可以方便地互相传递信息 共享硬件 软
  • webrtc-stun/turn 服务器安装

    项目中用到了webrtc 他的p2p通过ICE实现 其中需要stun turn服务器接入 我用的google开源的 很好用 原来叫做turnserver 后来改名为corturn git有下载连接 其实安装 部署配置都很简单 有很多分享 重
  • Docker进阶学习:swarm集群搭建

    我们可以看一下官方文档关于工作机制的地方 How nodes work 可以从官方截图上看 manager顾名思义是管理器 但是管理器要做好分配 官方一句话 An N manager cluster tolerates the loss o
  • Java ArrayList 类

    ArrayList 类继承了 AbstractList 并实现了 List 接口 ArrayList 支持可以根据需要增长的动态数组 标准 Java 数组是固定长度的 数组创建后不能增长或缩小 这意味着我们必须提前知道一个数组将包含多少个元
  • 5年测试开发,跳槽薪资25k变成30k,总结的这些面试题,你会哪些?

    每年的金三银四都是各大公司招聘程序员的最佳时期 在这段时间内有好多程序员会为了面试而发愁 不知道如何才能收到好的offer 拿到理想的薪资 实现自我的人生价值 我想告诉大家的是 其实都不用愁的 好好准备一下就可以了 每个人都想找一份大厂的
  • 算法题汇总

    NO1 打靶问题 打十次打靶 总分数为90分的情况有哪些 NO2 阶乘末尾0的个数 NO1 打靶问题 打十次打靶 总分数为90分的情况有哪些 个人感觉比较像一类排列组合递归回溯的解法 package com lzg flume interc
  • QProcess创建子进程的方法,以及将子进程窗口嵌入主进程窗口中

    QProcess创建子进程的方法
  • Linux中的ftp

    引言 FTP 是因特网网络上历史最悠久的网络工具 从 1971 年由 A KBHUSHAN 提出第一个 FTP 的RFC RFC114 至今近半个世纪来 FTP 凭借其独特的优势一直都是因特网中最重要 最广泛的服务之一 一 FTP概述 FT