linux-FTP服务器配置

FTP(File Transfer Protocol,文件传输协议)

一种用于在计算机网络中传输文件的标准协议。它允许用户通过客户端程序与远程服务器进行文件交换,支持文件的上传、下载、删除、重命名等操作。FTP服务常用于将网站文件上传到服务器,或者在公司内部网络中共享大文件。

FTP工作原理

FTP基于客户端-服务器模型,工作时使用两个独立的连接:控制连接和数据连接。

  1. 控制连接(Command Channel)
    • 控制连接用于发送命令和接收响应,如登录、文件操作等。控制连接通常使用TCP端口21。
    • 控制连接是一个持久化的连接,即在会话期间保持打开,直到会话结束。
  2. 数据连接(Data Channel)
    • 数据连接用于实际传输文件。每当需要传输文件时,客户端和服务器会建立一个新的数据连接。
    • 数据连接可以是主动模式(PORT模式)或被动模式(PASV模式)。在主动模式下,客户端在本地打开一个端口等待服务器连接;在被动模式下,服务器在其端口上等待客户端连接。

FTP的工作模式

  1. 主动模式(PORT模式)
    • 在客户端发出连接请求后,客户端告诉服务器自己打开了一个端口用于接收数据,服务器则向该端口发起连接。
    • 这种模式的缺点是客户端必须在防火墙外部,或者防火墙必须允许客户端向外发起连接。
  2. 被动模式(PASV模式)
    • 在被动模式下,客户端发起控制连接后,服务器告诉客户端其将用于数据传输的端口,客户端再向这个端口发起连接。
    • 被动模式通常用于客户端在防火墙后时的连接,能够避免防火墙阻止数据连接的建立。

FTP的主要特点

  1. 双向传输
    • FTP支持文件的双向传输,既可以上传文件,也可以从服务器下载文件。
  2. 命令和响应协议
    • FTP的控制连接基于文本命令和响应,命令遵循标准格式,如USER、PASS、LIST、GET、PUT等。
  3. 支持匿名访问
    • FTP服务器可以配置为支持匿名登录,这意味着用户不需要提供用户名和密码即可访问公共文件夹。
  4. 支持大文件传输
    • FTP支持大文件的传输,适合传输大量数据或大文件。
  5. 安全性问题
    • FTP协议本身没有加密功能,传输的数据,包括用户名和密码,都是明文的,因此容易受到中间人攻击。
    • 为了增强安全性,通常会使用FTPS(FTP Secure)或SFTP(SSH File Transfer Protocol)等变种,分别基于SSL/TLS和SSH进行加密。

FTP命令和响应

一些常用的FTP命令包括:

  • USER:提供用户名
  • PASS:提供密码
  • LIST:列出当前目录中的文件
  • GET:下载文件
  • PUT:上传文件
  • QUIT:结束会话

FTP响应是三位数字代码,表示操作的结果,例如:

  • 200:命令成功
  • 530:登录失败
  • 550:文件操作失败(例如,文件不存在)

FTP客户端

常见的FTP客户端程序包括:

  1. FileZilla:开源的FTP客户端,支持FTP、FTPS和SFTP。
  2. WinSCP:Windows平台的FTP客户端,支持多种协议。
  3. Cyberduck:支持FTP、SFTP、WebDAV等协议的跨平台客户端。

安全性与FTP的扩展

为了提高FTP的安全性,除了FTPS和SFTP外,还有其他一些增强安全性的协议和扩展:

  1. FTPS:FTP Secure,基于SSL/TLS加密传输。
  2. SFTP:SSH File Transfer Protocol,基于SSH协议加密传输,通常与SSH一同使用。
  3. FTP over TLS/SSL:TLS(传输层安全协议)和SSL(安全套接字层)提供了加密的通道,保护FTP数据免受窃听。

/etc/serveice下记录了所有端口服务信息

第一部分:基础五步

1,挂载光盘,并写镜像源方便装包

Linux 编写本地仓库

2,寻找我们需要的软件包

yum search ftp

3,安装软件包

yum install -y  vsftpd

4,关闭selinux

vim /etc/selinux/config

更改配置文件之后再重启centOS-7,再查看setenforce 0

5,关闭防火墙 systemctl stop firewalld.service

实验一,匿名传输

6,查询配置文件路径 rpm -qc vstfpd

7,修改配置文件 vim /etc/vsftpd/vsftpd.conf

分别修改12/16/19/23/29/33/37行为YES

8,然后再重启FTP服务 systemctl restart vsftpd

9,通过windows主机访问ftp服务器验证实验效果

发现只有有限权限,无法新建文件夹或目录

这是因为linux中这个目录本身权限的问题

匿名访问的Windows用户相对于Linux是其他人other,只有读和执行权限r-x。那么就需要使用更安全的方法在linux上面给目录加权限

chmod o+w /var/ftp/pub

这个时候windows就可以新建目录和文件了

实验二,本地用户访问

6-8步骤同实验一

9,创建用户并设置密码

useradd user1

useradd user2

echo 123456 | passwd --stdin user1

echo 123456 | passwd --stdin user2

查看创建用户密码效果

tail -2 /etc/passwd

tail -2 /etc/shadow

10,在克隆的centOS7验证实验效果(6-8步骤已经开启了允许匿名与本地用户访问)

实验三,禁止user1登录ftp服务器

1,进入vsftpd的配置文件路径 cd /etc/vsftpd/

其中ftpuser通常是一个专门为FTP访问创建的用户账号。这些用户通常用于管理和配置FTP服务器上的文件访问权限。ftpuser 的具体功能和角色可能会根据不同的FTP服务器软件(如 vsftpd、ProFTPD、Pure-FTPd等)以及系统配置而有所不同。

2,然后设置user1不允许登录,即在ftpusers文件里面写入不允许登录的用户

添加user1,表示user1不允许登录ftp服务器

3,然后验证user1是否还能够登录

发现已经user1不能够登录

实验四,允许,禁止用户访问

1、进入vsftpd的配置文件路径

cd /etc/vsftpd/

ls

2、修改配置文件不允许user2登录 vim user_list

3,验证实验效果

4,见第2步的截图,可以通过修改配置文件/etc/vsftpd/vsftpd.conf调整允许user2登录   

vim /etc/vsftpd/vsftpd.conf

userlist_deny=NO  #最后一行添加内容

5,重启服务 systemctl restart vsftpd

6,在192.168.23.142验证实验效果

实验五,查找配置文件的帮助手册

1、还原实验三(将配置文件中的userlist_deny=NO删除或者注释)

2、查找帮助 man vsftpd.conf

/EX

n ----按n跳转

max_per_ip

3、修改主配置文件 vim /etc/vsftpd/vsftpd.conf

max_per_ip=1 #最后一行添加

4、因为对主配置文件进行了修改,所以需要重启服务 systemctl restart vsftpd

5、通过windows的command验证实验效果

第一次ftp登录成功 ftp 192.168.23.157

第二次ftp登录失败

实验六,设置vsftp的虚拟账户

1,给虚拟用户创建用户数据库

mkdir /vftp

db_load

db_load 是 Berkeley DB 的一个命令行工具,用来将数据从文本文件加载到 Berkeley DB 数据库中。

-T

这个选项指定使用事务模式。在 Berkeley DB 中,事务模式可以确保在对数据库进行读写时,数据的一致性和完整性得以维护。事务模式允许你在发生错误时回滚所有的更改。

-t hash

-t 选项指定数据库的类型为哈希数据库。哈希数据库是基于哈希表实现的,常用于需要快速键值查找的场景。

如果不指定 -t,默认使用 B+ 树类型的数据库,但使用 -t hash 时,会显式告诉 Berkeley DB 使用哈希表作为数据存储结构。

-f /vftp/vuser.txt

-f 选项指定输入文件,也就是数据源文件。/vftp/vuser.txt 是一个包含要加载到数据库的数据的文件。

该文件一般是文本格式,通常每行表示一个键值对,适合导入哈希数据库。

/vftp/vuser.db

这是目标数据库文件,即数据将会被加载到这个文件中。如果这个文件不存在,db_load 会创建一个新的数据库文件。

如果目标数据库已经存在,则会根据选项决定是覆盖还是合并数据,通常需要确保文件权限正确。

注意事项:

  1. 输入文件 /vftp/vuser.txt 必须按照特定的格式组织,比如每行包含一个键值对,适用于哈希表的存储结构。
  2. 如果 /vftp/vuser.db 已经存在,加载数据时要确保没有冲突或覆盖错误

vim /vftp/vuser.txt

admin1

123456

admin2

123456

2,存放用户的txt文件生成数据库

db_load -T -t hash -f /vftp/vuser.txt /vftp/vuser.db

ls /vftp

3,在真实业务环境下,需要修改数据库文件达到合适的权限

chmod 700 /vftp/vuser.db

ls -ld /vftp/vuser.db

4,修改PAM文件

vim /etc/pam.d/vsftpd

需要把原文件默认配置全部注释掉,添加相应字段

auth    required pam_userdb.so db=/vftp/vuser  #做虚拟认证  

account required pam_userdb.so db=/vftp/vuser  #做虚拟账户的认证   

#认证    请求      pam数据库      数据库文件

批量注释:

1,跳转到批量注释的行

2,按住ctrl +v进入可视化块模式

3,按上下方向键选中要注释的行

4,按I在行首输入

5,按#注释

6,按两次esc

5,创建用户(给虚拟用户做映射)  

useradd -d /var/ftp/vuser vuser

chown vuser.vuser /var/ftp/vuser

chmod 555 /var/ftp/vuser

ls -ld /var/ftp/vuser

6、创建文件和目录(为了测试)

mkdir /var/ftp/vuser/dir1

touch /var/ftp/vuser/file1

ls /var/ftp/vuser

7、修改配置文件 vim /etc/vsftpd/vsftpd.conf

 12 #anonymous_enable=YES  #关闭匿名访问

 13 anonymous_enable=NO

 30 anon_upload_enable=NO #关闭匿名上传

 31 #anon_upload_enable=YES

 35 anon_mkdir_write_enable=NO #关闭匿名创建目录

 36 #anon_mkdir_write_enable=YES

 17 local_enable=YES  #开启本地用户登录

 104 chroot_local_user=YES #禁锢用户只能在自己的家目录中

 105 #chroot_local_user=YES

106 allow_writeable_chroot=YES #添加,允许用户在自己家目录中可写

134 guest_enable=YES  #添加,开启虚拟用户登录

135 guest_username=vuser #添加,指定虚拟用户名

136 pam_service_name=vsftpd  #指定pam的服务名

120 listen=YES  #允许侦听ipv4

121 #listen=NO 

130 listen_ipv6=NO  #不允许侦听ipv6

131 #listen_ipv6=YES

8、重启服务 systemctl restart vsftpd

9,验证配置效果

ftp 192.168.23.157

ls     #列出刚创出来的文件

cd /etc/    #因为配置文件中设置禁锢在自己的家目录中

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

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

相关文章

蓝网科技临床浏览系统存在SQL注入漏洞

漏洞描述 蓝网科技临床浏览系统是一个专门用于医疗行业的软件系统,主要用于医生、护士和其他医疗专业人员在临床工作中进行信息浏览、查询和管理。在deleteStudy.php中的接口处存在SQL注入漏洞,未经身份验证的恶意攻击者利用 SQL 注入漏洞获取数据库中的…

QML学习 —— 32、自定义侧边滑动菜单(附源码)

效果 说明 侧滑菜单是应用中常见的从侧边划出菜单的效果。以滑动的方式从屏幕的左侧或右侧展开,为用户提供额外的导航选项或功能入口。侧边菜单的设计可以将应用的主要功能和内容以清晰的结构展示给用户,提升用户在使用应用时的便捷性和直观性。 代码 import QtQuick 2.12 i…

vue3项目部署在阿里云轻量应用服务器上

文章目录 概要整体部署流程技术细节小结 概要 vue3前端项目部署在阿里云轻量服务器 整体部署流程 首先有一个Vue3前端项目和阿里云应用服务器 确保环境准备 如果是新的服务器,在服务器内运行以下命令更新软件包 sudo apt update && sudo apt upgrade -y …

macos 14.0 Monoma 修改顶部菜单栏颜色

macos 14.0 设置暗色后顶部菜单栏还维持浅色,与整体不协调。 修改方式如下:

Redis设计与实现 学习笔记 第二十章 Lua脚本

Redis从2.6版本引入对Lua脚本的支持,通过在服务器中嵌入Lua环境,Redis客户端可以使用Lua脚本,直接在服务器端原子地执行多个Redis命令。 其中EVAL命令可以直接对输入的脚本进行求值: 而使用EVALSHA命令则可以根据脚本的SHA1校验…

关于相机选型的一些参数说明

上一篇:关于相机的一些参数计算(靶面、视野等) 目录 1.卷帘快门和全局快门1.1 卷帘快门1.2 全局快门PS:视觉伺服与快门选择 2.黑白和彩色3.CCD和CMOS3.1 CCD3.2 CMOSCCD VS CMOS 4.面阵和线扫4.1 面阵4.2 线扫4.3 面阵 VS 线扫 5.…

ubuntu设置程序开机自启动

文章目录 1、概述2、图形界面设置3、设置为Systemd服务 1、概述 测试环境:ubuntu22.04 带图形界面 实现方式1:通过图形界面的【启动应用程序】设置开机自启动; 实现方式2:通过配置为服务实现开机自启动。 2、图形界面设置 优点&am…

4.STM32之通信接口《精讲》之IIC通信---软件实现IIC《深入浅出》面试必备!

接下正式,进入软件编写IIC时序了,并实现对MPU6050的控制,既然是软件实现,那么硬件方面,我仅需两根控制线即可,即:数据控制线SDA,时钟控制线SCL。(人为软件层面定义的&…

使用mingw+CMake在Windows平台编译OpenCV

1. 安装mingw和cmake cmake的安装比较简单,百度一下完成相关操作即可,笔者安装的是3.24.3版本。 Mingw的安装也有很多相关文章,不过我使用的是安装QT时附带安装的mingw,其路径为D:\software\Qt\Tools\mingw1120_64。其中的bin文件…

2024APMCM亚太杯数学建模C题【宠物行业】原创论文分享

大家好呀,从发布赛题一直到现在,总算完成了2024 年APMCM亚太地区大学生数学建模竞赛C题的成品论文。 给大家看一下目录吧: 目录 摘 要: 10 一、问题重述 14 二.问题分析 15 2.1问题一 15 2.2问题二 15 2.3问题三…

win10中使用ffmpeg和MediaMTX 推流rtsp视频

在win10上测试下ffmpeg推流rtsp视频,需要同时用到流媒体服务器MediaMTX 。ffmpeg推流到流媒体服务器MediaMTX ,其他客户端从流媒体服务器拉流。 步骤如下: 1 下载MediaMTX github: Release v1.9.3 bluenviron/mediamtx GitHub​​​​​…

海康面阵、线阵、读码器及3D相机接线说明

为帮助用户快速了解和配置海康系列设备的接线方式,本文将针对海康面阵相机、线阵相机、读码器和3D相机的主要接口及接线方法进行全面整理和说明。 一、海康面阵相机接线说明 海康面阵相机使用6-pin P7接口,其功能设计包括电源输入、光耦隔离信号输入输出…

vue3(十七)-基础入门之vue-nuxt路由

一、路由 Nuxt.js 依据 pages 目录结构自动生成 vue-router 模块的路由配置。 要在页面之间使用路由&#xff0c;建议使用 < nuxt-link> 标签。 <template><nuxt-link to"/">首页</nuxt-link> </template>1、基础路由 pages 的目录结…

C++设计模式-中介者模式

动机(Motivation) 多个对象相互关联的情况&#xff0c;对象之间常常会维持一种复杂的引用关系&#xff0c;如果遇到一些需求的更改&#xff0c;这种直接的引用关系将面临不断的变化。在这种情况下&#xff0c;可以使用一种”中介对象“来管理对象间的关联关系&#xff0c;避免…

IntelliJ+SpringBoot项目实战(十四)--在SpringBoot中整合SpringSecurity和JWT(上)

SpringSecurity是大名鼎鼎的认证授权框架&#xff0c;在SSH时代就已经大放异彩。在JAVA项目中&#xff0c;权限框架的解决方案主要是以SpringSecurity和Shiro为主。JWT是目前主流的基于access-token的的认证框架&#xff0c;在项目中一般时SpringSecurity和JWT结合使用&#xf…

【AI系统】Tensor Core 架构演进

自 Volta 架构时代起&#xff0c;英伟达的 GPU 架构已经明显地转向深度学习领域的优化和创新。2017 年&#xff0c;Volta 架构横空出世&#xff0c;其中引入的张量核心&#xff08;Tensor Core&#xff09;设计可谓划时代之作&#xff0c;这一设计专门针对深度学习计算进行了优…

问题记录-Java后端

问题记录 目录 问题记录1.多数据源使用事务注意事项&#xff1f;2.mybatis执行MySQL的存储过程&#xff1f;3.springBoot加载不到nacos配置中心的配置问题4.服务器产生大量close_wait情况 1.多数据源使用事务注意事项&#xff1f; 问题&#xff1a;在springBoot项目中多表处理数…

java:aqs实现自定义锁

aqs采用模板方式设计模式&#xff0c;需要重写方法 package com.company.aqs;import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSynchronizer; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock;…

day11_JS初识_语法

day11_JS初识_语法 今日学习目标 : 入门HarmonyOS生态中 , ArkTS最基础的语法 JavaScript , 今天最主要的学习内容了解和掌握JavaScript的基础语法 , 并灵活的再后面开发过程进行使用 今日学习目标 什么是JavaScript JavaScript组成 JavaScript执行环境 JavaScript代码的书…

[C++]:IO流

1. IO 流 1.1 流的概念 在C中&#xff0c;存在一种被称为“流”的概念&#xff0c;它描述的是信息流动的过程&#xff0c;具体来说就是信息从外部输入设备&#xff08;比如常见的键盘&#xff09;传输到计算机内部&#xff08;像内存区域&#xff09;&#xff0c;以及信息从内…