FTP服务

2023-05-16

1 FTP简介
FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,比如Windows下的Serv-U FTP Server,Linux下的ProFTPD,本文的主角vsftp等,而所有这些应用程序都遵守同一种协议以传输文件。一般在各种linux的发行版中,默认带有的ftp软件是vsftp,从各个linux发行版对vsftp的认可可以看出,vsftp应该是一款不错的ftp软件。这篇文章主要介绍了Linux环境下快速搭建ftp服务器方法介绍,分享了相关代码示例。

2 服务模式

2.1主动模式FTP
主动模式-/standard/port方式,服务器使用20端口连接客户端。主动模式下,FTP客户端从任意的非特殊的端口(N > 1023)连入到FTP服务器的命令端口–21端口。然后客户端在N+1(N+1 >= 1024)端口监听,并且通过N+1(N+1 >= 1024)端口发送命令给FTP服务器。服务器会反过来连接用户本地指定的数据端口,比如20端口。
以服务器端防火墙为立足点,要支持主动模式FTP需要打开如下交互中使用到的端口:
FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接)
FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令)
FTP服务器数据(20)端口到客户端端口(>1023)(服务器初始化数据连接到客户端数据端口)
FTP服务器数据(20)端口接受客户端端口(>1023)(客户端发送ACK包到服务器的数据端口)
用图表示如下:
在这里插入图片描述

2.2被动模式FTP
被动模式-/passive/pasv方式。为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N >; 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P >; 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:
FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接)
FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令)
FTP服务器数据端口(>1023)接受客户端端口(>1023)(客户端初始化数据连接到服务器指定的任意端口)
FTP服务器数据端口(>1023)到客户端端口(>1023)(服务器发送ACK响应和数据到客户端的数据端口)
用图表示如下:
在这里插入图片描述

2.3两种模式的比较
主动模式对ftp对服务器管理有利,是由FTP服务器主动与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞。而被动模式对客户端管理有效,它是企图 与服务端的随机端口建立连接但是这个端口很可能又会被服务端的防火墙所拒绝。
一般做安全措施我们是在被动模式下做,由于主动模式是打开一个端口给客户端传送数据,我们做安全措施都是基于端口来做所以不太好做,一般也不建议去做。但是被动模式也是在不停地放端口,所以慢慢的ftp慢慢的在淘汰。

3 linux环境配置
3.1 安装 vsftpd
首先挂载光盘sr0并且配置yum文件:
[root@localhost ~]# mount /dev/sr0 /mnt
[root@localhost ~]# mount /dev/sr0 /mnt(挂载光盘sr0)
[root@localhost ~]#vim /etc/yum.repos.d/base.repo(配置yum文件)
[base] (源)
name=base (源名称)
baseurl=file:///mnt (本地连接)
gpgcheck=0 (要不要验证签名,验证为1 ,要拿到签名才能验证)
[root@localhost ~]# yum install vsftpd -y
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf //打开主配置文件
[root@localhost ~]# vim /var/ftp/pub //打开从配置文件

3.2 关于vsftpd配置文件
[root@ localhost ~]# ls -l /etc/vsftpd
total 32
-rw-r–r-- 1 root root 13 Mar 16 15:14 chroot_list
-rw------- 1 root root 125 May 11 2016 ftpusers
-rw------- 1 root root 361 May 11 2016 user_list
-rw------- 1 root root 4644 Mar 16 15:13 vsftpd.conf
-rw------- 1 root root 4599 Mar 16 14:12 vsftpd.conf_bak
-rwxr–r-- 1 root root 338 May 11 2016 vsftpd_conf_migrate.sh
/etc/vsftpd/vsftpd.conf:vsftpd 的核心配置文件
/etc/vsftpd/ftpusers:用于指定哪些用户不能访问FTP 服务器。 黑名单
/etc/vsftpd/user_list:指定允许使用vsftpd 的用户列表文件。 白名单
[root@localhost ~]#vim /etc/vsftpd/user_list
#如果userlist_deny= YES(默认),绝不允许在这个文件中的用户登录ftp,甚至不提示输入密码
#prompt 提示
/etc/vsftpd/vsftpd_conf_migrate.sh:是vsftpd 操作的一些变量和设置脚本
/var/ftp/:默认情况下匿名用户的根目录

3.3 主配置文件的详解
anonymous_enable=YES //是否启用匿名用户
local_enable=YES
write_enable=YES //允许写入(无论是匿名用户还是本地用户要实现上传就需要快开启它)
local_umask=022 //默认本地用户上传文件权限755
dirmessage_enable=YES //显示每个目录下的文件信息
xferlog_enable=YES //日志启用
connect_from_port_20=YES //主动请求的数据端口
chown_uploads=YES //所有匿名用户上传的文件所属用户将会被改成chown_username
chown_username=whoever //匿名上传的所属用户名是whoever
xferlog_file=/var/log/xferlog //启用的日志文件
xferlog_std_format=YES
idle_session_timeout=600 //空闲连接超时
data_connection_timeout=120 //数据连接超时
nopriv_user=ftpsecure //当服务器运行于最底层时使用的用户名
chroot_list_enable=YES chroot_local_user=YES //所有文件列出用户, 可以切换到其他目录
chroot_list_file=/etc/vsftpd/chroot_list
listen=NO //服务将自己监听处理listen_ipv6=YES
pam_service_name=vsftpd //设置PAM认证模块使用名称预设为vsftpd
userlist_enable=YES
tcp_wrappers=YES //服务端和客户端访问控制策略(服务器级别的一种防火墙)
Mime

4 搭建FTP服务器

4.1匿名用户
1、[下载]
默认配置即可实现
[root@localhost ~]# echo hehe > /var/ftp/pub/hehe.txt
去ie浏览器访问:ftp://192.168. .
windows资源管理器中:ftp://192.168. .
2、[上传]
#修改配置文件中匿名上传的相关选项
[root@ldap ftp]# vim /etc/vsftpd/vsftpd.conf
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
#修改匿名用户目录的权限
[root@ldap ftp]# chmod 777 pub/
#测试可以上传 和下载文件但是不能删除文件
#修改匿名上传布尔值
[root@ldap var]# getsebool -a | grep ftpd_anon_write
ftpd_anon_write --> on
[root@ldap ftp]# setsebool ftpd_anon_write on
#修改匿名上传的上下文权限
[root@ldap var]# ll -Z /var/ftp
drwxr-xrwx. root root system_u:object_r:public_content_rw_t:s0 pub
[root@ldap ftp]# chcon -t public_content_rw_t pub/
3、[删除]
#修改配置文件,添加如下选项
[root@ldap ftp]# vim /etc/vsftpd/vsftpd.conf
anon_other_write_enable=YES
再上传下载的前提下可以删除文件,以及替换文件

4.2本地用户
1、[下载]
#修改主配置文件开启本地用户权限
[root@ldap ftp]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
默认上来是在用户的家目录,匿名用户上来默认是在/var/ftp/pub目录下
注释以下三行:
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
#修改布尔值打开/home目录的权限
[root@localhost haha]# getsebool -a | grep ftp_home_dir
ftp_home_dir --> off
[root@localhost haha]# setsebool -P ftp_home_dir on
2、[上传]
#修改主配置文件开启本地用户权限
[root@ldap ftp]# vim /etc/vsftpd/vsftpd.conf
write_enable=YES

测试访问:ftp://ip需要通过用户名密码进行登录,默认访问的界面是该用户目录下的所有文件,(注意除root用户),可以通过本地用户上传文件和下载文件也可以删除文件。弊端是:可以来回切换都可以通过本地用户的身份看到/下的所有东西。
3、[删除]
#修改配置文件,添加如下选项
[root@ldap ftp]# vim /etc/vsftpd/vsftpd.conf
anon_other_write_enable=YES
#再上传下载的前提下可以删除文件,以及替换文件

4、[遍历]
#首先开启chroot选项
[root@ldap ftp]# vi /etc/vsftpd/vsftpd.conf
allow_writeable_chroot=YES
#然后使用下面两个选项之一,第一种是本地用户不能上下翻,第二种是指定列表用户不能翻。
#指定本地用户不能chroot,不能翻
chroot_local_user=YES
#开启通过列表的方式来指定用户
chroot_list_enable=YES
#指定用户列表文件
chroot_list_file=/etc/vsftpd/chroot_list
#在当前目录创建用户列表文件
[root@localhost vsftpd]# cat chroot_list
haha
当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。
当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd/chroot_list 文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。
当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。
当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。

4.3虚拟用户
#创建系统用户,禁止该用户进行登陆
[root@ldap ftp]# useradd -s /sbin/nologin vhaha
#修改用户家目录权限
[root@localhost vsftpd]# chmod 704 /home/vhaha/
#修改主配置文件,增加以下三个选项
[root@ldap ftp]# vi /etc/vsftpd/vsftpd.conf
guest_enable=YES //客人模式
guest_username=vhaha #vhaha为系统用户
virtual_use_local_privs=YES //本地虚拟用户特权开启
#创建虚拟用户数据库文件:
#创建虚拟用户文件如下:
#格式为一行用户名,一行密码,示例中abc为用户名,redhat为密码
[root@localhost vsftpd]# cat vhaha
abc
redhat
xixi
redhat
haha
redhat
#将虚拟用户文件转换成用户数据库文件
[root@localhost vsftpd]# db_load -T -t hash -f vhaha vhaha.db
#修改虚拟用户数据库文件权限
[root@localhost vsftpd]# chmod 600 vhaha.db
#查看虚拟用户数据库文件的上下文权限
[root@localhost vsftpd]# ll -Z user.db
-rw-------. root root unconfined_u:object_r:etc_t:s0 user.db
#修改PAM认证方式
#编辑认证配置文件
[root@localhost vsftpd]# vi /etc/pam.d/vsftpd
#mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
pam_service_name=vsftpd //设置PAM认证模块使用名称预设为vsftpd
#注释掉所有行,并添加以下两行:
auth required pam_userdb.so db=/etc/vsftpd/vhaha
account required pam_userdb.so db=/etc/vsftpd/vhaha
#注:(.so动态连接库)数据库文件名的“.db”不用输入
#完成以上配置后,重启服务进行测试
是虚拟用户不能进行登录,使用chroot_local

5 总结
vsftpd是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全。它是一个安全、高速、稳定的FTP服务器。这篇文章主要介绍了Linux环境下快速搭建ftp服务器方法介绍,分享了相关代码示例,具有一定借鉴价值,需要的朋友可以参考下。

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

FTP服务 的相关文章

随机推荐

  • 关于百度OCR和EasyOCR的研究记录

    现行方案 xff1a 迅捷OCR软件 采用迅捷OCR文字识别软件 xff0c 购买了一年的期限 操作需要使用pyautogui来操作软件进行操作 xff0c 现在也可以使用USB鼠键模块KM3来真实模拟鼠标键盘的操作 xff0c 可信度更高
  • qt打开项目,只有pro文件其它文件消失:-1: error: msvc-version.conf loaded but QMAKE_MSC_VER isn‘t set

    之前在电脑打开开发的项目 xff0c 突然今天打开突然只有pro文件其它文件消失了 xff0c 在文件管理器里面找也都还有 打开项目只剩下蓝色框里面的 网上查了一些资料 xff0c 发现是开发程序事qt的版本不同所导致 解决方法 点开项目
  • 表格中重复项设置一级和二级序号排序

    摘要 xff1a 一级分类存在重复项 xff0c 需要排序 xff0c 二级分类也存在重复项 xff0c 也需要排序 xff0c 相同一级分类中的二级分类需要重新从一开始排序 xff08 重点和难点 xff09 先来看看效果 xff1a 公
  • 动态数码管显示实验

    文章目录 摘要实验器件简介实验原理硬件电路图硬件电路连线实验代码实验结果思考以及注意事项实验视频教程资源分享 摘要 本实验采用了普中科技的51单片机开发板 本实验以静态数码管显示实验为基础 https blog csdn net weixi
  • C51中intrins_h头文件解释分析

    文章目录 摘要源代码说明举个栗子 摘要 这是关于C51中使用循环移位等函数的头文件定义的分析 源代码 span class token comment INTRINS H Intrinsic functions for C51 Copyri
  • 喜马拉雅音频下载+x2m文件转换

    文章目录 摘要软件免费音频VIP音频 摘要 一款关于喜马拉雅音频的小神器 x2m格式转换为m4a格式 批量下载操作 软件 绿色免费的小工具ximalaya downloader amp x2m decoder xff0c 当然是在电脑上运行
  • http报错:405 (METHOD NOT ALLOWED)

    使用post请求ajax数据时 xff0c 报错 xff1a 405 METHOD NOT ALLOWED 将post请求改为get请求
  • Http怎么解决粘包拆包的?

    发送端 xff1a 应用层协议的每个包到达传输层 xff0c 如果是tcp xff0c 会可能出现以下情况 1 应用层的每个包被拆成多个tcp报文 xff0c 分别发送 xff0c 这是拆包 xff1b 2 应用层的多个包组成一个tcp报文
  • ROS TCP通信

    Reference https blog csdn net deyuzhi article details 51725074 https blog csdn net weixin 43795921 article details 85307
  • Ubuntu+ROS安装及rosdep init失败解决办法

    1 安装Ubuntu16 04 18 04 xff08 1 xff09 双系统硬盘安装 xff1a 参考双硬盘Window10与Ubuntu16 04 18 04安装 脚踩香蕉皮的博客 CSDN博客 Ubuntu 18 04 xff1a 链
  • c++ 编译 报错 未定义的引用

    遇到的问题有两种情况 一个是static没初始化 一个是模板类实现和定义分开写 这里主要记录一下模板类实现和定义分开写报错的问题 xff08 都放在 h文件中就不会报错 xff09 自己尝试用 传统 方法 xff0c 及在 h文件里声明 在
  • JNI基础语法

    一 Java和JNI类型对照 1 1 基本类型对照表 Java类型Native类型C C 43 43 类型大小Booleanjbooleanunsigned char无符号8位Bytejbytechar有符号8位Charjcharunsig
  • STL源码剖析 笔记之三 迭代器

    第三章 迭代器概念与traits编程技法 Design Patterns 中提供有23个设计模式的完整描述 迭代器模式定义如下 xff0c 提供一种方法 xff0c 使之能够依序巡防某个聚合物 容器 所含的各个元素 xff0c 而又无需暴露
  • 带复杂命令启停功能的二自由度自动进样器

    给8051发送 34 Start E 34 后 系统开始工作 发送 34 Stop E 34 后 系统停止工作 与之前以串口中断为主线的控制逻辑不同 这里以定时器0中断为主线 其实也就是以系统序列动作为主线 并提高了串口中断的优先级 以实时
  • Python温度转换实例

    我的第一个程序 xff1a TempCovert py TemStr 61 input 34 请输入带有符号的温度值 xff1a 34 if TemStr 1 in 39 F 39 39 f 39 C 61 eval TemStr 0 1
  • 不同数据类型所占字节

    一 32位处理器 xff1a char xff1a 1个字节 char p xff1a 4个字节 int xff1a 4个字节 unsigned int xff1a 4个字节 double xff1a 8个字节 short xff1a 2个
  • 浏览器中输入www.baidu.com后发生了什么

    一道经典的面试题 xff1a 你输入网址后到页面显示出来 xff0c 中间发生了什么 xff1f 第一步 浏览器查找该域名的 IP 地址 第二步 浏览器根据解析得到的IP地址向 web 服务器发送一个 HTTP 请求 第三步 服务器收到请求
  • 交换机对数据帧的处理规则

    一 概述 以太网交换机对二层帧的转发处理比较复杂 xff0c 很多同事都不是很清楚 本文将对此问题进行总结 xff0c 并通过实验进行验证 二 交换机基本概念 在了解交换机转发规则之前 xff0c 我们先理解交换机的一些概念 xff0c 如
  • NAT详解

    NAT详解 1 概述 1 1 nat简介 NAT xff08 Network Address Translation xff0c 网络地址转换 xff09 是1994年提出的 它是一个IETF Internet Engineering Ta
  • FTP服务

    1 FTP简介 FTP是File Transfer Protocol xff08 文件传输协议 xff09 的英文简称 xff0c 而中文简称为 文传协议 用于Internet上的控制文件的双向传输 同时 xff0c 它也是一个应用程序 x