程志辉博客 - 一个伪文艺青年
贵在坚持,难在坚持,成在坚持!
程志辉

什么是FTP服务?

FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。 FTP是File Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器。

FTP/SAMBA/NFS三者区别?

前面我们学习过SAMBA服务NFS服务。今天学习的是FTP服务,他们都是用来进行文件的传输,提供文件和目录资源共享。那么他们三者之间有什么区别呢?

1.SAMBA服务和FTP服务都可以作用于Windows和Linux上,而NFS服务职能用于Linux与Linux之间。

2.FTP可以用在局域网和广域网上,而SAMBA服务和NFS服务只能用在局域网上!

FTP工作原理

主动模式(默认)下,FTP服务端默认连接请求,命令端口(响应请求)在21号端口,而20号数据端口是固定的,用来进行文件的传输!后期可以进行监听一下,在有文件传输的过程中,20号端口可以监听到。未进行传输的话就只能监听到21号端口,而20号端口无法监听到,因为没有数据进行传输!

被动模式下,FTP服务器的数据传输端口是随机的,需要大于1023号。客户端需要主动向服务端发送请求,服务端确认后进行数据连接!

主动模式与被动模式的优点?

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

幸运的是,有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危险。固定一个随机的端口!

实验环境

VMware 、Red Hat Enterprise Linux 6、Windows XP

FTP可以用在局域网也可以用在广域网。Windows或者是Linux都可以愉快的玩耍。所以我们这次使用三台设备来完成实验。

FTP服务配置要求

某公司新购一台服务器, 服务器上已安装Linux操作系统,现要求将服务器配置成FTP服务器,主要为公司内的主机提供文件传送服务,而且将来可能需要实现合作伙伴通过互联网访问。 具体要求如下:

1.(在/var/ftp目录下创建anonymous.txt文件用于测试)配置匿名用户有浏览和下载权限,但不具有上传数据的权限。

2.服务器上有两个本地账户user1和user2(如果没有账户,需要先创建账户,并在两个账户的家目录中分别以用户的身份创建user1.txt和user2.txt文件用于测试),除user1以外的其他本地账户在登录FTP服务器时,都被限制在自己的工作主目录中。

3.设置FTP服务器的最大并发连接数为1000。

4.设置本地用户的上传和下载速度为50Kbit/s,匿名用户的上传和下载速度为10Kbit/s。

感谢浩哥提供的配置要求,以及教学讲解,上面的配置要求重要的地方都特别提示了,对于新手简直太太太友好了!!!

实验操作

1.Linux主机需要修改正确网卡标识

2.Linux主机需要修改主机名

3.Linux主机需要关闭和禁用防火墙

4.Linux主机需要禁用Selinux

5.FTP服务器和客户端都需要配置本地YUM源仓库

6.Linux主机初始化配置完成需要重新启动

由于FTP(客户端/服务端)服务在Linux上默认是没有安装的,所以这一次实验我们在Linux客户端以及服务端上都要配置YUM源仓库。前面这些都是初始化配置,由于我在Linux——DHCP服务中操作过一遍,所以不进行二次演示。

经过测试,实验机器的网卡设备,主机名,禁用Selinux,禁用防火墙、YUM源仓库均已配置成功。

正式开始配置FTP服务

注意点:

此次试验我们使用的是rhel6镜像文件中自带的vsftpd软件包(vs意思为Very Secure)来为我们提供FTP服务。当然能够提供FTP服务的软件还有很多很多!!!

同时还得提出vsftpd这个软件的一个已知缺点:不支持上行或者下行速率的单独设置

Windows文件覆盖操作背后做了些什么?

这个问题思考一下你会嘛?强大的Windows图形化进行文件的覆盖操作时,后台究竟做了些什么?它实质是将原来的文件删除掉了,然后重新上传了一个新的文件,来完成文件的覆盖的操作,在图形化的操作过程中你只是看不到这些动作罢了。

1.查看 FTP 服务相关软件是否安装

# rpm -qa | grep vsftpd
# yum -y install vsftpd //没有安装就安装一下

2.查看 FTP 服务软件包所生成的重要文件和目录

# rpm -ql vsftpd

配置文件太多太多,只展示一部分~

初学者只需要关注两个文件:

服务配置文件:/etc/vsftpd/vsftpd.conf
服务管理脚本文件:/etc/rc.d/init.d/vsftpd

FTP 服务端配置1

按照实验要求我们先在/var/ftp目录下创建anonymous.txt

# cd /var/ftp
# touch anonymous.txt
# ll

配置匿名用户有浏览和下载权限,但不具有上传数据的权限,取决于这两条配置:

anonymous_enable=YES 开放匿名用户访问,下载

anon_upload_enable=NO 禁止匿名用户上传文件

默认配置就是这样的,所以我们直接开启服务然后进行测试

# service vsftpd start
# service vsftpd status

FTP客户端配置1

为了方便演示,本次实验我们客户端每做完一步需求都会立刻在客户端进行测试!

由于FTP在Linux客户端上是没有进行安装的,所以我们得安装一下

# rpm -qa | grep ftp
# yum -y install ftp //没有安装就安装一下

做上面这步的前提是安装了YUM源仓库,不然从哪里装???

还得注意的是ftp软件包安装好后不需要启动,直接使用就好

连接的时候是需要输入账密的,匿名访问我们账号填ftp或者anonymous 密码随便填,因为只是走一个形式哇~!

现在开始正式的正式的测试一下~

# ftp 192.168.42.7

这样就说明我们FTP客户端是可以进行访问也可以进行下载的!

紧接着我们在本地创建了一个gouge.txt,然后尝试将他上传到FTP服务器,FTP窗口返回值为550 Permission denied。权限被拒绝那就是不让我上传。所以实验成功!

FTP 服务端配置2

我们再次回到FTP服务端进行接下来的配置!!!

首先创建两个账户user1 user2 密码均为123,同时以用户的身份创建user1.txt和user2.txt

# useradd user1
# useradd user2
# echo 123 | passwd --stdin user1
# echo 123 | passwd --stdin user2
# su - user1
# touch user1.txt

# exit  //退出 回到root用户

# su -user2
# touch user2.txt

除user1以外的其他本地账户在登录FTP服务器时,都被限制在自己的工作主目录中。

有两种实现方法!

第一种实现方法:白名单

禁锢所有的ftp本地用户于其家目录中:chroot_local_user=YES

禁锢文件中指定的ftp本地用户于其家目录中:chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list(文件默认不存在,自行创建,将需要禁锢的本地用户名输入)

第二种实现方法:黑名单

不紧固所有的FTP本地用户于其家中,那意思就是大家都可以随意的切换访问其他目录

禁锢文件中指定的ftp本地用户于其家目录中:chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list(文件默认不存在,自行创建,将需要禁锢的本地用户名输入)

开始操作

其实都差不多,大家需要理解一下黑白名单!白名单,都不能随意切换,谁要切换给谁写入白名单。黑名单大家都能随意切换访问目录,不让谁随意切换,就把谁拉入黑名单

我个人还是比较喜欢设置白名单的,因为我觉得白名单安全性更高!

所以下面我会以白名单进行演示

# vim /etc/vsftpd/vsftpd.conf //vsftpd配置文件

默认情况下这三行是注释行,我们需要手动将他前面的#去掉这样才会生效

紧接着开始配置/etc/vsftpd/chroot_list

配置非常简单,我们在做白名单,需要让user1随意切换工作目录,其他用户不能切换。所以直接将user1

写进去就好了!看操作,简单粗暴

# vim /etc/vsftpd/chroot_list

//将user1写进去,然后重启服务

# service vsftpd restart
# service vsftpd status

服务启动没有报错,就说明配置没有问题,接下来该做的是测试配置的内容是否有效。如果启动报错,那你就返回配置文件看看哪里写的有问题吧!

FTP客户端配置2

这一阶段的客户端检验我们来用用Windows命令行~

测试显示ftp连接使用user1登录后可以随意进行目录的切换,没有任何禁锢符合我们的配置要求

测试显示ftp连接使用user2登录后无法进行目录的切换,符合我们的配置要求!

通过这两个实验我们可以发现一点,用户ftp连接成功后通过使用pwd来查看当前所在位置,如果返回的是/说明被禁锢了,只能访问自己当前的用户所属家目录,或者说是ftp所设置的一个目录,不能切换到其他目录位置。

如果pwd查看当前所在位置返回的是/home/user1类似于这种的linux用户的家目录这种形式,一般来说是可以进行家目录切换的!

FTP服务端配置3

设置FTP服务器的最大并发连接数为1000

设置本地用户的上传和下载速度为50Kbit/s,匿名用户的上传和下载速度为10Kbit/s

现在很多软件迫于运营压力,得通过会员的方式提高下载上传的速率。所以只能来限制普通用户的上传或者下载的速率。vsftpd这个软件有一个缺点,前面讲到过。那就是不能单独的进行上行或者下行速率的单独设置。当然你可以在互联网搜索FTP服务的其他软件来解决这个问题!

上面这几个配置我决定一次性进行演示!

max_clients: 最大并发连接数;
max_per_ip: 每个IP可同时发起的并发请求数;

注意点

最大并发连接数为1000?如何理解?只需要设置max_clients,你可能会这样回答,不过这是错误的,显然你对并发连接这一块并不了解!开发环境中这个也是非常重要的。牛X的服务器可以不考虑。但是服务器普通服务器这一块服务器你不设置,一旦开启的ftp服务,有一天用户真的多到一定数量了,你所管理的服务器会负载过大变得非常难堪....

我们来通过帮助,查看一下默认的并发连接,以及并发请求数吧

# man 5 vsftpd.conf

max_clients: 最大并发连接数默认值为2000

max_per_ip: 每个IP可同时发起的并发请求数默认值为50

那到底什么意思呢?默认情况同时支持2000个连接数,在此基础上每个IP并发请求还能达到50个。所以峰值为2000*50=100,000这个并发连接数,并发请求数一般服务器肯定是扛不住的!

所以我们非常有比较进行这一项的设置,同时这一项在配置文件中是没有的,要么记住,要么学会使用查看帮助信息。先不急着配置,我们再来看看后面连个地方!

anon_max_rate: 匿名用户的最大传输速率, 单位是“字节/秒”;
local_max_rate: 本地用户的最大传输速率, 单位是“字节/秒”;

注意点

匿名 / 本地 用户最大传输速率单位是“字节/秒”严格按照单位来配置!不要尝试使用M/s G/S,因为vsftpd是不可以的,至于其他FTP服务软件,自行测试好了!

现在开始配置

# vim /etc/vsftpd/vsftpd.conf

//进入配置文件开始配置

max_clients=200
max_per_ip=5

anon_max_rate=10000
local_max_rate=50000

//保存退出 重启服务

# service vsftpd restart
# service vsftpd status

所有的配置都完成了,我们重启服务看看,如果成功则说明没有问题,需要做的是在客户端进行测试功能是否实现。如果重启失败报错,则返回配置文件看看哪一步配置有问题?

连接数这个测试,我的思路还是停留在模拟多个用户进行方法,显然虚拟机无法实现,所以做不了实验,大家记住这个很重要,一定要进行配置就好了!不过上传下载速率这个我们是可以进行模拟的,每天多学一行代码~

# dd if=/dev/zero of=/var/ftp/test.mkv bs=256M count=2

我们通过dd来创建一个名为test.mkv的文件,位置在/var/ftp目录下,文件大小为512M左右

创建成功,接下来就在客户端测试好了

FTP客户端配置3

这一次,我觉得使用Windows图形化界面,最舒服最熟悉的操作环境了。同时Linux,Windows命令行,Windows图形化操作就全部都进行了一次演示。

可以看到我们通过GUI-资源管理器进行ftp连接,里面有一个test.mkv文件的,我们可以利用迅雷进行多并发下载测试,看看速度怎么样!对了,忘记说了一点,默认情况访问ftp用的是匿名用户anonymous。我们设置的是匿名用户最大传输速率10Kbit/s。同时同一IP最大并发数为5。所以此时下载速率理论不会超过50Kbit/s。

测试结果没有打脸~确实在50Kbit/s不过我想尝试一下第三方浏览器的多线程下载以及断点续传了

第三方下载软件相对于系统自带的浏览器优点

1.支持断点续传,暂停了能够继续,浏览器暂停了只能重头开始继续下载

2.可以多线程下载,将一个数据分为几段,多线程同时下载,最后打包。而默认浏览器则是单现成下载,速度上自然会慢许多许多!

说干就干,我们暂停第三方软件ftp文件的下载,然后回到FTP的服务配置,将匿名用户最大传输速率注释掉或者删掉就好了。至于怎么操作,我不进行贴图演示。

vim /etc/vsftpd/vsftpd.conf  //FTP服务端
#anon_max_rate=10000  //将这一行删掉 或者注释掉

# service vsftpd restart
# service vsftpd status

值得注意的是在改为vsftpd软件的配置文件后一定要记得重启服务!

在取消最大传输速率限制后,速度差不多到了50MB/s,简直吊炸天,某云盘要是能这样就很舒服了,不过国内付费服务还是很难开展下去的......

延伸——瞎倒腾

上课发现老师们喜欢用一个windows端简化版的ftp文件,用来进行作业的上传下载。里面有一个功能:支持匿名用户进行文件的访问获取,只能够上传,但是不能够下载!

这个功能简直吊炸天,但是菜鸡在学习完这个服务后一直觉得很难完成,毕竟anonymous_enable=YES开放匿名用户访问那自然也能够进行文件的下载。所以很想很想倒腾一下!

不过通过浩哥的rwx权限操作讲解再一次发现自己对已学知识的不牢固以及缺失!

实现原理给FTP服务端/var/ftp文件夹赋予755 rwxr-x--x 这样就能够让文件只能访问但是不能下载了。缺少的知识点x文件执行权限的解读!虽然是只能执行,不能读不能写,但实际上执行权限是可以获取文件列表的!

经过实验,是自己沙雕了!!!成功在上课过程中把自己绕进坑里,把浩哥带入坑里。anon_upload_enable=YES开放匿名用户上传文件。这一行默认是没有开启的,所以默认情况下权限就是755。同时匿名用户只能够下载,但是不能够上传!

尝试将桌面的a.txt文件拖入文件夹,操作失败!完成需求!

FTP知识点小结

查看FTP 服务器配置文件生效内容。第一时间想到过滤#号开头 空格开头

# grep -v ^# /etc/vsftpd/vsftpd.conf | grep -v ^$

查看FTP服务运行状态并查看服务相关进程

# service vsftpd status
# ps -ef | grep vsftpd

监听FTP相关服务端口

# netstat -tunlp | grep vsftpd

netstat命令各个参数说明如下:

  -t : 指明显示TCP端口

  -u : 指明显示UDP端口

  -l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)

  -p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。

  -n : 不进行DNS轮询(可以加速操作)

默认情况下面这条你是监听不到的,这里我是让客户机进行了下载的操作,所以才会监听到数据传输的端口号浩哥说这个部分不是数据传输端口。同时默认情况是主动模式,数据传输会固定在20号端口。实验是完成了这里好像有一些疑惑,监听显示的是一条随机的端口号。但是主动模式应该是固定在20号端口啊?期待大家评论区给予解答!

疑惑点:20号端口是监听不到的.......

还有几个常用的FTP配置文件

1.匿名用户的配置:
anonymous_enable=YES            开放匿名用户访问

anon_upload_enable=YES            开放匿名用户上传文件
anon_mkdir_write_enable=YES        开放匿名用户创建目录
anon_ohter_write_enable=YES        开放匿名用户其他写权限

2.系统用户的配置:
local_enable=YES                开放系统用户访问

write_enable=YES                开放系统用户写权限
local_umask=022                    设置用户FTP写入的umask

3.改变上传文件的属主:
chown_uploads=YES
chown_username=whoever

4.是否启用控制用户登录的列表文件:
userlist_enable=YES
userlist_deny=YES|NO    YES为黑名单,NO为白名单

默认文件为/etc/vsftpd/user_list

总结一下

到此关于Linux——FTP服务配置的教程就结束了。最开始的初始化配置由于篇幅问题没有过多描述,可以去参考一下我写的Linux——DHCP服务,为了方便实验,在关闭防火墙的情况下完成的实验,折腾人士可以尝试开启防火墙来玩耍一下。最后的最后感谢浩哥的指导。本文由程志辉原创独自编辑,难免会出现一些错误,欢迎大家在评论区指出,同时转载请留下版权!

2019年04月30日
Icefox Theme . 鄂ICP备16001608号-1