Linux下的FTP服务器搭建

Linux下的FTP服务器搭建参考文章 https help aliyun com document detail 60152 html spm 5176 22414175 sslink 1 1ea4617cAVoi 一 FTP 服务器配置第一步 准备远程服务器这里使用阿里云轻量级应用服务器 本服务器是 Ubuntu 系统 由于之前项目用到了 npm 包管理工具 这里就基于此进行配置 第二步 安装 vsftpd FTP 服务器管理软件 2 1 连接服务器之后 通过 putty 软件进行命令行连接控制 输入 npminstallyu

参考文章:https://help.aliyun.com/document_detail/60152.html?spm=5176.22414175.sslink.1.1ea4617cAVoiGj

一、FTP服务器配置

第一步:准备远程服务器
这里使用阿里云轻量级应用服务器。本服务器是Ubuntu系统,由于之前项目用到了npm包管理工具,这里就基于此进行配置。

第二步:安装vsftpd,FTP服务器管理软件
2.1 连接服务器之后(通过putty软件进行命令行连接控制),输入 npm install yum。npm没有收录vsfptd,需要用到另一个包管理工具yum。

2.2 安装成功后输入systemctl enable vsftpd.service,设置服务器开机自启动

2.3 输入systemctl start vsftpd.service,启动ftp服务器

#修改下列参数的值: #禁止匿名登录FTP服务器。 anonymous_enable=YES #允许本地用户登录FTP服务器。 local_enable=YES #监听IPv4 sockets。 listen=YES #在行首添加#注释掉以下参数: #关闭监听IPv6 sockets。 #listen_ipv6=YES #在配置文件的末尾添加下列参数: #设置本地用户登录后所在目录。 local_root=/var/Vanghua #全部用户被限制在主目录。 chroot_local_user=YES #启用例外用户名单。 chroot_list_enable=YES #指定例外用户列表文件,列表中用户不被锁定在主目录。 chroot_list_file=/etc/vsftpd/chroot_list #开启被动模式。 pasv_enable=YES allow_writeable_chroot=YES #本示例中为Linux服务器的公网IP。 pasv_address=39.96.175.246 #设置被动模式下,建立数据传输可使用的端口范围的最小值。 #建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。 pasv_min_port=50000 #设置被动模式下,建立数据传输可使用的端口范围的最大值。 pasv_max_port=50010 

3.2 配置用户,先输入adduser Danny,创建Danny用户。之后输入passwd Danny,设置该用户的密码。

3.3 配置用户登录文件夹,以及文件夹的权限。在这里注意,不进行配置时,使用该管理软件的FTP服务器会默认登录到/home/Danny的文件夹下,另外/root下的文件夹都不能被设置为默认登录文件夹。 输入chown -R Danny:Danny /var/Vanghua,设置默认登录文件夹的归属权属于Danny用户。输入chmod o+w /var/Vanghua,再输入chmod o+r /var/Vanghua,表示设置该文件夹用户拥有读写权限,注意:这一点其实在上面的vsftpd中也进行了配置,如果这里移除权限,那么vsftpd中的配置也会失效。

第四步:配置远程服务器防火墙
为FTP服务器开启指定端口,另外注意考虑TCP数据连接,也要开放端口。
在这里插入图片描述
安全起见,把TCP数据连接的端口设置大一些,这里范围为10。






第五步:重启FTP服务器进行测试
输入systemctl restart vsftpd.service重启FTP服务器,通过客户端主机进行连接测试

二、采用被动模式的FTP服务器

预先准备:
在linux服务器下的vsftpd.config文件中配置:
#开启被动模式
pasv_enable=YES
之后重新启动ftp服务器。








第一步:匿名连接FTP服务器
此时是FTP服务器的被动模式。
在windows环境下通过资源管理器通过ftp协议访问指定ftp服务器。在导航栏输入URL。
出现了两个对话框,第一个是尝试的匿名连接,但是是失败的,第二个是尝试的用户名密码连接。
在这里插入图片描述
第二步:匿名连接报文分析
在wireshark中进行TCP和FTP报文捕获。
过滤器内容为ip.src == 39.96.175.246 or ip.dst == 39.96.175.246
在这里插入图片描述
本截图部分展示了ftp连接,首先尝试使用匿名用户连接ftp服务器。先进行了三次TCP握手建立TCP控制连接,之后服务器发来220状态码,表示连接失败。后续又发来了原因,密码不正确。因为在服务器上设置了禁止匿名用户登录,所以连接失败。之后关掉这个对话框,观察wireshark,进行了TCP四次挥手,释放TCP控制连接。


















第三步:用户名密码连接
资源管理器由于匿名访问失败,那么会自动弹出输入用户和密码的对话框。此时输入用户名和密码。

第四步:用户名密码连接报文分析
在wireshark中继续捕获TCP和FTP报文。
在这里插入图片描述
可见过程是首先FTP服务器返回220状态码表示连接失败,需要输入密码。之后发来331状态码,表示要验证密码。最后一切完成了,发来230状态码,表示连接成功,通过用户名和密码连接到了FTP服务器。
在这里插入图片描述
紧接着登录之后,可以看到客户端给FTP服务器发送来编码格式要求,FTP服务器又返回给了FTP客户端我们在设置FTP服务器默认登录路径时设置的文件夹,是linux环境下的”/var/Vanghua”,用户拥有读写删除权限。










第五步:向FTP服务器传输文件
测试TCP数据连接。在本地创建一个文件,在这里创建了一个readme.txt。然后拷贝到FTP服务器指定的文件夹下。
在这里插入图片描述




第六步:分析传输文件时的报文
在wireshark中分析TCP和FTP报文。
可以看到是客户端主动向服务端建立连接,客户端的60306端口向FTP服务器的50006端口进行三次TCP握手,建立TCP数据连接。这个50006端口,早在TCP控制连接建立时就已经由FTP服务器发送给客户端了。紧接着就是通过FTP报文向FTP服务器请求,要把客户端的readme.txt保存到服务器指定目录下。最后保存成功服务器返回226状态码,在返回该状态码之前,这个TCP数据连接已经经过TCP四次挥手释放掉了。
在这里插入图片描述






三、采用主动模式的FTP服务器

预先准备:
在linux服务器下的vsftpd.config文件中配置:
#开启被动模式
pasv_enable=NO
将被动模式关闭。
然后配置主动模式
connect_from_port_20=YES
之后重新启动ftp服务器。














第一步:匿名连接FTP服务器
此时是FTP服务器的被动模式。
在windows环境下通过资源管理器通过ftp协议访问指定ftp服务器。在导航栏输入URL。
出现了两个对话框,第一个是尝试的匿名连接,但是是失败的,第二个是尝试的用户名密码连接。
在这里插入图片描述
第二步:匿名连接FTP服务器报文分析
此时的情况和被动模式一样。首先进行了客户端发起的TCP三次握手,进行TCP控制连接的建立。然后FTP服务器响应了220状态码,表示登陆失败,需要验证密码。但是由于提前设置不允许匿名登录,所以这里最后FTP服务器返回了530登陆失败。
在这里插入图片描述














第三步:用户名密码连接FTP服务器
资源管理器由于匿名访问失败,那么会自动弹出输入用户和密码的对话框。此时输入用户名和密码。

第四步:用户名密码连接FTP服务器报文分析
此时可见建立完TCP控制连接后,FTP服务器对传来的用户名和密码进行了检验。最后返回响应230,表示登录成功。
在这里插入图片描述




第五步:访问FTP服务器下的某个文件夹,测试TCP数据连接
进入该文件夹。进入该文件夹,FTP服务器需要把文件夹中的内容返回给客户端,这实际上也是需要通过TCP数据连接完成的。
在这里插入图片描述




第六步:分析TCP数据连接相关的报文
在主动模式下进入FTP服务器的一个文件夹,观察wireshark捕获的报文。首先是TCP的三次握手,建立数据连接。从端口上可以看出来,是FTP服务器的20端口主动向客户端的64173端口发送TCP请求,进行数据连接建立。建立完成后FTP服务器返回给客户端一个FTP请求,响应是226,表示要进入的目录已经发送给客户端。
在这里插入图片描述




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205801.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午5:09
下一篇 2026年3月19日 下午5:09


相关推荐

  • CentOS 7 常用命令大全

    CentOS 7 常用命令大全CentOS7 常用命令集合 nbsp nbsp nbsp nbsp nbsp nbsp nbsp 这两天一直在对 CentOS7 2 进行初体验 各种学习命令肿么用 不过其实大多和 DOS 是一样的 只是命令的表达上可能有点儿不一样 毕竟这些都不是一家出来的嘛 nbsp nbsp nbsp nbsp nbsp nbsp nbsp 废话不多说 直接上命令和解析 常用命令文件与目录操作命令解析 cd home 进入 home 目录 cd 返回上一级目录 cd 返回上两级目录 cd 返回上次所在目录 cp

    2026年3月19日
    2
  • mysql通配符使用

    mysql通配符使用mysql通配符使用: w3cchool在mysql查询中,经常会用到通配符,而且mysql的通配符和pgsql是有所不同的,甚至mysql中还可以使用正则表达式。本文就为大家带来mysq

    2022年6月30日
    24
  • 利用矩阵初等变换进行对角化

    利用矩阵初等变换进行对角化目录矩阵初等变换对角化证明矩阵初等变换记某矩阵为 其中为维度为 n 的行向量 则行初等变换有以下三种 1 交换两行的位置 2 3 同样的 对应的列初等变换就是把行向量换成列向量即可 为什么这些变换被称为矩阵的初等变换呢 或者说这些操作有什么特点呢 如果我们把矩阵看成一个多元一次齐次线性方程组的系数矩阵的话 那么很显然 这些操作并不会改变该方程组的解空间 即加入某个向量是变换前的解 那么一定也是变换后的解 反

    2025年7月3日
    4
  • mysql时间戳转为日期格式_mysql时间戳与日期格式的相互转换

    mysql时间戳转为日期格式_mysql时间戳与日期格式的相互转换1、UNIX时间戳转换为日期用函数:FROM_UNIXTIME()[sql]viewplaincopyselectFROM_UNIXTIME(1156219870);输出:2006-08-2212:11:102、日期转换为UNIX时间戳用函数:UNIX_TIMESTAMP()[sql]viewplaincopySelectUNIX_TIMESTAMP(‘2006-11-04…

    2022年6月21日
    39
  • zoj1251

    zoj1251zoj1251

    2022年7月12日
    20
  • openclaw添加飞书channel

    openclaw添加飞书channel

    2026年3月16日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号