一.FTP(File Transfer Protocol)概述
1.功能
1)在服务器和客户端之间进行文件的传输(明文传输);
2)不同等级的用户身份:实体用户(user),访客(guest),匿名用户(anonymous);
3)命令记录与日志文件记录:利用系统的syslogd来记录数据,生成日志;
4)限制用户活动的目录(change root,简称chroot):FTP可以限制用户只在自己的主目录当中活动,用户登录FTP之后,显示的就是自己的主目录,相当于改变了根目录;
2.FTP主动式连接
1)流程
a.建立命令通道:客户端随机选取一个大于1024的端口,向服务端的21端口发起连接请求,通过三次握手,可以实现通过该通道来进行命令的传输;
b.通知FTP服务端使用Active且告知连接的端口号:当要使用数据流时,客户端另选一个端口,并通过上一步中的通道告知服务端该端口号和服务端需要用的连接方式,等待FTP服务端的连接;
c.FTP服务端主动向客户端连接:通过上一步的需求,服务端通过20端口向客户端数据接收的端口发起连接请求,经过三次握手,成功建立连接后就可以完成数据流的传输;
总结:主动式连接的FTP需要用到两个端口号:21(命令通道),20(数据传输通道)。
2)如果客户端和服务端直接有防火墙
存在的问题:客户端通过NAT还是能正常向服务端请求,所以a,b两步还是能完成,但是当服务端向客户端发送数据的时候,就会被防火墙阻挡,无法进入客户端所在的局域网,也就是说,在服务端看来,客户端是真正客户端经过NAT之后的,而NAT的数据传输端口是未开启的,导致客户端并不能接收到数据,无法进行数据传输;
解决办法:
1)使用iptables提供的FTP检测模块:用modprobe加载ip_conntrack_ftp和ip_nat_ftp等模块,这几个模块会主动分析目标是21的端口的连接信息,此时若接受到FTP服务器的主动连接,就能将数据正确导向正确的后端主机了;
2)客户端使用被动式(passive)连接模式:即由客户端向服务端发起连接的方式。
3.FTP被动式连接
1)流程
a.用户与服务器建立命令通道(和主动式建立命令通道方式相同);
b.客户端发出PASV的连接要求:当使用数据通道的命令时,客户端通过命令通道发出PASV的被动式连接请求,并等待服务器的回应;
c.FTP服务端启动数据端口,并通过命令通道通知客户端:此时启动的数据端口是随机的,告知客户端之后等待连接;
d.客户端选取端口连接服务端数据端口:客户端随机选取一个大于1024的端口对主机的数据端口连接,最终数据通过该通道连接;
总结:被动式的FTP数据传输是通过客户端向客户端发起连接的,所以用这种方式在NAT里的客户端可以成功和服务端建立连接。
4.FTP的安全问题解决办法
1)随时更新到最新版本的FTP软件,并随时注意漏洞信息;
2)使用iptables,TCP_Wrappers等来限制网络;
3)善用FTP软件的设置来限制使用FTP服务器用户的权限控制;
4)使用super daemon来管理FTP服务器;
5)随时注意用户的主目录及匿名用户登录的目录的文件权限;
6)若不对外公开,可以修改FTP的端口;
7)也可以使用FTPs这种加密的FTP功能。
5.用户权限
1)开放实体用户(Real user)
这时特别要注意权限的控制,因为FTP系统并没有针对实体用户来进行限制的,所以他可以对整个文件系统操作(在他权限范围之内),可以采取如下办法:
a.使用其他方案替代,如ssh;
b.限制用户能力,如chroot与/sbin/nologin等;
2)访客身份(guest)
a.仅提供需要登录的账号即可,不需要提供系统上所有人都可登录的环境;
b.针对不同的访客给他们不一样的用户主目录,而这个用户主目录与用户的权限设置需要符合;
c.针对这个用户身份,需要较多的限制,包括上传(下载)文件数目与硬盘量的限制,连接登录时间限制,许可使用的命令限制;
3.匿名登录用户(anonymous)
a.允许的工作命令要减少很多,几乎就不许匿名用户使用命令;
b.限制文件传输的数量,尽量不要允许上传数据的设置;
c.限制匿名用户同时登录的最大连接数量。