一、简介

FTP 是文件传输协议,正是由于这种协议使得主机间可以共享文件。 FTP 使用 TCP 生成一个虚拟连接用于控制信息,然后再生成一个单独的 TCP 连接用于数据传输

目前在开源操作系统中常用的FTP服务器程序主要有vsftpd、ProFTPD、PureFTPd和wuftpd等,这么多FTP服务器程序,关键在于自己熟练哪一个就使用哪一个。今天我们来研究一下VSFTPD简单安装及使用。

vsftpd是一款在Linux发行版中最主流的FTP服务器程序;特点是小巧轻快,安全易用;能让其自身特点得发发挥和掌握。

vsftp提供三种登陆方式:1.匿名登录  2.本地用户登录  3.虚拟用户登录

二、工作原理

Ftp协议中控制连接均是由客户端发起,而数据连接有两种工作方式:Port和Pasv方式

1) Port模式(主动模式)--> 默认

  Ftp客户端首先和Ftp server的tcp 21端口建立连接,通过这个通道发送命令,客户端要接受数据的时候在这个通道上发送Port命令,Port命令包含了客户端用什么端口(一个大于1024的端口)接受数据,在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。这个时候数据连接由server向client建立一个连接。

 Port交互流程:

client端:client链接server的21端口,并发送用户名密码和一个随机在1024上的端口及port命令给server,表明采用主动模式,并开放那个随机的端口。

server端:server收到client发来的Port主动模式命令与端口后,会通过自己的20端口与client那个随机的端口连接后,进行数据传输。

 

2) Pasv模式(被动方式)

  建立控制通道和Port模式类似,当客户端通过这个通道发送Pasv命令的时候,Ftp server打开了一个位于1024和5000之间的随机端口并且通知客户端在这个端口上进行传输数据请求,然后Ftp server将通过这个端口进行数据传输。这个时候数据连接由client向server建立连接。

  Pasv交互流程

Clietn:client连接server的21号端口,发送用户名密码及pasv命令给server,表明采用被动模式。

server:server收到client发来的pasv被动模式命令之后,把随机开放在1024上的端口告诉client,client再用自己的20 端口与server的那个随机端口进行连接后进行数据传输。

 

  如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND,这一点请特别注意,尤其是在使用防火墙的企业里,这一点非常关键,如果设置错了,那么客户将无法连接。


三、安装vsftpd及相关软件


yum  install vsftpd*  pam*   db4*  -y

vsftpd:ftp软件      pam:认证模块       DB4:支持文件数据库


四、配置 /etc/vsftpd/vsftpd.conf 文件


1)匿名用户登陆

不用修改配置文件,直接在window客户端打开【我的电脑】资源里访问ftp://192.168.1.10(服务器IP)


2)本地用户登录

1.修改配置文件  

anonymous_enable=YES   //允许匿名用户访问 改为 anonymous_enable=NO    //禁止匿名用户访问

2.创建用户名及密码    useradd test

3.重启vsftpd服务     service vsftpd restart

4.客户端访问共享资源   

打开【我的电脑】资源里访问ftp://192.168.1.10(服务器IP)


3)虚拟用户登录

1.创建并生成vsftpd数据库文件   vi /etc/vsftpd/ftpusers.txt 内容如下:

第一行为FTP虚拟用户,登录用户名,第二行为密码,第三行为用户名,依次类推。

liang1

1

liang2

1

2.生成数据库文件命令:

db_load -T -t hash -f /etc/vsftpd/ftpusers.txt /etc/vsftpd/vsftpd_login.db

chmod 700 /etc/vsftpd/vsftpd_login.db  #修改文件权限

3. 配置PAM验证文件:

在配置文件vi /etc/pam.d/vsftpd 行首加入如下两行认证语句:(如果是32位,lib64需改成lib,如果RedHat,加入的语句不一样,需注意

auth    sufficient      /lib64/security/pam_userdb.so     db=/etc/vsftpd/vsftpd_login

account  sufficient      /lib64/security/pam_userdb.so      db=/etc/vsftpd/vsftpd_login

查看Linux是32位还是64位

方法一:

[root@localhost ~]# uname -a

Linux localhost.lw 2.6.32-358.el6.i686 #1 SMP Thu Feb 21 21:50:49 UTC 2013 i686 i686 i386 GNU/Linux

显示x86_64表示为64位,i686则为32位。

方法二:

[root@localhost ~]# getconf LONG_BIT

32

直接看显示结果

4.创建vsftpd映射本地用户:

所有的FTP虚拟用户需要使用一个系统用户,这个系统用户不需要密码,也不需要登录。主要用来做虚拟用户映射使用。

useradd  –d /home/ftpuser –s /sbin/nologin ftpuser

5.修改完整版配置文件内容如下:

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_file=/var/log/vsftpd.log

xferlog_std_format=YES

ascii_upload_enable=YES

ascii_download_enable=YES

listen=YES

guest_enable=YES

guest_username=ftpuser

pam_service_name=vsftpd

user_config_dir=/etc/vsftpd/vsftpd_user_conf

virtual_use_local_privs=YES

6.重启vsftpd服务     service vsftpd restart 即可使用虚拟用户登录

这时候所有的虚拟用户共同使用/home/ftpuser目录上传下载,如果想使用自己独立的目录,可以在/etc/vsftpd/vsftpd_user_conf目录创建各自的配置文件(mkdir /etc/vsftpd/vsftpd_user_conf)

如给liang创建独立的配置文件:

vi /etc/vsftpd/vsftpd_user_conf/liang ,内容如下,建立自己的FTP目录。

local_root=/home/ftpsite/liang

write_enable=YES

anon_world_readable_only=YES

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

五、配置文件的内容解释

#vsftpd config 2014 by wugk
anonymous_enable=NO    //禁止匿名用户访问
local_enable=YES  //允许本地用户登录FTP
write_enable=YES   //运行用户在FTP目录有写入的权限
local_umask=022   //设置本地用户的文件生成掩码为022,默认是077
dirmessage_enable=YES //激活目录信息,当远程用户更改目录时,将出现提示信息
xferlog_enable=YES   //启用上传和下载日志功能
connect_from_port_20=YES  //启用FTP数据端口的连接请求
xferlog_std_format=YES  //是否使用标准的ftpd xferlog日志文件格式
listen=YES  //使vsftpd处于独立启动监听端口模式
pam_service_name=vsftpd //设置PAM认证服务配置文件名称,文件存放在/etc/pam.d/目录
userlist_enable=YES   //用户列表中的用户是否允许登录FTP服务器,默认是不允许
tcp_wrappers=YES    //使用tcp_wrqppers作为主机访问控制方式