Ubuntu搭建FTP(vsftpd)文件服务器

2023-11-17

前言

在开始介绍ftp服务器如何搭建前,先来介绍一些名词概念,以下名词均和文件服务器有关。

SSH(Secure Shell):ssh是加密的shell,最初是用来替代telnet等无加密的远程登陆,相应的一个服务器是sshd。

SSL(Secure Socket layer):是一个标准的加密和验证身份协议。

FTP(File Transfer Protocol):是一个传输协议,相应地衍生出基于这个协议的FTP服务器;例如在地址栏输入ftp://ip/就代表使用ftp协议,另外,在命令行输入ftp命令也可以进行远程连接,它会进入一个交互式的shell,包含一些ls,get等基本的命令。

vsftpd(Very secure ftp daemon):就是一个非常安全的ftp服务程序,它是从ftp衍生出来的,提供更高的安全度,但是功能不够ftp齐全。

ftps:它为ftp添加了加密功能,但一般我们不直接这样称呼它,其实它就是vaftpd加上openssl这个加密函数库,就像http加上openssl就是https,以后用vsftpd代替这个称呼就行,只要vsftpd支持了SSL模块。

SFTP(Secure file transfer protocol):就是一个安全的文件传输协议,它是搭配sshd服务使用的,也就是说,必须先开启sshd服务(打开22默认断开)通过ssh通道加密通信数据。(我有一篇博文有介绍如何通过ssh通道实现加密第三方的通信数据)

SCP(Secure copy):安全的文件复制,和sftp是差不多的,都是搭配sshd使用,也是加密通信,只是命令使用不想同罢了。

另外,FTP是使用TCP数据包协议。


FTP连接方式

FTP主动式连接

图.1 FTP服务器的主动式连接示意图

FTP服务器通道分两种,一个是命令通道,不涉及文件传输时就只使用这个通道传输命令;当涉及文件传输时,会再进行三次握手建立数据传输通道。也就是下方的Port AA和Port BB处的箭头在要求传输文件时才会发生。

主动连接带来的问题:

当在客户端和服务端之间有防火墙时,比如局域网都会使用防火墙的NAT功能,第三个箭头会发生问题,防火墙会拒绝FTP Server的连接。不知道为什么的,建议学习什么是NAT.


有两个方法可以解决这个问题:

①使用modprobe 加载ip_conntrack_ftp\ip_nat_ftp等模块。

②下面说的被动式连接。

FTP被动式连接

被动式解决了主动式带来的NAT的问题,通过客户端主动连接,在NAT转发表中存有对应的映射。

不过,一种极端的情况是,客户端和服务端都是在局域网内,那么就需要在网关那里设置一下转发功能了,也可以了解一下内网穿透了解相关知识。

图.2 FTP被动式数据流连接示意图


准备工作

好了,了解了上面这些概念后,来搭建vsftpd。

安装vsftpd

#apt-get install vsftpd
安装完后默认是启动了
# netstat -tulnp | grep vs
tcp6       0      0 :::21                   :::*                    LISTEN      15592/vsftpd
已经开打21端口监听。


相关文件及配置

/etc/vsftpd.conf vsftpd主要配置文件

/etc/ftpusers 里面列出了哪些用户不能用于远程登陆,是PAM模块的限制

/etc/pam.d/vsftpd vsftpd使用PAM模块时的相关配置文件

/var/ftp 默认没有ftp这个目录,自己新建,匿名用户登陆时就是在这个目录。(FTP也具备chroot功能)

还有一些其它配置文件,默认没有,需要用时可以查看vsftpd.conf文件,根据要求的文件名,自己新建在相应的目录下即可。如chroot_list可以在vsftpd层用于限制或允许什么账号可以登陆。

另外,像/etc/host.allow和/etc/host.deny对ftp也是有效的。


vsftpd.conf使用

如在里面添加:

userlist_enable=YES      <===    是否借助vsftpd阻挡机制处理某些用户
userlist_deny=YES      <===   当userlist_enable为yes才生效,代表列出user_list的用户将不能远程登陆ftp服务器
userlist_file=/etc/user_list      <===   此时需要在相应目录创建相应的文件
注意,如果userlist_enable为yes,而userlist_deny为no,那就意味着只有列在user_list文件中的用户才能登陆。

看下其它选项,这里我们设置登陆限制。(ftp支持三种用户登陆,分别是实体用户、访客和匿名用户,分别有不同的权限)

在vsftpd.conf里:

guest_enable=YES    <===   访客可以访问,此时任何实体账号均被假设成为guest(所以默认不开放)。
local_enable=YES   <===  主机的用户可以远程登陆,但在上面userlist_file提到的,如果有限制的话也不能登陆
anonymous_enable=YES   <=== 匿名用户可登陆,账号密码默认都是anonymous

当然,vsftpd.conf还有很多参数设置,还有一些防火墙(iptables命令)、selinux等一些安全措施的设置这里不展开了。


使用

确定vsftpd启动后,在客户端命令行登陆:

# ftp localhost
Connected to localhost.
220 (vsFTPd 3.0.2)
Name (localhost:jammgit): jammgit
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

输入实体用户账号和密码就进入交互环境了,利用get [filename]即可下载文件。

另外,也可以直接在浏览器访问了,如firefox:

图.3

这里是访客模式了,/var/ftp目录被chroot为根目录了:

:/var/ftp# ls -la
总用量 12
drwxr-xr-x   2 root root 4096  4月  2 14:36 .
drwxr-xr-x. 15 root root 4096  4月  2 14:35 ..
-rw-r--r--   1 root root   25  4月  2 14:36 index.html

基本就是这样了,更深入的学习待续。



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

Ubuntu搭建FTP(vsftpd)文件服务器 的相关文章

  • 在Linux中断上下文中运行用户线程

    我正在编写一些定制的应用程序 并允许更改 Linux 内核中的中断处理程序代码 我有一个用户线程正在等待中断发生 如果发生中断 那么我要做的第一件事就是执行该用户线程 有什么办法让它发挥作用吗 Thanks 创建一个字符设备 这就是内核所做
  • 在 Ubuntu 16.04 上找不到 printf.c

    我最近切换到Ubuntu 16 04 我在用vscode作为 Ubuntu 上的 IDE 我配置了其他语言 但我无法做到这一点C C 我创建c cpp properties json launch json tasks json 当我开始编
  • 从 TypeScript 运行任何 Linux 终端命令?

    有没有办法直接从 TypeScript 类中执行 Linux 终端命令 这个想法是做类似的事情 let myTerminal new LinuxTerminal let terminalResult myTerminal run sudo
  • 适用于 KDE 和 Gnome 的 Gui [重复]

    这个问题在这里已经有答案了 我想为一个现在是 CLI 的应用程序编写一个 gui 它需要在 KDE 和 Gnome DE 中 看起来不错 充分利用用户的外观设置 如果我选择 Qt 或 GTK 我能够做到这一点吗 它们与两个 DE 集成良好吗
  • 从多线程程序中调用 system()

    我们正在开发一个用 C 编写的多线程内存消耗应用程序 我们必须执行大量的 shellscript linux 命令 并获取返回码 读完之后article http www linuxprogrammingblog com threads a
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • 如何查找连接到 AF_INET 套接字的客户端的 UID?

    有什么方法或类似的东西ucred for AF UNIX如果是AF INET插座 TCP在我的例子中 找出连接到我的套接字的客户端的UID 还有 proc net tcp但它显示了UID of the creator插座的而不是连接的cli
  • Bash 脚本大小限制?

    我有一个 bash 脚本 在 RHEL 或 OS X 上运行时出现以下错误 第 62484 行 意外标记 换行符 附近出现语法错误 第 62484 行 o gz 这是一个自动生成的脚本 用于解决我公司使用的 Grid Engine 计算集群
  • Docker:处理 tar 文件时出错(退出状态 1):设置枢轴目录时出错:不是目录

    我是 Docker 新手 不知道是什么原因导致此错误或如何诊断它 任何有关此问题的具体帮助或有关首先检查何处以诊断此类问题的提示将不胜感激 我的 Dockerfile FROM java 8 Install maven RUN apt ge
  • Linux shell 脚本中的 while 循环超时

    这工作正常 无限循环 while TRUE do printf done 我在尝试着timeout this while loop与timeout命令 所有这些都不起作用 timeout 5 while TRUE do printf don
  • 触发“对等方重置连接”

    我想测试当发生 对等方重置连接 错误时我们的应用程序 嵌入式 ftp 服务器 中发生的日志记录 这个帖子 https stackoverflow com questions 1434451 connection reset by peer很
  • 在 /dev/input/eventX 中写入事件需要哪些命令?

    我正在开发一个android需要将触摸事件发送到 dev input eventX 的应用程序 我知道C执行此类操作的代码结构如下 struct input event struct timeval time unsigned short
  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • bluetoothctl 到 hcitool 等效命令

    在 Linux 中 我曾经使用 hidd connect mmac 来连接 BT 设备 但自 Bluez5 以来 这种情况已经消失了 我可以使用 bluetoothctl 手动建立连接 但我需要从我的应用程序使用这些命令 并且使用 blue
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 无法加载 JavaHL 库。- linux/eclipse

    在尝试安装 Subversion 插件时 当 Eclipse 启动时出现此错误 Failed to load JavaHL Library These are the errors that were encountered no libs

随机推荐

  • FreeRTOS笔记(二)

    FreeRTOS笔记 二 静态任务 文章目录 FreeRTOS笔记 二 静态任务 一 任务定义 二 任务创建 2 1 定义任务栈 2 2 定义任务函数 2 3 定义任务控制块 2 4 实现任务创建函数 三 实现就绪列表 3 1 定义就绪列表
  • PCL去除地面

    如图所示 分别是 原图 gt 直通滤波后 gt 取地面的图 gt 取地面的凹凸四边行加地面上的物体图
  • C++初学知识点总结

    C 学习笔记 1 namespace 所谓的namespace就是指标识符的各种可见范围 C 标准程序中的所有标识符都被定义于一个名为std的namespace中 2 iostream与iostream h的差别 差别当然不只是一个带后缀
  • redis做计数器相关

    最近在准备晋升PPT 发现品牌粉丝数和新浪微博的计数本质一样 哎 之前就发现了 就是没深入 要深入啊 品牌粉丝数设计相关 a Redis在计数器场景上的应用 http www searchdatabase com cn showconten
  • Unity SpriteAtlas实战使用

    前言 图集计划使用sprite atlas 但是看了网上资料用于实战的有点少 自己总结下 Unity 版本2019 4 9f1 图集设置 Sprite Packer Mode Disabled 就是不会生成图集 Enable For Bui
  • 二叉树的先序,中序,后序遍历

    java 二叉树的先序 中序 后序遍历 一 前序遍历 访问顺序 先根节点 再左子树 最后右子树 上图的访问结果为 GDAFEMHZ 1 递归实现 public void preOrderTraverse1 TreeNode root if
  • 自动化测试与禅道工具

    目录 1 什么是自动化测试 2 自动化测试分类 1 单元测试 2 接口自动化测试
  • 经验:数据库中性别、状态、字典使用什么字段?

    结论 使用char类型 长度为1 0表示女 1表示男 char类型可以在java中转换成String 方便前端进行判断转换 而且方便在Java代码中进行转换 比如excel导出时使用 如 gender gender equals 1 男 女
  • 纯前端--原生js将html页面变成pdf文件(html2canvas+jsPDF)

    一 html2canvas 将dom变成图片 下载或者安装html2canvas 官网 1 将文档放在本地 用原生js进行引用和使用 新建一个名为 html2canvas min js 的文件 并且将线上的内容进行复制 引入 js 文件 j
  • java+ssm汽车维修管理系统

    项目介绍 java ssm汽车维修管理系统 java ssm汽车维修管理系统 技术和环境 技术 ssm html jq 环境 jdk1 7 mysql5 7 tomcat8 x idea eclipse 数据库表的数量 7张 是否为mave
  • element-ui实现多级checkbox关联选择(权限管理)

    1 依赖element ui 只是使用了el checkbox 可以很轻松替换掉 效果图
  • 告诉你外汇交易中心最有可能掉入的九个坑

    一 外汇真能赚钱吗 预期目标多少才算合理 玩外汇的人越来越多 大部分人都是奔着暴利去的 但是现实很残酷 这个市场95 的人都是亏钱的 努力多年都不一定能赚多钱 所以想入坑的人 如果没有足够的经济支撑 不要参与这个残酷的游戏 外汇的难度大于期
  • SQL语句中的条件查询

    条件查询 什么是条件查询 不是将表中所有数据都查出来 而是查询出符合条件的 语法格式 select 字段1 字段2 from 表名 where 条件 具体条件有 lt lt gt gt 或 lt gt between and is null
  • NetCDF文件概要与读写

    NetCDF简介 NetCDF network Common Data Format 即网络通用数据格式 最早是由美国国家科学委员会资助之计划 Unidata 所发展 其用意是在Unidata计划中不同的应用项目下 提供一种可以通用的数据存
  • python抽学号程序_Python编写编程作业批量自动打分程序的思路与实现

    总体思路 把接口明确地告诉学生 本文后面的代码要求学生程序中必须有个函数叫做searchOnede 然后学生把Python程序文件 学号 姓名 py 以任何方式提交给老师 放到同一文件夹中 下面的代码首先由老师编写一个自己认为的最佳和最优实
  • React中的合成事件

    Synthetic Event 合成事件是围绕浏览器原生事件 充当跨浏览器包装器的对象 它们将不同浏览器的行为合并为一个API 这样做是为了确保事件再不同浏览器中显示一致的属性 合成事件的基本操作 基础语法 在JSX元素上 直接基于onXx
  • 【春秋云境】CVE-2022-2073靶场WP和CVE-2022-1014靶场WP

    春秋云境 CVE 2022 2073靶场WP 网站地址 https yunjing ichunqiu com 渗透测试 1 已知提示 Grav CMS 可以通过 Twig 来进行页面的渲染 使用了不安全的配置可以达到远程代码执行的效果 影响
  • 循环神经网络——上篇【深度学习】【PyTorch】【d2l】

    文章目录 6 循环神经网络 6 1 序列模型 6 1 1 序列模型 6 1 2 条件概率建模 6 1 2 代码实现 6 2 文本预处理 6 2 1 理论部分 6 2 2 代码实现 6 3 语言模型和数据集 6 循环神经网络 6 1 序列模型
  • 附答案

    1 什么是机器学习 简单的说 机器学习就是让机器从数据中学习 进而得到一个更加符合现实规律的模型 通过对模型的使用使得机器比以往表现的更好 这就是机器学习 对上面这句话的理解 数据 从现实生活抽象出来的一些事物或者规律的特征进行数字化得到
  • Ubuntu搭建FTP(vsftpd)文件服务器

    前言 在开始介绍ftp服务器如何搭建前 先来介绍一些名词概念 以下名词均和文件服务器有关 SSH Secure Shell ssh是加密的shell 最初是用来替代telnet等无加密的远程登陆 相应的一个服务器是sshd SSL Secu