Linux搭建 FTP服务器

news2024/11/25 5:51:25

Linux搭建 FTP服务器

vsftpd 是 very secure ftp daemon 的缩写,它是 Linux 上使用最受欢迎、使用最广泛的 FTP 服务器之一,它具有安全,速度快,稳定的特点,很多重要的 FTP 站点比如 ftp.gnu.org、ftp.freebsd.org 都是使用 vsftpd 作为服务器的。

说明

工作模式

服务器使用两个端口和客户端通信,一个是命令端口,也叫控制端口,默认是 21, 用于命令的传输 ,一个是数据端口,默认是 20 ,用于数据的传输。

  • 主动模式

    客户端向FTP服务器发送端口信息,由服务器主动连接该端口

    流程:客户端和FTP服务器的命令端口(21)建立TCP连接,当需要传输数据时,客户端新启动一个用于数据传输的端口,并在命令端口的连接上用 PORT 命令告诉服务器该端口号,服务器与该端口建立TCP连接,连接成功之后,客户端开始传输数据

  • 被动模式

    客户端向FTP服务器发送端口信息,由服务器主动连接该端口

    流程:客户端和FTP服务器的命令端口(21)建立TCP连接,当需要传输数据时,客户端新启动一个用于数据传输的端口,并在命令端口的连接上用 PORT 命令告诉服务器该端口号,服务器与该端口建立TCP连接,连接成功之后,客户端开始传输数据

建议:

1、大多数FTP客户端都在局域网中,没有独立的公网IP地址,且有防火墙阻拦,主动模式下FTP服务器成功连接到客户端比较困难。因此,如无特殊需求,都是将FTP服务器配置为被动模式,本文后面的FTP服务器配置也是以被动模式为例的。

2、被动模式下,命令端口和数据端口都是在FTP服务器端开启,也都可以通过启动配置来修改,由于默认的端口是公开的,安全性低,所以实际安装的时候都会修改默认端口。

用户认证模式

  • 匿名用户模式

    任何人无需密码验证就可以直接登录到FTP服务器。这种模式最不安全,一般只用来保存不重要的公开文件,不推荐在生产环境中使用

  • 本地用户模式

    通过Linux系统本地账号进行验证的模式,相较于匿名用户模式更安全。

  • 虚拟用户模式

    FTP服务器的专有用户。虚拟用户只能访问Linux系统为其提供的FTP服务,而不能访问Linux系统的其它资源,进一步增强了FTP服务器的安全性。

匿名用户模式一般用于不重要的于公开文件,并且只提供下载服务,也就是说,用户只能下载,不能有其他操作,本地用户模式通过配置锁定目录、修改命令端口和数据端口 可以进一步增强安全性,本文后面的配置是以该模式为例的。

安装

#安装前可以使用下面的命令检查是否已安装
$ vsftpd -v
-bash: vsftpd: 未找到命令
#安装 vsftpd
$ yum install vsftpd
#安装完成后,执行 vsftpd -v 命令,如果输出版本号,表示安装成功
$ vsftpd -v
vsftpd: version 3.0.2
#配置服务器  默认的配置位于 /etc/vsftpd/vsftpd.conf

vsftpd.conf

  • 访问权限
#是否允许匿名登录,默认允许,如果允许,用户名 ftp 和 anonymous 都会被当做匿名登录
#为了安全,一般不允许匿名登录
anonymous_enable=NO

#是否允许匿名上传,默认不允许,如果允许 write_enable 选项需要设置为 YES
#为了安全,一般不允许
anon_upload_enable=NO

#是否允许本地用户登录,默认不允许,如果允许,在 ```/etc/passwd```中的用户都可以登录 FTP 服务器
#如果不予许匿名登录的话,这个选项需要设置为允许
local_enable=YES

#是否允许在FTP服务器上写入, 默认不允许,如果有上传文件、删除文件等需求,一般都是开启的
write_enable=YES

#设置写入服务器文件的权限掩码值,如果值是八进制需要以 0 开头,否则会当作十进制
#值为 022,能满足大部分FTP的需求
local_umask=022
  • 锁定访问目录
#默认为 NO, 如果设置为 YES,表示用户通过FTP客户端登录之后
#只能在FTP服务器指定的目录中,不允许切出目录,
chroot_local_user=YES

#定义用户 FTP 主目录,用户登录成功之后,vsftpd 服务器会切换到此目录,
#此时 FTP 客户端会位于此目录中,后续的上传以及下载都是针对这个目录的
local_root=/data

登录的用户锁定在指定的目录中,避免用户访问不应该访问的目录,这里我们设置成data目录,例如:新添加一个用户 testuser 专门用于上传下载, testuser 通过 FTP 客户端成功登录后,会自动切换到 /data 目录,并且不允许切出该目录

注意:用户上传和下载都是在限定的目录中,所以一般都是把锁定目录设置到剩余空间比较大的磁盘中

  • 限定用户登录
#如果设置为 YES ,vsftpd 将会从 userlist_file 选项指定的文件读取用户列表
userlist_enable=YES

#设置用户列表配置文件, 如果 /etc/vsftpd/user_list 不存在需要手工创建
userlist_file=/etc/vsftpd/user_list

#此选项检查 userlist_enable 选项,当 userlist_enable 为 YES 时
#如果 userlist_deny 设置为 NO , 表示只允许 userlist_file 中的用户登录
#如果 userlist_deny 设置为 YES, 表示禁止 userlist_file 中的用户登录,允许其他用户登录
userlist_deny=NO
  • 修改端口
#如果启用,vsftpd 将在独立模式下运行,vsftpd 本身将负责侦听和处理传入的连接
listen=YES

# 跟 listen 选型类似,但是此选项是侦听在 IPV6 上的 socket
# 而 listen 是 IPV4, 此选项和 listen 是互斥的,不能同时设置为 YES
listen_ipv6=NO

#服务器侦听端口,也是命令端口, 默认是21,修改之后, 防火墙需要做相应的调整
#同时 FTP 客户端登录的时候需要指定端口号
#为了增强安全性,配置的时候一般都会修改
listen_port=21

#开启被动模式
pasv_enable=YES

#被动模式下,服务器的地址,默认是内网地址
#如果在云服务器上部署,需要修改成公网IP
pasv_address=170.18.9.141

#设置被动模式下,建立数据传输可使用的端口范围的最小值。
#建议把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性
pasv_min_port=50000

#设置被动模式下,建立数据传输可使用的端口范围的最大值
pasv_max_port=50010
  • 日志配置
#是否记录上传下载日志,默认是不记录,如果设置为记录
#默认日志文件位于 /var/log/vsftpd.log, 如果配置了 vsftpd_log_file 选项,会覆盖默认日志文件
xferlog_enable=YES

#记录上传下载的日志
xferlog_file=/var/log/xferlog

#是否按照标准格式记录日志
xferlog_std_format=YES

设置防火墙

$ firewall-cmd --zone=public --add-port=21/tcp --permanent
$ firewall-cmd --zone=public --add-port=50000-50010/tcp --permanent
$ firewall-cmd --reload

启动服务

配置完 /etc/vsftpd/vsftpd.conf ,设置好防火墙之后,执行下面的命令启动服务器
$ systemctl start vsftpd

$ systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2022-12-07 13:20:02 CST; 20min ago
  Process: 7976 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
 Main PID: 7978 (vsftpd)
    Tasks: 1
   Memory: 640.0K
   CGroup: /system.slice/vsftpd.service
           └─7978 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

Dec 07 13:20:02 registry systemd[1]: Starting Vsftpd ftp daemon...
Dec 07 13:20:02 registry systemd[1]: Started Vsftpd ftp daemon

#设置开机自启
$ systemctl enable vsftpd
# 可以确认服务器的命令端口是否开启
$ netstat -antup | grep vsftpd
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      7978/vsftpd

新建FTP用户

$ useradd test
$ passwd test

新建 FTP 目录,并修改目录权限

$ mkdir -p /data/ftp
$ chown test.tset /data
$ chmod -R 500 /data
$ chmod -R 777 /data/ftp

注意:/data 是锁定目录,test 登录之后,只能呆在此目录以及此目录的子目录中,不允许切换到其他目录锁定目录必须要去掉可写权限,不然用户会无法登录

“/data/ftp” 目录是实际的上传下载的目录,所以需要有可读写和可执行权限

最后,还需要把用户名加入到FTP服务器允许登录的用户列表中,也即 /etc/vsftpd/vsftpd.conf 中 userlist_file 选项对应的文件 /etc/vsftpd/user_list 中,如果 user_list 不存在,需要手工创建并把 test添加进去。

测试

服务器全部搭建好之后,需要进行测试,这里我准备的 FTP服务器的IP是170.18.9.141, FTP客户端机器的IP是170.18.9.140

进入FTP客户端机器的 /opt目录,新建一个 test.txt 测试文件

$ cd /opt/ && vim test.txt

测试上传下载需在FTP客户端机器上安装 FTP 客户端, 执行以下命令进行安装,如已安装,可忽略

$ yum install ftp

里我准备的 FTP服务器的IP是170.18.9.141, FTP客户端机器的IP是170.18.9.140

进入FTP客户端机器的 /opt目录,新建一个 test.txt 测试文件

$ cd /opt/ && vim test.txt

测试上传下载需在FTP客户端机器上安装 FTP 客户端, 执行以下命令进行安装,如已安装,可忽略

$ yum install ftp

ftp删除目录

注意:目录下有文件,直接删除目录会失败,提示550 Remove directory operation failed.
必须先将目录下的文件都删除,才能删除目录
$ rmdir 目录名

ftp删除文件

$ delete 文件名

文章转载地址:https://www.cnblogs.com/wanng/p/how-to-install-ftp-server.html

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

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

相关文章

【JavaWeb开发-Servlet】day03-URL参数传递与MySQL数据库连接

目录 1、登录示例,谁用url传递参数 (1)创建一个Servlet类,名字叫做loginServlet (2)保留需要的部分 (3)删除多余代码 (4)编写loginServlet.class &#xff08…

ICV:2022年中国车载摄像头市场规模有望突破50亿美元大关

全球前沿科技咨询机构ICV近期发布了全球车载摄像头的市场分析报告。ICV在报告中指出,车载摄像头市场随着乘用车自动驾驶的发展呈现出快速增长的趋势,2022年中国市场在全球范围内仍保持“市场领跑者”的地位,并有望突破50亿美元市场规模的大关…

Win10如何安装JDK1.8,最快最详细教程

JDK全称为Java Development Kit,顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包。 JRE全称为Java Runtime Environment,顾名思义是java运行时的环境,包含了java虚拟机,java基础类库&…

ABAP-SAP-整合事务码,整合平台,运维工具箱

PROCESS BEFORE OUTPUT. MODULE status_0100. * PROCESS AFTER INPUT. MODULE user_command_0100. MODULE exit_command_0100 AT EXIT-COMMAND. 源码: **Project Name : SAP Implementation Project **Program Name : ZTOOL **Description : 运维工具箱 **Date/Aut…

比羊了个羊还火的ChatGPT,玩法全攻略讲解

大家好,我是洋子,昨天听闻了ChatGPT,真的非常强大,赶紧给大家安利一波 ChatGPT是一种由OpenAI开发的通用聊天机器人模型 该模型是基于GPT-3(一种大型语言模型)构建的,旨在提供与人类更加自然的…

Pig4Cloud之登陆验证(二)发放token

上一篇介绍了客户端认证处理,那是令牌颁发的前提。这篇开始,我们就来研究下令牌颁发。 令牌颁发 授权服务器提供令牌颁发接口(/oauth2/token),由客户端发起请求,授权服务器生成访问令牌(acces…

常见的并发线程面试题

常见的并发面试题 一.进程与线程的区别? 进程是操作系统进行资源分配的最小单元,线程是操作系统进行运算调度的最小单元。进程中包含了线程,线程属于进程。进程的内存和资源是该进程下的线程所共享的。 二.创建线程的方式以及区别? 继承Thread类&am…

vue源码中的nextTick是怎样实现的

一、Vue.nextTick 内部逻辑 在执行 initGlobalAPI(Vue) 初始化 Vue 全局 API 中,这么定义 Vue.nextTick。 function initGlobalAPI(Vue) {//...Vue.nextTick nextTick; }可以看出是直接把 nextTick 函数赋值给 Vue.nextTick,就可以了,非常…

leetcode-每日一题-二进制表示中质数个计算置位(简单,popcount算法)

从这道题了解到了一个时间复杂度为o(1)的一个计算一个数转换为二进制时1存在的个数问题,很巧妙运用了二分来求解,代码如下 unsigned popcount (unsigned u) {u (u & 0x55555555) ((u >> 1) & 0x55555555);u (u & 0x33333333) ((u…

API接口使用方法(封装好的电商平台)

为了进行此平台API的调用,首先我们需要做下面几件事情。 1、 获取一个KEY。 点击获取 2、 参考API文档里的接入方式和示例。 3、查看测试工具是否有需要的接口,响应实例的返回字段是否符合参数要求。 4、利用平台的文档中心和API测试工具&#xff0c…

自定义网页中被选中文本的样式 CSS selection

文章目录两张图自定义被选中文本的样式::selection 选择器的可填属性::selection 选择器支持的CSS属性 完整版 demo浏览器兼容官网文档两张图 对于选中的文本(准确地说应该是被选中的DOM元素),浏览器的默认样式:淡青色的背景色。 2. 自定义样式&#xf…

[说明] Doris使用培训

参考文献 apache doris在蜀海供应链数仓建设中的实践 应用实践 | 数仓体系效率全面提升!同程数科基于 Apache Doris 的数据仓库建设 一、doris的背景介绍 doris的使用场景 实时/离线一体的数仓 借用一句话: Uniq 模型拳打KUDU、HUDI,Agg…

[LeetCode 1775]通过最少操作数使数组的和相等

题目描述 题目链接:[LeetCode 1775]通过最少操作数使数组的和相等 给你两个长度可能不等的整数数组 nums1 和 nums2 。两个数组中的所有值都在 1 到 6 之间(包含 1 和 6)。 每次操作中,你可以选择 任意 数组中的任意一个整数&a…

openEuler kubesphere kubekey 安装 ceph csi 及使用实例

按照官方文档,很轻松就可以进行安装, 安装过程中遇到一些疑问, 在安装后也得到清晰的理解 1. /root/ceph-csi-rbd.yaml 这里面的clusterId 按理说应该是ceph的clusterId, 不过官方文档并没有首重强调修改,暂时保持默认 下面6789端口就是我们在物理机上安装的ceph mon的主机i…

PCB设计指南:安规、布局布线、EMC、热设计、工艺

文章目录Part 1 安规距离要求部分一、爬电距离和电气间隙距离要求:Part 2 抗干扰、EMC部分一、长线路抗干扰二、小信号走线尽量远离大电流走线,忌平行,D>2.0mm。三、小信号线处理:电路板布线尽量集中,减少布板面积提…

广州蓝景分享—实用的CSS技巧,助你成为更好的开发者

Hello~~各位小伙伴,相信在前端开发项目中,CSS实现如修改输入占位符样式,多行文本溢出,隐藏滚动条,修改光标颜色,水平和垂直居中等等,这些都是我们非常熟悉的开发场景!前端开发者几乎…

HashMap部分源码解析

作者:~小明学编程 文章专栏:Java数据结构 格言:目之所及皆为回忆,心之所想皆为过往 目录 前言 常量字段 构造方法 put方法 确定初始容量 为何我们的数组的大小要是2的n次幂 hash为何要异或其高位 扩容机制 前言 我们在前…

极客时间Kafka - 04 Kafka生产者和消费者拦截器

文章目录1. 什么是拦截器?2. Kafka 拦截器3. 典型使用场景4. 案例分享1. 什么是拦截器? 如果你用过 Spring Interceptor 或是 Apache Flume,那么应该不会对拦截器这个概念感到陌生,其基本思想就是允许应用程序在不修改逻辑的情况…

无人机边缘计算中的计算卸载——Stackelberg博弈方法论文复现附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

不会还有人不会热修复吧?

Class流派原理 基本原理:加载类的时候是找element,每个element对于一个dex。我要把我修复的那个类单独放到dex插入dexlist前面,在你做类加载从前往后找优先从你的dex加载加载的就是你修复后的class.这就是 实现代码 通过context拿到pathClassLoader&am…