前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第七章 FTP服务(1)

第七章 FTP服务(1)

作者头像
晓天
发布2019-07-04 14:28:30
2.6K0
发布2019-07-04 14:28:30
举报

第七章 FTP服务(1)

7.1 FTP简介

FTP是File Transfer Protocol(文件传输协议)的缩写。功能是支持客户访问后的上传、下载文件。当然在全球internet上,我们部署FTP的目的主要是用于资源的共享,让客户端可以下载数据。现今很多企业内部也会部署FTP服务器作为文件服务器使用,从而替代samba、SMB等服务。

FTP服务器的监听端口是TCP 21,客户端可以向FTP服务器的TCP21端口发起请求,建立通信连接。但是FTP的特殊性在于,客户端连接成功后(TCP三次握手建立连接),传输数据时会更换另一个端口,专用于数据的传输(即上传、下载)。具体的数据端口是要看客户端与服务器的连接模式。

7.1.1 FTP工作模式

作为FTP服务器,支持两种工作模式:主动模式与被动模式,这两种模式服务器是同时支持的,主要看客户端是选择哪一种模式访问服务。可以认为,不同的客户端,有的使用主动模式连接服务,有的选择被动模式连接服务,所以服务器必须同时支持两种模式才可以。

另外,主动或被动,是以客户端的角度出发的,客户端主动则是主动模式,客户端被动则是被动模式,下面来介绍下两种模式的具体工作原理:

1、主动模式

1)Clent开启一个动态端口,假设2000,连接Server的21端口做三次握手,过程中,Client开启+1的端口,即2001做备用

2)连接建立后,Client向Server发送通知命令:port 2001 ,告知Server,自己处于主动模式下,并且数据端口为2001

3)Server使用20,与Client的2001建立连接,开始传输数据

注:一般客户端使用浏览器、cmd界面访问FTP时,使用主动模式。

2、被动模式

1)Client开启一个动态端口,假设2000,连接erverS的21端口做三次握手,过程中,Client开启+1的端口,即2001做备用

2)连接建立后,Client向Server发送通知命令:PASV,告知Server,自己处于被动模式下

3)Server开启一个动态端口,假设是3000,向Client发送通知命令:port3000,告知Client,自己的数据端口是3000

4)Client使用2001与Server的3000建立连接,开始传输数据

注一般客户端使用软件访问FTP时,使用被动模式,如:迅雷,flashfxp等。

综上可见,主动与被动的区别在于谁发的port命令,客户端发送port,则为主动模式,服务器发送port,则客户端为被动模式。

而且,在日常中,其实被动模式会更高效些,因为主动模式下,服务器统一使用20端口与多个客户端传输数据,按照一个端口对应一个进程的原理,那么就会产生服务器一个进程给多个客户端传输数据的情况,效率较低。而被动模式下,服务器开启动态端口连接客户端,传输数据,则可以认为是一个进程专职服务一个客户,效率较高。但是正因为如此,被动模式也会增加服务器的资源占用,并发连接数会有限制。

总结FTP的通信端口,如下:

主动模式:TCP 21(连接) 20(数据)

被动模式:TCP 21(连接) 动态端口(数据)

在Unix/Linux系统中常用的免费FTP服务器软件主要是VSFTP。当然Linux中也有其他的FTP配置工具,如:wu-ftp等,windows中有IIS、serv-U等软件。本章中以使用最为广泛的vsftp为例作讲解。在CentOS的系统光盘上自带vsftp的安装包,下面我们就来介绍一下配置细节。

7.2 VSFTP配置

7.2.1 VSFTP基本配置

实验环境:

服务器:192.168.10.1 关闭防火墙

客户端:windows2003 ip:192.168.10.10

实验配置:

yum -y install vsftpd ---安装vsftp软件

其实安装完毕后,FTP服务就已经有了默认的配置,可以直接启动了,但是我们还是先来看一下配置文件,看一下默认的设置都有哪些:

vi /etc/vsftpd/vsftpd.conf ---编辑配置文件,其中

anonymous_enable=yes ---允许匿名登录

---匿名用户默认访问位置:/var/ftp/

---/var/ftp目录的权限必须是755,不允许改动,否则匿名被禁用

local_enable=yes ---允许本机系统用户登录

---系统用户默认访问位置:个人家目录

write_enable=yes ---本机系统用户开放写权限

local_umask=022 ---系统用户上传文件后的umask值

dirmessage_enable=YES ---字符界面下,登录成功或切换路径后,自动显示目录下.message文件的内容

userlist_enable=YES ---启用用户列表文件,该文件中的用户,拒绝登录ftp,用户列表文件: /etc/vsftpd/user_list

pam_service_name=vsftpd ---指定登录验证时,采用哪个登录验证配置文件的设定。登录验证配置文件统一在:/etc/pam.d/下

systemctl restart vsftpd

systemctl enable vsftpd

说明:以上配置是配置文件中默认的配置项,读者可以根据需求自定做些更改验证。

现在我们先来使用这些默认配置,来验证一下功能:windows中打开浏览器,地址栏输入:ftp://192.168.10.1 访问FTP查看:

如图可见,打开后直接登录,默认使用的是匿名用户登录进去的(窗口底侧有提示),可以看到有一个文件夹pub,其实就是/var/ftp下的内容:

在空白处右键,点击登录后,切换用户登录,如系统中原有用户moon,则可使用该用户登录FTP站点,登录后,默认访问到moon用户的家目录。

读者可以自行验证,系统用户登录后有写权限,匿名用户登录后无写权限。

另外,我们也可以在FTP服务器上运行:chmod 777 /var/ftp ,之后客户端再次登录后会发现无法以匿名用户身份登录了,因为/var/ftp/目录权限只可以是755。

但是我们看到,在浏览器中登录后,是无法切换到默认登录位置的上一级目录的,所以需要在字符界面登录来演示,如下图:

图中,使用ftp 192.168.10.1 命令登录FTP,并使用moon用户登录,登录后pwd可查看到当前的完整路径,然后可以使用cd切换目录,是可以转入到系统中任何目录下的,使用get mget put mput等命令可以实现上传、下载文件(sftp中介绍过这些命令),使用quit命令退出。

下面在服务器上来执行以下命令

cd /home/moon

echo "this is moon'shome" > .message

cd/mnt

echo "this is /mnt" > .message

我们在moon家目录和/mnt/下分别创建了.message文件,然后在客户端登录看一下:

可见到,moon登录后会自动显示出家目录下的.message文件的内容,切换目录到/mnt/下后,也自动显示了.message文件的内容,但是由于/var/下没有创建.message,所以切换到/var/下后没有显示。这就是配置文件中dirmessage_enable=YES行的功能。

我们再在客户端上使用root登录试一下,会发现,无论浏览器或cmd界面都不可登录,这是因为root作为管理员,如果把密码透露给FTP用户很容易造成root密码泄露,所以,为了安全,系统是拒绝root登录的。拒绝登录用户的列表文件是/etc/vsftpd/user_list,这也是配置文件中userlist_enable=YES行的功能。

vi /etc/vsftpd/user_list后可见被拒绝的用户列表,如下图:

我们也可以把想要拒绝的用户加入到这个文件中,重启vsftpd服务后即可生效。

大家可能已经意识到了,如果允许一个普通用户登录FTP,需要把该用户的密码告知使用者,那么使用者直接通过ssh登录系统,不就可以做破坏了吗?是的,这确实是一个比较危险的漏洞,所以,我们也可以设置用户尽可登录FTP,但不能登录ssh。这就需要配置用户配置文件了。操作如下:

vi /etc/passwd ---编辑用户配置文件

改用户的第七列为:/sbin/nologin,可以以moon用户为例做验证。

保存退出后即可了。

此操作的原理是设置用户登录系统后的shell为nologin,即登出shell,则用户虽未被禁用,也无法登录系统了,但是仍可以登录服务,如:FTP等。PS:其实在Linux系统基础教材中此操作已经介绍过了,不知读者们还记得吗?。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 教主小筑 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档