天天看点

Linux—FTP文件传输服务

FTP文件传输服务

FTP服务概述:

FTP(File Transfer Protocol,文本传输协议):是典型的C/S结构的应用层协议,需要由服务端软件、客户端软件两个部分共同实现文件传输功能。

FTP连接及传输模式:

  • 数据连接:TCP 20,用于建立数据连接,并传输文件数据(即上传及下载);
  • 控制连接:TCP 21,用于建立控制连接,并传输FTP控制命令。

数据连接的建立类型:

  • 主动模式:服务端从20端口主动向客户端发起连接
  • 被动模式:服务端在指定范围内某个端口被动等待客户端连接

FTP传输模式

  • 文本模式:ASCII(美国信息交换标准码)模式,以文本序列传输数据,一般只用于纯文本文件的传输;
  • 二进制模式:Binary模式,以二进制序列传输数据,这种模式不会转换文件中的字符序列,更适合传输程序、图片等非纯文本字符的文件。

FTP用户类型:

  • 匿名用户:用户名为ftp或anonymous,提供任意密码(包括空密码)都可以通过服务器的验证;一般用于提供公共文件的下载,如提供一些免费软件、学习资料下载的站点
  • 本地用户:指除了匿名用户以外的其他系统用户,帐号名称、密码等信息保存在passwd、shadow文件中。
  • 虚拟用户:使用独立的帐号/密码数据文件,而不是直接使用系统用户账号,虚拟用户可以将FTP账户与Linux系统账户的关联性降至最低,可以为系统提供更好的安全性。

FTP服务器软件的种类:

  • Windows 系统中常用: IIS 、Serv-U等
  • Linux 系统: proftpd 、pureftpd 、vsftpd 等

Vsftp:(Very Secure FTP Daemon)在安全性、速度和稳定性方面的表现相当突出,可支持15000个用户并发连接

FTP客户端工具的种类:

  • ftp命令程序
  • windows图形化ftp客户端工具:CuteFTP 、FlashFXP 、LeapFTP 、Filezilla 等
  • linux 中常用: gftp 、 kuftp 等
  • 下载工具软件: FlashGet(下载、支持断点续传)、Wget 等

1、Vsftp的配置文件:

vsftpd软件包

官方站点:http://vsftpd.beasts.org/

主程序:/usr/sbin/vsftpd 

服务名:vsftpd 

用户控制列表文件ftpusers和user_list:

  • /etc/vsftpd/ftpusers :(相当于黑名单),此文件中列出的用户将禁止登录vsftp服务器,不管该用户是否在user_list文件中出现;默认已包括root、bin、daemon等用于系统运行的特殊用户;
  • /etc/vsftpd/user_list :(黑-白名单,一般用作白名单),此文件中包含的用户可能被禁止登录,也可能被允许登录,具体取决于主配置文件vsftpd.conf中的设置。当存在“userlist——enable=YES”的配置项时,user_list列表文件方可生效;若指定“userlist_deny=YES”,则仅禁止此列表中的用户登录;若指定“userlist_deny=NO”,则仅允许列表中的用户登录。

主配置文件: /etc/vsftpd/vsftpd.conf

常用的全局配置项:

作用范围 配置项及示例 含义说明
全局配置 listen=YES 是否以独立运行的方式监听服务
listen_address=192.168.10.1 设置监听的IP地址
listen_port=21 设置监听FTP服务的端口号
write_enable=YES 是否启用写入权限
download_enable=YES 是否允许下载文件
userlist_enable=YES 是否启用user_list列表文件
userlist_deny=YES 是否禁用user_list中的用户
max_clients=0 限制并发客户端连接数
max_per_ip=0 限制同一IP地址的并发连接数
匿名用户 anonymous_enable=YES 启用匿名访问
anon_umask=022 匿名用户所上传文件的权限掩码
anon_root=/var/ftp 匿名用户的FTP根目录
anon_upload_enable=YES 允许上传文件
anon_mkdir_write_enable=YES 允许创建目录
anon_other_write_enable=YES 开放其他写入权
anon_max_rate=0 限制最大传输速率(字节/秒)
本地用户 local_enable=YES 是否启用本地系统用户
local_umask=022 本地用户所上传文件的权限掩码
local_root=/var/ftp 设置本地用户的FTP根目录
chroot_local_user=YES 是否将用户禁锢在主目录
local_max_rate=0

2、基于系统用户的FTP服务:

a:匿名访问的FTP服务:

1)准备匿名FTP访问的目录

Linux—FTP文件传输服务
Linux—FTP文件传输服务

2)开启匿名用户配置,并启动vsftpd服务

Linux—FTP文件传输服务
Linux—FTP文件传输服务

3)测试匿名FTP服务器:

Linux—FTP文件传输服务

登录FTP后对客户端的操作:

操作系统 Linux Windows
显示当前路径 !pwd !cd
改变路径 lcd
查看目录内容 !ls !dir
Linux—FTP文件传输服务

4)在已经知道要下载文件的完整URL地址时,可以使用wget命令工具直接下载文件:

Linux—FTP文件传输服务

b、用户验证的FTP服务:

基本的本地用户验证

Linux—FTP文件传输服务

Windows 7本地验证:

Linux—FTP文件传输服务
Linux—FTP文件传输服务

c、如果使用URL地址的形式,必须指定FTP账号名称:

通过ftp命令访问FTP服务器时,只需输入正确的用户名、密码验证即可:

Linux—FTP文件传输服务

使用user_list用户列表文件:

Linux—FTP文件传输服务
Linux—FTP文件传输服务

d、Vsftp服务的其他常用配置:

1)修改vsftpd服务的监听地址、端口:

Linux—FTP文件传输服务
Linux—FTP文件传输服务

2)允许FTP服务器的别动模式:

pasv_enable=YES

pasv_min_port=24500

pasv_max_port=24600

Linux—FTP文件传输服务

3)限制FTP连接的并发数、传送速度:

max_clients=20

max_per_ip=2

anan_max_rate=50000

local_max_rate=200000

Linux—FTP文件传输服务

e、基于虚拟用户的FTP服务:

(1)建立虚拟用户的账号数据库:

条件:需要用到db_load工具,db_load工具由db4-utils软件包提供:

Linux—FTP文件传输服务

(2)创建文本格式的用户名、密码列表(奇数行为用户名,偶数行为上一行中用户对应的密码):

首先添加两个用户wzx、hello,密码分别为123.asd、123.qwe:

Linux—FTP文件传输服务

(3)创建BerkeleyDB格式的数据库文件(以上边vusers.list文件为数据源通过db_load工具创建出BerkeleyDB格式的数据库文件):

[root@vsftpd ~]# cd /etc/vsftpd/

[root@vsftpd vsftpd]# db_load -T -t hash -f vusers.list vusers.db

[root@vsftpd vsftpd]# file vusers.db

Linux—FTP文件传输服务

Db_load 命令注解:

-f:指定数据源文件;

-T:允许非BerkeleyDB的应用程序使用从文本格式转换的DB数据文件

-thash :指定读取数据文件的基本方法

(4)为了提高虚拟用户账号文件的安全性,应将文件权限设置为 600 ,防止外泄:

Linux—FTP文件传输服务

(5)添加虚拟用户的映射账号、创建FTP根目录:(vsftpd服务器对虚拟用户的控制采用了映射的控制方式,将所有的虚拟用户对应到同一个系统用户,该系统用户宿主目录作为所有虚拟用户登录后公用的FTP根目录):

Eg:将使用的FTP根目录设为/var/ftproot/,映射账号的名称为wenzhongxiang:

useradd  -d   /var/ftproot   -s   /sbin/nologin    wenzhongxiang

chmod   755   /var/ftproot/

Linux—FTP文件传输服务

(6)为vsftpd服务添加虚拟用户支持:

为虚拟用户建立PAM(可插拔认证模块)认证文件(vsftpd服务默认的PAM认证文件位于/etc/pam.d/vsftpd,该文件适用于以linux主机的系统用户账号进行认证):

Eg:在/etc/pam.d/目录下建立一个名为vsftpd.vu的PAM认证文件,用于虚拟用户认证控制:

[root@vsftpd ~]# vim   /etc/pam.d/vsftpd.vu

#%PAM-1.0

auth          required     pam_userdb.so    db=/etc/vsftpd/vusers

account    required     pam_userdb.so    db=/etc/vsftpd/vusers

Linux—FTP文件传输服务
Linux—FTP文件传输服务

注解:db=/etc/vsftpd/vusers:指定要使用的虚拟用户数据库文件位置

修改vsftpd配置,添加虚拟用户支持(在vsftpd.conf配置文件中添加guest_enable、guest_username配置项,将访问FTP服务的所有用户对应到同一个系统用户wenzhongxiang,并修改pam_service_name配置项指向上一步建立的/etc/pam.d/vsftpd.vu认证文件):

Linux—FTP文件传输服务

(7)为不同的虚拟用户建立独立的配置文件(所有的用户都映射到同一个系统用户账号,因此FTP权限也是相同的):

  • 若要为不同的虚拟用户账号设置不同的访问权限,可以为每个虚拟用户建立单独的配置文件来实现。
  • 为FTP用户启用独立配置文件,需要修改vsftpd.conf配置文件,添加“user_config_dir”项。

Eg:从/etc/vsftpd/vusers_dir/目录中查找每个用户的独立配置文件:

vim    /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/vusers_dir

Linux—FTP文件传输服务
Linux—FTP文件传输服务

Eg:虚拟用户wzx能够上传文件、创建目录,而hello用户只有默认的下载权限:

mkdir   /etc/vsftpd/vusers_dir/                       //创建用户配置文件

cd        /etc/vsftpd/vusers_dir/

vim     wzx                                                        //为用户wzx建立独立的配置文件

touch    hello                                                     //为其他用户创建空的配置文件

service      vsftpd        reload                           //重新加载配置

Linux—FTP文件传输服务

在vsftp.conf文件中启用了“user_config_dir”配置项后,应该为每一个虚拟用户都建立一个单独的配置文件(可以是空文件),否则该用户可能会无法登录。

效果:

hello用户可以登录,并能够正常浏览、下载文件,但不能上传文件:

Linux—FTP文件传输服务

wzx用户可以登录,且正常浏览、下载文件,也可以上传文件:

Linux—FTP文件传输服务

Linux主机中的系统用户将无法登录:

Linux—FTP文件传输服务
Linux—FTP文件传输服务

补充:

如果内容依旧不够详细,附件里有更详细的配置文档供大家更好的研究。