阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Ubuntu 14.04 配置vsftpd实现FTP服务器 – 通过FTP连接AWS

425次阅读
没有评论

共计 5433 个字符,预计需要花费 14 分钟才能阅读完成。

测试主机:亚马逊 AWS EC2
系统:Ubuntu 14.04

想用 AWS 来做服务器玩,结果发现其不能像简单使用阿里云服务器那样用 ftp 连接,反正也不熟悉 ftp 服务器搭建,那就乘这个机会学习一下如何利用 vsftpd 配置 FTP 服务器,网上大多的教程是基于 CentOS 的,但给了我关于 Ubuntu 下配置的很多参考。

0.vsftpd 是啥玩意

都不知道安装了个啥东西,那就没意思了,所以先去了解下什么是 vsftpd。vsftpd 意思为“very secure FTP daemon(非常安全的 FTP 进程)”,当然只有更安全没有最安全。

那它到底安全在哪里呢,主要体现在以下两点:

  • 权限控制,vsftpd 以一般用户登录,用户权限相对较小,对于系统就越安全,对于用户需要的系统级指令大部分被整合到 vsftpd 中了,用户不需要申请更高权限就足以完成绝大部分 ftp 指令;此外对于 ftp 本身内部的读写控制,vsftpd 也足以通过配置文件控制了;
  • 目录限制,vsftpd 通过 chroot 可以控制 ftp 登录用户所能看到的目录范围,即限定 ftp 用户看到的根目录为系统中某一个目录,如此一个 ftp 用户就除了看到自己的 ftp 根目录不能看到其他比如配置文件、系统更目录等,保护了系统。

1. 安装 vsftpd

sudo apt-get install vsftpd

至于要不要通过 sudo apt-get update 就看你的源本身够不够新了

2. 配置 vsftpd

ubuntu 的 vsftpd 配置文件在\etc\vsftpd.conf

配置文件的详细配置项如下(那么多我们其实按需配置很少的几项就好):

listen=<YES/NO> : 设置为 YES 时 vsftpd 以独立运行方式启动,设置为 NO 时以 xinetd 方式启动(xinetd 是管理守护进程的,将服务集中管理,可以减少大量服务的资源消耗)listen_port=<port> : 设置控制连接的监听端口号,默认为21
listen_address=<ip address> : 将在绑定到指定 IP 地址运行,适合多网卡
connect_from_port_20=<YES/NO> : 若为YES,则强迫 FTP-DATA 的数据传送使用 port 20,默认YES
pasv_enable=<YES/NO> : 是否使用被动模式的数据连接,如果客户机在防火墙后,请开启为YES
pasv_min_port=<n>
pasv_max_port=<m> : 设置被动模式后的数据连接端口范围在 n 和 m 之间, 建议为 50000-60000 端口
message_file=<filename> : 设置使用者进入某个目录时显示的文件内容,默认为 .message
dirmessage_enable=<YES/NO> : 设置使用者进入某个目录时是否显示由 message_file 指定的文件内容
ftpd_banner=<message> : 设置用户连接服务器后的显示信息,就是欢迎信息
banner_file=<filename> : 设置用户连接服务器后的显示信息存放在指定的 filename 文件中
connect_timeout=<n> : 如果客户机连接服务器超过 N 秒,则强制断线,默认60
accept_timeout=<n> : 当使用者以被动模式进行数据传输时,服务器发出 passive port 指令等待客户机超过 N 秒,则强制断线,默认60
accept_connection_timeout=<n> : 设置空闲的数据连接在 N 秒后中断,默认120
data_connection_timeout=<n> : 设置空闲的用户会话在 N 秒后中断,默认300
max_clients=<n> : 在独立启动时限制服务器的连接数,0表示无限制
max_per_ip=<n> : 在独立启动时限制客户机每 IP 的连接数,0表示无限制(不知道是否跟多线程下载有没干系)local_enable=<YES/NO> : 设置是否支持本地用户帐号访问
guest_enable=<YES/NO> : 设置是否支持虚拟用户帐号访问
write_enable=<YES/NO> : 是否开放本地用户的写权限
local_umask=<nnn> : 设置本地用户上传的文件的生成掩码,默认为077
local_max_rate<n> : 设置本地用户最大的传输速率,单位为 bytes/sec,值为 0 表示不限制
local_root=<file> : 设置本地用户登陆后的目录,默认为本地用户的主目录
chroot_local_user=<YES/NO> : 当为 YES 时,所有本地用户可以执行 chroot
chroot_list_enable=<YES/NO> 
chroot_list_file=<filename> : 当 chroot_local_user=NO 且 chroot_list_enable=YES时,只有 filename 文件指定的用户可以执行 chroot
anonymous_enable=<YES/NO> : 设置是否支持匿名用户访问
anon_max_rate=<n> : 设置匿名用户的最大传输速率,单位为 B /s,值为 0 表示不限制
anon_world_readable_only=<YES/NO> 是否开放匿名用户的浏览权限
anon_upload_enable=<YES/NO> 设置是否允许匿名用户上传
anon_mkdir_write_enable=<YES/NO> : 设置是否允许匿名用户创建目录
anon_other_write_enable=<YES/NO> : 设置是否允许匿名用户其他的写权限(注意,这个在安全上比较重要,一般不建议开,不过关闭会不支持续传)anon_umask=<nnn> : 设置匿名用户上传的文件的生成掩码,默认为077

我们来定一个 目标 吧,目标是禁止匿名访问,限制用户 ftp 目录,允许用户上传,使用 FTP 被动模式。

打开配置文件sudo vim /etc/vsftpd.conf,如下修改

# 禁止匿名访问
anonymous_enable=NO
# 接受本地用户
local_enable=YES
# 允许上传
write_enable=YES
# 用户只能访问限制的目录
chroot_local_user=YES
# 设置固定目录,在结尾添加。如果不添加这一行,各用户对应自己的目录(用户家目录),当然这个文件夹自己建
local_root=/home/ftp

# 如果使用主动模式,下面几行可以不配置
# 使用被动模式
pasv_enable=YES
# 端口设置
pasv_min_port=1024
pasv_max_port=1048
pasv_address= 你的访问 IP(服务器外网 IP)

这里补充一个知识点关于 主动模式 被动模式,FTP 是基于 TCP 的服务,使用 2 个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是 21(命令端口)和 20(数据端口)。但 FTP 工作方式的不同,数据端口并不总是 20。这就是主动与被动 FTP 的最大不同之处。

  • 主动模式:数据连接上,服务端从 20 端口去连接客户端大于 1024 的端口
    命令连接:客户端(>1024 端口)-> 服务器 21 端口
    数据连接:客户端(>1024 端口)<- 服务器 20 端口

    优势:主动 FTP 对 FTP 服务器的管理有利,但对客户端的管理不利。因为 FTP 服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。

  • 被动模式:数据连接上,客户端从大于 1024 端口去连接服务端大于 1024 的端口
    命令连接:客户端(>1024 端口)-> 服务器 21 端
    数据连接:客户端(>1024 端口)-> 服务器(>1024 端口)

    优势:被动 FTP 对 FTP 客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

3. 为 ftp 服务器新建 ftp 用户并新建 ftp 根目录

新建用户,专门用于登录 ftp 服务器进行操作,并且新建配置文件中指定的 ftp 根目录,这里就有很多 BUG 了。

建立 ftp 根目录

mkdir /home/ftp

建立新用户和密码

sudo useradd -d /home/ftp -M ftptest
sudo passwd ftptest

满怀信心地测试一下,利用命令行连接一下,结果出现 ==530 login incorrect== 错误,解决方式如下:

sudo vim /etc/pam.d/vsftpd

注释掉

#auth    required pam_shells.so

然后 sudo service vsftpd restart 重启服务生效.

原因:
这是因为启用了这个模块,只有带有 shell 的用户才能访问,什么是带有 shell 呢?你可以看一下 \etc\shells 文件,这里列出的就是可用的 shell 列表,然后你再执行一下cat \etc\passwd,最后一行你可以看到你新添加的用户,比���一下你可以看到新用户没有指定 shell,因此不带有 shell,就被这个生效的模块发好人卡了。

于是再次 ftp 连接一下,wtf,结果出现 ==500 OOPS: vsftpd: refusing to run with writable root inside chroot()==,解决方式:

sudo chmod a-w /home/ftp
sudo mkdir /home/ftp/data

原因:这是因为 vsftpd 的 chroot 不允许根目录具有可写权限,ftp 根目录下的目录可以有写权限,所以就只能这么解决。

连接成功进入可以看到 data 目录,并且 你只能看到 /home/ftp 下的内容,你发现你所在的根目录就是它,不可能跳到其他目录去,很安全

4. 利用 vsftpd 的 chroot

但其实我们想让一些用户(如管理员级别的)可以访问所有目录,限制另外的只能访问 ftp 根目录(如其他一般用户),那么我们就需要 vsftpd 的 chroot 功能。

执行 sudo vim /etc/vsftpd.conf 可以看到以下 3 行被注释:

#chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd.chroot_list

解了这 3 行的注释,我们看到有指定一个用户列表“vsftpd.chroot_list”,但是这个文件初始是不存在的,我们需要自己建立。

  • 如果是两个 YES(就上面那样),那么是指,限制所有用户,开放(列表中)特定,限制一切用户,只解禁 /etc/vsftpd.chroot_list 的用户,也即是只有这个列表中的用户可以访问所有文件,不在列表的只能访问指定目录。

  • 如果是一个 NO 和一个 YES,那就是开放所有,限制特定,可指定一组用户限制,即列表中的用户受限。

sudo vim /etc/vsftpd.chroot_list

一行一个用户名,进行添加,然后保存退出,比如添加了我们刚才的 ftptest 用户,并且设置两个 YES。

这时候你再去连接 ftp 时,你会发现你居然能访问所有目录了,为了验证有效性,你可以断开连接,再去设置 chroot_local_user 为 NO 时,你会发现,你又只能访问 ftp 目录了。

这就是 chroot 的作用。

附. 通过 FTP 连接 AWS EC2

因为我用的测试服务器是 AWS EC2,所有这里也提一下当服务器端通过终端配置好 vsftpd 后如何连接 AWS。

打开 AWS 的 EC2 控制台:
Ubuntu 14.04 配置 vsftpd 实现 FTP 服务器 - 通过 FTP 连接 AWS

添加自定义规则,1024-1048 端口这里的配置要和 vsftpd.conf 文件的被动模式配置端口一致,然后还要打开 20-21 端口,否则就没法进行 ftp 连接了。
Ubuntu 14.04 配置 vsftpd 实现 FTP 服务器 - 通过 FTP 连接 AWS

配置好后就可以进行 ftp 连接了,如果是 SFTP,则需要添加 ssh 密钥。

vsftpd 详细说明参见这里

玩转 vsftpd 服务器的四大高级配置:http://www.linuxidc.com/Linux/2013-09/90565.htm

vsFTPd 配置教程:http://www.linuxidc.com/Linux/2013-09/90562.htm

Ubuntu 实用简单的 FTP 架设 http://www.linuxidc.com/Linux/2012-02/55346.htm

Ubuntu 上架设 FTP 服务器和 Apache 服务器 http://www.linuxidc.com/Linux/2011-04/35295.htm

Ubuntu 13.04 安装 LAMP\vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm

RHEL6 平台下 SeLinux 和 vsftpd 的匿名上传的简单案例 http://www.linuxidc.com/Linux/2013-04/82300.htm

Linux 系统 vsftpd 源码安装 http://www.linuxidc.com/Linux/2013-03/81475.htm

openSUSE 13.2/13.1 下安装配置 FTP 服务器 vsftpd  http://www.linuxidc.com/Linux/2014-12/110070.htm

更多 Ubuntu 相关信息见Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-08/133933.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5433字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7974968
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
在Windows系统中通过VMware安装苹果macOS15

在Windows系统中通过VMware安装苹果macOS15

在 Windows 系统中通过 VMware 安装苹果 macOS15 许多开发者和爱好者希望在 Window...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...