Linux搭建FTP服务器
一、搭建环境
阿里云 CentOS 7.3 64位
二、FTP协议基础知识
2.1 简介
FTP 是 File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文件协议”。用于 Internet 上的控制文件的双向传输。
2.2 FTP的运作流程与使用端口
FTP 的传输使用的是 TCP 传输协议,由于 FTP 服务的特点是数据量大、控制信息相对较少,因此在设计的时分别对控制信息与数据进行处理的方式,这样用于通信的 TCP 连接有两个:控制连接与数据连接。其中,控制连接用于在通信双方之间传输 FTP 命令与响应信息,完成连接建立、身份认证与异常处理等控制操作;数据连接用于在通信双方之间传输文件或目录信息。
FTP支持两种模式:Standard(PORT方式,主动方式),Passive(PASV,被动方式)。
2.2.1 PORT 方式
图1 FTP服务器的 PORT 方式示意图
至于连接的过程是这样的:
(1) 建立命令通道的连接
如上图所示,用户端会随机取一个大于1024以上的端口(port AA)来与FTP服务器端的port 21进行连接,这个过程当然需要经历TCP的三次握手!完成连接后用户端便可透过这个连接来对TCP服务器下达指令,包括查询文件名、下载、上传等等指令都是利用这个通道来下达的。
(2)通知FTP服务器端使用 active 且告知连接的端口号
FTP 服务器的 21 端口主要用在命令下达,但是当关系到数据流时,就不是使用这个连接了。用户端在需要数据的情况下,会告知服务器端需要用什么方式来连接,如果是 PORT 模式时,用户端会先随机启用一个端口(图中的port BB),且通过命令通道告知 FTP 服务器这两个信息,并等待 FTP 服务器的连接。
(3)FTP服务器【主动】向用户端连接
FTP 服务器由命令通道了解用户端的需求后,会主动的由 20 这个端口向用户端的 port BB 连接,这个连接当然也会经历 TCP 的三次握手!此时 FTP 的用户端与服务器端会建立两条连线,分别用在命令的下达与数据的传送。而预设 FTP 服务器端使用的主动连接端口就是port 20。
2.2.2 PASV 方式
图2 FTP服务器的 PASV 方式示意图
(1)用户与服务器建立命令通道
同样的需要建立命令通道,通过三次握手就可以建立起这个通道了。
(2)用户端发出PASV的连接请求
当有使用数据通道的指令时,用户端可通过命令通道发出 PASV 的被动式连接要求(Passive 的缩写),并等待服务器的回应。
(3)FTP服务器启动数据端口,并通知用户端连接
如果你的 FTP 服务器能够处理被动式连接,此时 FTP 服务器会先启动一个端口在监听。这个端口号码可能是随机的,也可以是某一范围的端口,具体看你的 FTP 服务器软件而定。然后你的 FTP 服务器会通过命令通道告知用户端已经启动的端口(图中的 port PASV),并等待用户端的连接。
(4)用户端随机取用大于1024的端口进行连接
然后你的用户端会随机取用一个大于 1024 的端口号来对主机的 port PASV 连接。
2.3 用户分类
2.2.1 Real账户
这类用户是指在FTP服务上拥有账号。当这类用户登陆FTP服务器的时候,其默认的主目录就是其账号命名的目录。但是,其还可以变更到其他目录中去。如系统的主目录等等。
2.2.2 Guest用户
在FTP服务器中,我们往往会给不同的部门或者某个特定的用户设置一个帐户。但是,这个账户有个特点,就是其只能够访问自己的主目录。服务器通过这种方式来保障FTP服务上其他文件的安全性。这类帐户,在Vsftpd软件中就叫做Guest用户。拥有这类用户的帐户,只能够访问其主目录下的目录,而不得访问主目录以外的文件。
2.2.3 Anonymous(匿名)用户
这也是我们通常所说的匿名访问。这类用户是指在FTP服务器中没有指定帐户,但是其仍然可以进行匿名访问某些公开的资源。
三、VSFTP
3.1 简介
VSFTP 是一个基于 GPL 发布的类 Unix 系统上使用的 FTP 服务器软件,它的全称是 Very Secure FTP。
3.2 安装
查看是否装有 vsftpd 服务。
rpm -qa | grep vsftpd
若不存在,则使用 yum 命令直接安装:
yum -y install vsftpd
3.3 配置 vsftpd
修改配置文件,默认路径为 /etc/vsftpd/vsftpd.conf,命令如下。
vim /etc/ftpd/ftpd.conf
以下为需要修改或添加的配置项。
- anonymous_enable=NO #不允许匿名用户登陆
- chroot_list_enable=YES #chroot_list_file 指定文件中指定的用户禁锢在其主目录中
- chroot_list_file=/etc/vsftpd/chroot_list
在 /etc/vsftpd 目录下建立文件 chroot_list,命令如下
cd /etc/vsftpd
touch chroot_list
在 chroot_list 里添加 FTP 用户的用户名,每个用户一样,这里我添加的用户名为 symind。
3.4 添加 FTP 用户组及用户
添加一个用户组,这里我命名为 webftp。
groupadd webftp
在用户组中添加用户,并指定用户的主目录。
useradd -g webftp -M -d /home/www -s /sbin/nologin symind
设置密码。
passwd symind
修改目录拥有者。
chown -R symind.webftp /home/www
修改目录权限,vsftp 默认要求如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了。
chmod u=rx /home/www
也可以更改 vsftpd 的配置,allow_writeable_chroot=YES。
参考文献
1. 百度百科 - ftp(文件传输协议) https://baike.baidu.com/item/ftp/13839?fr=aladdin
2. 百度百科 - VSFTP https://baike.baidu.com/item/VSFTP/2596628?fr=aladdin
3. 鳥哥的 Linux 私房菜 - 檔案伺服器之三 http://linux.vbird.org/linux_server/0410vsftpd.php
4. vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot()错误的解决方法 http://blog.csdn.net/bluishglc/article/details/42399439
5. CentOS下vsftp设置、匿名用户&本地用户设置、PORT、PASV模式设置 http://desert3.iteye.com/blog/1685734
Linux搭建FTP服务器的更多相关文章
- 使用Linux搭建FTP服务器实现文件共享
使用Linux搭建FTP服务器实现文件共享... ---------------- Linux中的文件共享:FTPVSFTPDVSFTPD虚拟用户 FTP可以用在Linux与Linux 和Window ...
- Linux 搭建FTP服务器
介绍 本章主要介绍在Linux中搭建FTP服务器的过程,需要掌握的要点是配置文件的合理配置. 知识点 在linux中使用的FTP是vsftp FTP可以有三种登入方式分别是: 匿名登录方式:不需要用户 ...
- Linux搭建FTP服务器实战
首先准备一台Linux系统机器(虚拟机也可), 检测出是否安装了vsftpd软件: rpm -qa |grep vsftpd 如果没有输出结果,就是没有安装. 使用命令安装,安装过程中会有提示,直接输 ...
- linux搭建FTP服务器并整合Nginx
操作系统:Centos7 1.1.服务器配置 # 关闭SELINUX,把SELINUX=enforcing改为SELINUX=disabled,reboot重启服务器生效 vim /etc/sysco ...
- Linux搭建ftp服务器简单教程及使用方法
参考文章:https://www.waitig.com/linux-or-centos-install-vsftpd-and-setup-it.html 步骤概括如下: 安装:yum install ...
- Linux篇---ftp服务器的搭建
一.前述 企业中linux搭建ftp服务器还是很实用的,所以本文针对centoos7和centoos6搭建服务器教程做个总结. 二.具体 1.显示如下图则表示已安装 vsftp软件.如果未显示则需要安 ...
- linux下FTP服务器搭建教程1
你买了个主机就像是买了块地皮,搭建FTP就像是盖房子,我在地皮上建房子,然后创建的用户就像是钥匙,我给谁钥匙(权限),谁就可以到我家去玩,去放东西,拿东西. 虽然我们买不起现实的房子,但是我们可以买互 ...
- 《Linux下FTP服务器搭建及FTP使用》
.LOGAndy:mxtd114 <Linux下FTP服务器搭建> 0.root登录 1.安装ftp # yum -y install ftp 2.安装vsftpd # yum -y in ...
- 服务器linux centos 7.4 搭建ftp服务器
此操作是在腾讯云服务器linux centos 7.4 完成搭建ftp服务器 vsftpd 的: 安装 vsftpd $ yum install vsftpd -y 启动 $ service vsft ...
随机推荐
- mybatis实战教程一:开发环境搭建
步骤一: 创建一个maven工程,在pom文件中加载依赖 <dependencies> <dependency> <groupId>org.mybatis</ ...
- Azure Powershell获取指定订阅下的虚拟机信息(ARM)
为方便Azure用户导出已创建虚拟机的相关信息,特编写如下脚本: 详情脚本: # 登陆Azure Account Add-AzureRmAccount -EnvironmentName AzureCh ...
- python_斐波那契数列
什么是斐波那契数列? -- 一组第从第三个值开始,每个值都等于前两个值之和的一种有意思的数列 如[1, 1, 2, 3, 5, 8, 13, 21, 34, 55] 如何用程序进行实现? -- 逻辑整 ...
- scrapy_css
css选择器标准格式:reponse.css(css选择器::获取值) css选择器有哪些? * 选择所有节点 #id 选择id的节点 .container ...
- Log4j源码解析--LoggerRepository和Configurator解析
本文转自上善若水的博客,原文出处:http://www.blogjava.net/DLevin/archive/2012/07/10/382678.html.感谢作者的无私分享. LoggerRepo ...
- awk解决实际问题例子
awk很有用,就不说了,下面记录几个我遇到的例子,汇总 1 获得linux环境变量(ENVIRON) awk 'BEGIN{print ENVIRON["PATH"];}' /et ...
- Linux实践篇--自动删除n天前日志
原文出处:http://www.cnblogs.com/peida/archive/2013/03/25/2980121.html linux是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在 ...
- ecplise最有用的8个快捷键
1. ctrl+shift+r 打开资源 这组快捷键可以让你打开你工作区中的任何一个文件.而你只需要按下键盘的文件名或前几个字母 美中不足的是这组快捷键并非在所有视图下都能用. 2.ctrl+o:快速 ...
- Git分支高级管理[四]
标签(linux): git 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 切换分支 git checkout 撤销对文件的修改 git checkout -- ...
- 如何设置select和option的文字居中?
今天在设置option文字居中时发现,给select设置text-align:center在火狐浏览器下ok,但是在chrome浏览器无效,然后option在两个浏览器下设置text-align:ce ...