摘 要:Linux下有代表性的FTP服务软件有Wu-FTP、ProFTP和vsFTPd。其中的vsFTPd是一款非常安全、快速和稳定的FTP服务软件。通过对Linux平台下的FTP网络服务原理的分析,对服务器进行了详细的安装与配置,该服务在实际运用中达到较好的效果。
关键词:FTP; vsFTPd;端口安全
1 引言
FTP的全称File Transfer Protocol(文件传输协议),顾名思义,它是专门用来传输文件的协议。它支持的FTP功能是网络中最重要、用途最广泛的服务之一,实现了服务器与客户机之间的文件传输和资源再分配,是普遍采用的资源共享方式之一,用户可以连接到FTP服务器上下载文件,也可以将自己的文件上传到FTP服务器。
FTP是TCP/IP协议的一种具体应用,工作在OSI模型的第七层、TCP模型的第四层(应用层),它使用TCP传输而不是UDP,这样FTP客户在和服务器建立连接前就要经过“三次握手”的过程,它的意义在与客户与服务器之间的连接是可靠的,而且是面向连接的,为数据的传输提供了可靠的保证。另外,FTP服务还有一个非常重要的特点是可以独立与平台,也就是说在UNIX、Linux和windows等操作系统中都可以实现FTP的客户端和服务器,相互之间可以跨平台进行文件传送。
2 FTP服务工作原理
FTP协议在两台主机之间建立了两条通信链路,分别是:控制连接和数据连接。控制连接主要负责传送在会话过程中用户发送的FTP命令和FTP服务的响应;数据连接主要负责传送数据。FTP服务工作过程如图1所示。
(1)当FTP客户端发出请求时,系统将动态分配一个端口(比如1032)。
(2)若FTP服务器在端口21监听到该请求,则在FTP客户端的端口1032和FTP服务器的端口21之间建立起一个FTP会话连接。
(3)当需要传输数据时,FTP客户端再动态打开一个连接到FTP服务器的端口20的第2个端口(比如1033),这样就可以在这两端口之间进行数据的传输。当数据传输完毕后,这两个端口会自动关闭。
(4)当FTP客户端断开与FTP服务器的连接时,客户端上动态分配的端口将自动释放掉。
需要说明的是:数据连接只有在需要进行数据传输时才会建立起来,当数据传输完成或者遇到不可恢复的错误时,数据连接会由服务端负责关闭,数据连接时全双工的连接,能够双方向传输数据。
FTP服务的数据传输可以分为Port(主动)模式和Passive(被动)模式。在Port(主动)模式下,首先由客户端向服务端发送准备接受的IP地址和端口,然后服务端主动发起并建立连接到指定的IP地址和端口Y,所以也称为“主动”模式。由于客户端数据端口Y是随即指定的,所以要求FTP服务器能够顺利地链接所有的端口。在Passive(被动)模式下,客户端通过PASV命令获得服务端IP地址和数据端口,然后向服务端发起连接请求,从而建立数据连接。服务端只是被动地监听在指定端口Y上,所以称之为“被动”模式。在Internet的环境下,FTP服务器大多放置在防火墙或者NAT网关之后。在这种环境下,如果要连接FTP服务器的任意端口,就必须在防火墙和NAT网关上做相应的规则设置,使其允许这些随机的端口通过。这无疑会增加网管的工作负担,而且允许访问任意的端口也会对网络的安全带来隐患。绝大多数的防火墙设置是:允许内部IP访问外部的任意地址和端口,允许外部IP访问防火墙之内的指定地址和端口。所以如果FTP服务器放置在防火墙之后,就推荐使用Port模式。
当连接某一个FTP服务器失败时,可以尝试着修改FTP客户端工具配置,使其使用Port模式工作,或许能成功。
3 安装与配置vsFTPd服务
(1) Linux在默认已经安装vsftpd,可以使用rpm命令查看,如下所示:
#
FTP服务器关闭之后,所有的用户都不能再登陆;默认情况在会将关闭命令的结果写入/etc/shutmsg 文件。当管理员整理完FTP站点之后,会重新开放FTP服务器,应删除/etc/shutmsg 文件,然后重新启动。对FTP服务器不太熟悉的管理员操作起来会比较麻烦,所以不需要使用ftpshut now 命令关闭FTP服务器。
(3) RedHat系统默认安装的FTP软件是vsftpd,其相关的配置文件有/etc/vsftpd/vsftpd.conf、/etc/vsftpd/ftpusers 和 /etc/vsftpd/user_list;在配置FTP服务器时,主要是修改这些文件中的相关语句。一下是vsftpd服务器相关文档:
/etc/vsftpd/vsftpd.conf:vsftpd的核心配置文件
/etc/vsftpd/ftpusers:用于指定哪些用户不能访问FTP服务器
/etc/vsftpd/user_list:指定允许使用vsftpd的用户列表文件
/etc/vsftpd/vsftpd_conf_migrate.sh:是vsftpd操作的一些变量和设置脚本
/var/ftp/:默认情况下匿名用户的根目录
4 vsFTPd服务的安全配置
下面在进行系统详尽的设置,主要就是针对 vsftpd的配置文件vsftpd.conf文件的配置。
(1)禁止匿名用户访问, 我们不需要什么匿名用户,直接禁止掉:
anonymous_enable=NO
(2)允许本地用户登陆,因为我们需要使用ftp用户来对我们网站进行管理:
local_enable=YES
(3)只允许系统中的ftp用户或者某些指定的用户访问ftp,因为系统中帐户众多,不可能让谁都访问。
打开用户文件列表功能:
userlist_enable=YES
只允许用户文件列表中的用户访问ftp:
userlist_deny=NO
用户名文件列表路径:
userlist_file=/etc/vsftpd.user_list
然后在/etc下建立文件 vsftpd.user_list 文件,一行
一个,把用户ftp加进去,同时也可以加上你允许访问的系统帐户名。
(4) 禁止某些用户登陆ftp:
pam_service_name=vsftpd
指出VSFTPD进行PAM认证时所使用的PAM配置文件名,默认值是vsftpd,默认PAM配置文件是/etc/pam.d /vsftpd。
/etc/vsftpd.ftpusers
VSFTPD禁止列在此文件中的用户登录FTP服务器,用户名是一行一个。这个机制是在/etc/pam.d/vsftpd中默认设置的。
这个功能和(3)里的功能有点类似,结合使用效果更好。
(5) 把本地用户锁定在自己的主目录,防止转到其他目录,下载/etc/passwd:
chroot_local_users=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
然后在/etc下建立vsftpd.chroot_list文件,把要限制的本地帐户加进去,一行一个,加上ftp,防止它登陆到系统。
(6) 隐藏文件真实的所有用户和组信息,防止黑客拿下ftp后查看更多系统用户信息:
hide_ids=YES
(7) 取消ls -R命令,节省资源,因为使用该命令,在文件列表很多的时候将浪费大量系统资源:
ls_recurse_enable=NO
上传文件的默认权限,设置为022:
local_umask=022
如果要覆盖删除等,还要打开:
write_enable=YES
(9) ftp的banner信息,为了防止黑客获取更多服务器的信息,设置该项:
ftpd_banner=banner string
把后面的banner string设为你需要的banner提示信息,为了安全,建议不要暴露关于vsFTPd的任何信息。
另外,如果你的信息比较多的话,可以设置为提示信息是读取一个文件中的信息:
banner_file=/directory/vsftpd_banner_file
(10) 打开日志功能:
xferlog_enable=YES
同时设置日志的目录:
xferlog_file=/var/log/vsftpd.log
启用详细的日志记录格式:
xferlog_enable=YES
(11) 如果打开虚用户功能等,那么建议关闭本地用户登陆:
local_enable=NO
5 总结
FTP是网络中最重要、用途最广泛的应用服务之一,用户可以直接连接到FTP服务器上传与下载文件。作为保证域名服务器稳定运行的操作系统—Linux,它具有强大的发掘潜力,是配置域名服务器时优选的操作系统。正确的配置服务器之后,不能忽视对FTP服务实施安全策略,以确保域名服务器的正常运行。
参考文献:
[1]骆耀祖. Linux网络服务器管理教程[M].电子工业出版社, 2007
[2]冯昊. Linux服务器配置与管理(第2版) [M].清华大学出版社, 2009.
[3]周淑萍.基于Solaris 9的VSFTP服务的实现[J].微计算机信息,2006(27).
[4]张煜.基于LINUX平台的FTP服务[J].科技情报开发与经济,2004(11).
[5]蔡勇.FTP服务器技术研究及实现[C].电子科技大学硕士学位论文,2005.
[6]胡明霞.FTP服务在网络中的应用探讨[J].科技情报开发与经济,2006(21).