一、FTP协议概述
1、什么是FTP协议
FTP协议(File Transfer Protocol)即远程文件传输协议,是一个用于简化IP网络上系统之间文件传送的协议,FTP是TCP/IP的一种具体应用,它工作在OSI模型的第7层,TCP模型的第四层上,即应用层,使用TCP传输而不是UDP,FTP建立的就是一个可靠的连接。采用FTP协议可使 Internet用户高效地从网上的FTP服务器下载大信息量的数据文件,将远程主机上的文件拷贝到自己的计算机上,以达到资源共享和传递信息的目的。
2、FTP工作原理
FTP有两个过程一个是控制连接,一个是数据传输。FTP协议不像HTTP协议一样需要一个端口作为连接(默认时HTTP端口是80,FTP端口是21)。FTP协议需要两个端口,一个端口是作为控制连接端口,也就是FTP的21端口,用于发送指令给服务器以及等待服务器响应;另外一个端口用于数据传输端口,端口号为20(仅用PORT模式),是用建立数据传输通道的,主要作用是从客户向服务器发送一个文件,从服务器向客户发送一个文件,从服务器向客户发送文件或目录列表。
3、FTP的传输模式
FTP可用多种格式传输文件,通常由系统决定,大多数系统(包括UNIX系统)只有两种模式:文本模式和二进制模式。文本传输器使用ASCII字符,并由回车键和换行符分开,而二进制不用转换或格式化就可传字符,二进制模式比文本模式更快,并且可以传输所有 ASCII值,所以系统管理员一般将FTP设置成二进制模式。
4、FTP的工作方式
FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。
1)、Port模式
FTP 客户端首先动态的选择一个端口(一般是1024以上的)和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。
2)、Passive模式
在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。
二、Serv-U及vsftp软件简介
Serv-U,是一种被广泛运用的FTP服务器端软件,支持3x/9x/ME/NT/2K等全Windows系列。可以设定多个FTP服务器、限定登录用户的权限、登录主目录及空间大小等,功能非常完备。 它具有非常完备的安全特性,支持SSl FTP传输,支持在多个Serv-U和FTP客户端通过SSL加密连接保护您的数据安全等。
VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全。
三、实施步骤
1、问题描述
单位需要更新FTP服务器,并且由于费用的问题,不想升级原来的Serv-U软件,想改用基于GPL的Vsftp软件,我们的任务是将原有的FTP账号信息和用户数据迁移到基于Vsftp的FTP服务器上,允许账号的密码重新设置,在这里我们设置的密码与用户名相同。
2、环境介绍
原有FTP服务器1台,在服务器上安装了windows2003标准版本及Serv-U软件,在Serv-U中创建了500多个用户账号,并且有将近1T的用户数据;新服务器1台,安装Red Hat Enterprise Linux Server release 5.5操作系统。
3、vsftp的安装
软件安装有二种方式,可以根据服务器的环境设置,任选一种:
1)、RPM方式
rpm –ivh /mnt/cdrom/Servervs/ftpd-2.0.5-24.el5_8.1.i386.rpm
2)、YUM方式
yum install vsftpd
4、用户数据的迁移
为了在linux及windows之间数据共享,我们需要安装samba-client,然后使用mount命令将windows的FTP数据目录挂载到/mnt/samba目录下,使用cp命令进行用户数据的迁移:
yum install samba-client
mount.cifs //10.0.0.1/ftpdata /mnt/samba -o user=administrator
cp –a  /mnt/samba/*  /var/ftp/pub
5、ftp账号的迁移
成功迁移了用户数据后,接下来我们要迁移用户的账号。为了迁移Serv-U里的账号名称信息,先要将Serv-U软件安装目录下的ServUDaemon.ini上传到linux的FTP服务器中。分析ServUDaemon.ini文件,我们可以看到账号的名称都是分布在以User开头的每一行中,另外我们还可以看到账号名称和其他属性用“=”和“|”隔离,如User1=admin|1|0,这样我们就可以利用linux系统下的cut及管道命令来分离出账号名称,具体命令如下:
cat ServUDaemon.ini | grep ^User | cut -d \= -f 2 | cut -d \| -f 1 > test
得到test文件后,我们就可以利用脚本自动添加vsftp账号,脚本代码如下:
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
usernames=$(cat /root/test)
i=0
for username in $usernames
do
i=$((i+1))
useradd -d /var/ftp/pub/$username -s /sbin/nologin $username 2> /dev/null
echo $username|passwd --stdin $username
echo $username >> /etc/vsftpd/user_list
echo $username >> /etc/vsftpd/chroot_list
echo $username "has been created!"
chown -R $username /var/ftp/pub/$username
echo $username "is ok"
done
其中/etc/vsftpd/user_list和chroot_list文件为vsftp的设置文件,只有将账号添加到这两个文件后,才可以达到控制用户和锁定用户目录的作用。
6、vsftp的安全设置
1)、Netfilter的设置
#!/bin/bash
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin;
EXTIF="eth1"   
INIF="eth0"                                                     
export EXTIF INIF  PATH
#清除规则、设定预设策略及开放lo与相关的设定值
  iptables -F
  iptables -X
  iptables -Z
  iptables -P INPUT   DROP
  iptables -P OUTPUT  ACCEPT
  iptables -P FORWARD ACCEPT
  iptables -A INPUT -i lo -j ACCEPT
  iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p TCP -i $EXTIF --dport  21   -j ACCEPT 
iptables -A INPUT -p TCP -i $EXTIF --dport  20   -j ACCEPT
2)、vsftpd.conf的设置
不允许匿名登录:anonymous_enable=NO
锁定用户目录:chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
其他安全策略:pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES
四、结束语
通过以上的操作,我们基本实现了将FTP用户从windows平台下的Serv-U迁移到linux平台下的Vsftp中使用,并且介绍了简单安全策略的应用,希望对大家有所帮助。

文章如转载,请注明转载自:http://www.5iadmin.com/post/1039.html