一、FTP工作原理

(1)FTP使用端口

[root@localhost ~]# cat /etc/services | grep ftp
ftp-data 20/tcp #数据链路:端口20
ftp 21/tcp #控制链路:端口21

(2)FTP连接方式
     支持两种连接模式:主动模式(Port)和被动模式(Pasv),这两种模式都是针对数据链路进行的,与控制链路无关。

  • 主动模式工作过程:

1.客户端从自己的一个任意端口(N > 1024)和FTP服务器的21端口建立控制链路
2.然后客户端发出Port指令告诉服务器连接自己的N+1端口来建立一条数据通道
3.当FTP服务器接到这一指令时,会使用20端口连接用户在Port指令中指定的端口号N+1来发送数据

  • 被动模式工作过程:

1.客户端从自己的一个任意端口(N > 1024)和FTP服务器的21端口建立控制链路
2.然后客户端发送Pasv指令,告诉服务器自己要连接服务器的某一个端口
3.如果服务器上的这个端口是空闲可用的,那么服务器会返回确认信息,之后数据传输通道被建立;但如果服务器上的这个端口被另一个资源所使用,那么服务器返回不确认的信息,那么这是客户端会再次发送Pasv命令。

注意:

  • 在FTP客户连接服务器的整个过程中,控制信道是一直保持连接的,而数据传输通道是临时建立的;
  • 主动模式建立数据传输通道是由服务器端发起的,服务器使用20端口连接客户端某一个大于1024的端口;
  • 被动模式中建立数据传输通道是由客户端发起的,它使用一个大于1024的端口连接服务器的1024端口以上的某一个端口。

二、ftp服务器搭建

需求:在Linux中搭建一个ftp服务器在存储文件,创建一个ftp用户:test,主目录是:/home/test,设置该用户不允许登录服务器,并需要限制该用户不能离开自己的主目录。

【实现步骤】

1.查看系统有没有安装vsftpd
# rpm -qa | grep vsftpd
vsftpd-3.0.2-21.el7.x86_64
:vsftp(Very Secure FTP)是Linux系统下使用最多的FTP服务端。

2.查看vsftpd服务是否开机自启
# chkconfig --list vsftpd
vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

3.建立一个新用户账户test,-d 参数指定用户登入时的主目录,参数-m 表示如果主目录不存在则自动创建
# useradd -d /home/test -m test

为用户设置密码,输入命令:
# passwd 密码

4.vsftpd的配置
安装完成后,执行命令【rpm -ql vsftpd】可以查看与vsftpd相关的配置文件和文档,其中在/etc/vsftpd目录下有三个主要配置文件:

  • vsftpd.conf 主配置文件
  • ftpusers 指定哪些用户不能访问FTP服务器
  • user_list 指定的用户是否可以访问ftp服务器

查看vsftpd.conf配置文件
内容如下:

 1 [root@localhost ~]# cat /etc/vsftpd/vsftpd.conf | grep -v '^#'
2 #----匿名用户设置----
3 anonymous_enable=NO #禁止匿名用户登录
4
5 #----本地用户设置----
6 local_enable=YES #允许本地用户登录ftp服务器
7 write_enable=YES #允许用户想服务器执行写入操作
8 local_umask=022 #设置服务器上本地用户创建文件的权限掩码
9
10 #----欢迎语设置----
11 dirmessage_enable=YES #启用目录提示消息
12
13 #----日志文件设置----
14 xferlog_enable=YES #启用日志文件功能,记录于/var/log/xferlog
15 xferlog_std_format=YES #启用标准的日志格式
16
17 #----FTP工作方式与端口设置----
18 connect_from_port_20=YES #主动模式下,是否启用默认的20端口进行数据传输
19
20 #----与连接相关的设置----
21 listen=NO #vsftpd不是以独立的服务运行,要受到xinetd服务的管控,功能上会受到限制
22 listen_ipv6=YES
23
24 #----控制用户是否允许切换到上级目录----
25 chroot_list_enable=YES #开启限制用户在主目录的功能
26 chroot_list_file=/etc/vsftpd/chroot_list #在chroot_list文件中加入你要限制的用户名,一行一个用户
27
28 #----虚拟用户设置----
29 pam_service_name=vsftpd #虚拟用户使用PAM认证方式
30
31 #----控制用户访问(通过vsftpd.user_list和ftpusers文件来实现)----
32 userlist_enable=YES #是否启用userlist_file文件
33 userlist_file=/etc/vsftpd/user_list #允许user_list文件中加入的用户访问ftp服务器
34
35 #----控制主机访问----
36 tcp_wrappers=YES #vsftpd服务器检查/etc/hosts.allow和/etc/hosts.deny中的设置,来决定请求连接的主机,是否允许访问该FTP服务器
37
38 #----其它设置----
39 allow_writeable_chroot=YES #去除用户主目录的写权限

在上述vsftpd.conf的相关选项的配置下,对ftpuser文件和user_list文件的配置如下:

  • ftpusers文件:不添加test用户,表示该用户不能访问ftp服务器
  • user_list文件:在/etc/vsftpd.conf主配置文件中设置了userlist_deny=YES(默认情况),则不添加test用户,表示该用户不能访问ftp服务器

5.开启vsftpd服务
#service vsftpd start

6.访问ftp服务器方法

  • 浏览器:ftp://ip地址
  • ftp客户端软件,比如FileZilla,输入ftp服务器IP,用户名,密码,端口:21
  • 命令行终端:ftp 用户名@ftp服务器IP,或 ftp 127.0.0.1

注意:关闭ftp服务器上的防火墙及Selinux(防止端口限制)

-------------------------------

补充知识点

  • FTP日志功能配置

xferlog_enable=YES //开启日志功能
xferlog_file=/var/log/xferlog //日志文件的存放位置
xferlog_std_format=YES //使用标准格式记录日志

xferlog该日志文件记录了FTP会话,可以显示出用户向从FTP服务器拷贝了什么文件。其中一条记录如下:

Thu Feb 16 10:09:05 2017 1 10.10.10.9 990 ./home/ftpie.txt b _ o r test ftp 0 * c

含义:在某个时间test用户向主机10.10.10.9上传了哪些文件

数据参数说明

记录数据 参数名称 参数说明
Thu Feb 16 10:09:05 当前时间 当前服务器本地时间
1 传输时间 传送文件所用时间,单位为秒
10.10.10.9 远程主机名称/IP 远程主机名称/IP
990 文件大小 传送文件的大小,单位为byte
./home/ftpie.txt 文件名 传输文件名,包括路径
b 传输类型

传输方式的类型,包括两种:
a以ASCII传输 b以二进制文件传输

特殊处理标志

特殊处理的标志位,可能的值包括:
_ 不做任何特殊处理
C 文件是压缩格式
U 文件是非压缩格式
T 文件是tar格式

o 传输方向

文件传输方向,包括两种:
o 从FTP服务器向客户端传输
i 从客户端向FTP服务器传输

r 访问模式

用户访问模式,包括:
a 匿名用户
g 来宾用户
r 真实用户,即系统中的用户

test 用户名 用户名称
ftp 服务名 所使用的服务名称,一般为FTP
0 认证方式

认证方式,包括:
0 无
1 RFC931认证

* 认证用户id 认证用户的id,如果使用*,则表示无法获得该id
c 完成状态

传输的状态:
c 表示传输已完成
i 表示传输示完成

  • 匿名用户ftp

服务器安装完成vsftpd后是允许匿名用户访问的,匿名访问的用户名是ftp,密码为空。这个用户可以在/etc/passwd文件中找到

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

数据参数说明:
在ftp用户这行中,一共有七个字段,每个字段之间用冒号分割;

  • ftp 用户名
  • x 密码字段,是隐藏的
  • 14 用户的UID字段,是唯一的
  • 50 用户组的GID,是唯一的
  • FTP User 是用户说明字段
  • /var/ftp 是ftp用户的家目录
  • /sbin/nologin 表示不能登录系统;如果把/sbin/nologin改为/bin/bash,这样ftp用户可以通过本地或远程工具ssh或telnet以真实用户身份登录到系统。

默认情况下,匿名用户登录所访问的文件夹一般是/var/ftp,当然也可以由用户自行添加或删除。而且,匿名用户的权限只能是下载,而不能上传或是其它写操作。

  • 配置vsftpd服务器在非标准端口(非21端口)工作

在/etc/vsftpd.conf中,将list_port=10034或者其它端口号选项加入该文件中即可,然后重新启动vsftp守护进程。

# ftp 127.0.0.1 10034

注:此时测试以前使用的21端口,该端口已经不再有用;如果要使用ftp默认的21端口工作,需要删除或者使用#屏蔽掉前面加入的选项即可。

Linux中ftp服务器搭建的更多相关文章

  1. 《Linux下FTP服务器搭建及FTP使用》

    .LOGAndy:mxtd114 <Linux下FTP服务器搭建> 0.root登录 1.安装ftp # yum -y install ftp 2.安装vsftpd # yum -y in ...

  2. FTP-Linux中ftp服务器搭建

    一.FTP工作原理 (1)FTP使用端口 [root@localhost ~]# cat /etc/services | grep ftp ftp-data 20/tcp #数据链路:端口20 ftp ...

  3. Linux 之 FTP服务器搭建

    FTP服务器搭建 参考教程:[千峰教育] 1.关闭防火墙: service iptables stop 2.关闭Selinux setenforce 0 3.安装所需要依赖及编译工具 yum inst ...

  4. linux 中 svn 服务器搭建 重启

    鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总结 /******开始****** ...

  5. Linux中FTP服务器的搭建

    vmware12上安装的CentOs6.8,最终实现物理机上的windows10能正常访问CentOs上的FTP服务器. 一.查看是否安装有ftp相关的安装包. # rpm -qa | grep vs ...

  6. linux下FTP服务器搭建教程1

    你买了个主机就像是买了块地皮,搭建FTP就像是盖房子,我在地皮上建房子,然后创建的用户就像是钥匙,我给谁钥匙(权限),谁就可以到我家去玩,去放东西,拿东西. 虽然我们买不起现实的房子,但是我们可以买互 ...

  7. linux上FTP服务器搭建

    一.启动vsftpd服务 1. 启动VSFTP服务器 A. cenos下运行:yum install vsftpd B. 登录Linux主机后,运行命令:"service vsftpd st ...

  8. 一起来学linux:FTP服务器搭建

    首先安装vsftpd: apt install vsftpd有下面几个重要的配置文件:1 /etc/vsftpd.conf. 这个是vsftpd的配置文件.通过“参数=设置值”的方式来设置的. 2 / ...

  9. Linux中ftp服务器的安装与部署

    一.ftp简介FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一.FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端.其中FTP ...

随机推荐

  1. 解决mysql无法远程连接的问题

    前言 最近开发中遇到一个问题,mysql在服务器本地可以登录,但是远程通过3306端口却不可以.这个问题困扰了我一周之久,终于在今天解决了.在解决的过程中试了很多的方法,遂记录下来,希望能给大家一些提 ...

  2. Linux 中的 守护进程

    什么是守护进程 脱离控制终端的,运行于后端的进程,由系统管理的,按计划自动启动/停止/重启,用以执行特定的任务. 为什么要有守护进程? 在某些需求场景下,我们希望某项系统任务能够按计划按预期,始终/自 ...

  3. pika详解(二) BlockingConnection

    pika详解(二) BlockingConnection   本文链接:https://blog.csdn.net/comprel/article/details/94592348 版权 Blocki ...

  4. Go语言的GOPATH详解

    在GOLAND中设置GOPATH: 设置好路径后,并不是直接在这个路径下面写代码文件就行了 GO会识别GOPATH下的src目录,而真正的引用的包名,是src下的目录名,然后才是代码模块名 目录结构如 ...

  5. CVPR2020:三维实例分割与目标检测

    CVPR2020:三维实例分割与目标检测 Joint 3D Instance Segmentation and Object Detection for Autonomous Driving 论文地址 ...

  6. 简化可视SLAM应用程序的开发

    简化可视SLAM应用程序的开发 Easing the development of visual SLAM applications 同步定位和映射(SLAM)描述了一个设备(如机器人)使用传感器数据 ...

  7. 如何为嵌入式应用选择适当的SSD

    如何为嵌入式应用选择适当的SSD Selecting the right SSD for evolving embedded applications 变革涉及技术的每一个要素,闪存也不例外.价格下跌 ...

  8. VB 老旧版本维护系列---兜兜转转有点晕:从服务器通过URL不中转保存的下载

    从服务器通过URL不中转保存的下载 首先引用System.dll 然后新开一个页面,空的,在后台Page_Load方法里写   Dim docPath As String ="" ...

  9. 20个提高开发效率的JavaScript技巧

    减少代码行数和加快开发的技术! 我们在开发中,经常要写一些函数,如排序.搜索.寻找唯一的值.传递参数.交换值等,在这里我列出了我搜集的一些技术资源,可以像高手一样写出这些函数! JavaScript确 ...

  10. Luatools v2烧录教程(适用于2G、4G Cat.1、4G Cat.4模块)

    目录,可以根据需要直接点击跳转: 下载LuaTools工具 2G模块烧写教程(Air2xx系列.Air8xx系列) 连接模块 刷入AT版本的lod 刷入任意的lod固件 下载lua脚本文件 [4G 模 ...