首页 > 代码库 > FTP文件传输服务器(详解)

FTP文件传输服务器(详解)

 

FTP文件传输服务器

一实验目标

 安装配置VSFTP

 实战匿名访问VSFTP

 实战用户名密码方式访问VSFTP

 实战ftp虚拟帐号方式访问VSFTP

 

二实验环境

FTP服务端xuegod63.cn   IP192.168.1.63

FTP客户端xuegod64.cn   IP192.168.1.64

 

FTP服务概述

    FTP服务器File Transfer Protocol Server是在互联网上提供文件存储和访问服务的计算机它们依照FTP协议提供服务。VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件它的全称是Very Secure FTP 从此名称可以看出来编制者的初衷是代码的安全。

作用是在 Internet 上用来传送文件的协议。

特点安全、高速、稳定的FTP服务器

模式 C/S 模式

端口20 (传数据)   21 (传指令)

 

常见FTP服务器

windowsServ-U FTP Server

LinuxProFTPD:Professional FTP daemon一个Unix平台上或是类Unix平台上如Linux, FreeBSD等的FTP服务器程序。  

 

FTP服务连接模式

以命令和数据流形式的主动连接---客户端无防火墙

技术分享 

解析服务端主动链接客户端----最后一道线

1命令形式

   服务端开启21号端口主动与客户端的某个端口进行连接客户端进行回应命令通道建立完成。

2数据流形式

   客户端通过命令通道告诉服务端“服务端对自己的连接方式以及自己所开放可以被其连接的端口号大于1024”服务端在收到客户端发来的数据信息之后会自动的开启20端口数据流端口从数据流端口出发主动向客户端所开放的端口进行连接。

 

以命令和数据流形式的主动连接---客户端有防火墙

 

技术分享 

解析

1命令形式

   由于客户端有防火墙因此服务端是主动连接不上客户端的所以客户端会主动连接服务端防火墙收到客户端发来的数据之后转发给服务端服务端在收到防火墙发来的信息之后会主动的用21端口与客户端进行建立连接。

2数据流形式

   客户端通过命令通道告诉服务端“服务端对自己的连接方式以及自己所开放可以被其连接的端口号大于1024”防火墙收到信息之后将其转发给服务端服务端在收到防火墙发来的数据信息之后会自动的开启22端口数据流端口从数据流端口出发主动向客户端所开放的等待端口进行连接。

 

以命令和数据流形式的被动连接---客户端无防火墙

技术分享 

解析客户端主动链接服务端

1命令形式

服务端等待客户端主动请求连接。

2数据流形式

客户端通过命令通道告诉服务端“服务端对自己的连接方式“被动连接”服务端在收到客户端发来的数据信息之后会自动的开启某一个固定端口或者某个端口的范围等待客户端来主动连接 客户端收到之后主动连接服务端开放的端口范围。

 

 

以命令和数据流形式的被动连接---客户端有防火墙

 

 

技术分享 

解析

1命令形式

   服务端等待客户端主动请求连接。

2数据流形式

   客户端通过命令通道告诉服务端“服务端对自己的连接方式“被动连接”防火墙收到信息之后将其转发给服务端服务端在收到防火墙发来的数据信息之后会自动的开启某一个固定端口或者某个端口的范围等待客户端来主动连接 客户端收到之后主动连接服务端开放的端口范围。

 

四实验代码

1FTP服务安装启动与测试:

1安装vsftp服务器端

[root@xuegod63 ~]# rpm -ivh /mnt/Packages/vsftpd-2.2.2-6.el6_0.1.x86_64.rpm

安装客户端

[root@xuegod64 ~]# rpm -ivh /mnt/Packages/lftp-4.0.9-1.el6.x86_64.rpm

注从RHEL6开始系统镜像中默认没有ftp客户端命令。取而代之的是lftp命令

Linux客户端

   lftp 是一个功能强大的下载工具它支持访问文件的协议: ftp, ftps, http, https, hftp, fish.(其中ftps和https需要在编译的时候包含openssl库)。lftp的界面一个非常shell: 有命令补全历史记录允许多个后台任务执行等功能使用起来非常方便。它还有书签、排队、镜像、断点续传、多进程下载等功能。

 

 

2服务器配置文件位置

Vsftpd.conf常见配置项及含义说明

作用范围

配置项及示例

含义说明

 

 

 

匿名用户

anonymous_enable=YES

是否允许匿名用户访问

anon_upload_enable=YES

是否允许匿名用户的上传功能

anon_mkdir_write_enable=YES

是否允许匿名用户有创建文件的写入权限

anon_other_write_enable=YES

是否允许匿名用户有其他权限如删除更名覆盖

anon _umask=022

设置匿名用户上传文件默认权限的掩码值

anon _root=/var/ftp/

设置匿名用户的FTP根目录默认的根目录就是/var/ftp/

anon _max_rate=YES

设置匿名用户上传文件的最大速率0表示无限制单位为字节/秒

 

 

本地用户

local_enable=YES

是否本地用户访问

local _umask=022

设置本地用户上传文件默认权限的掩码值

local _root=/var/ftp/

设置本地用户的FTP根目录默认的根目录就是/var/ftp/

chroot_local_user=YES

是否将FTP本地用户禁锢在宿主目录中

local _max_rate=YES

设置本地用户上传文件的最大速率0表示无限制单位为字节/秒

 

 

 

 

 

 

 

 

 

全局配置

 

 

 

listen=YES

是否以独立运行的方式监听服务

listen_address=0.0.0.0

设置监听FTP服务的IP地址

listen_ports=21

设置监听FTP服务的端口号

write_enable=YES

启用任何形式的写入权限

download_enable=YES

是否允许下载文件

connect_from_port_20=YES

允许服务器主动模式从20端口建立数据连接

pasv_enable=YES

允许被动模式连接

pasv_max_port=24600

设置用于被动模式的服务器最大端口号

pasv_min_port=24500

设置用于被动模式的服务器最小端口号

Pam_service_name=vsftpd

设置用于用户认证的PAM文件位置/etc/pam.d/目录中对应的文件名

userlist_enable=YES

是否启用user_list用户列表文件

userlist_deny=YES

是否启用user_list用户列表文件中的用户账号

max_clients=0

设置最多允许多少个客户端同时连接0为无限制

max_per_ip=0

对来自同一个IP地址的客户端最多允许多少个并发连接0为无限制

tcp_wrappers=YES

是否启用tcp_wrappers主机访问控制

 

[root@xuegod63 vsftpd]vim  /etc/vsftpd/user_list

技术分享 

# 如果userlist_deny= YES默认绝不允许在这个文件中的用户登录ftp甚至不提示输入密码

 

3启动服务

[root@xuegod63 ~]# service vsftpd restart

[root@xuegod63 ~]#chkconfig vsftpd on

[root@xuegod63 ~]# netstat -antup | grep ftp

tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      11725/vsftpd

   

4此服务的使用方法

windows

通过浏览器访问或 打开文件夹在地址栏输入地址ftp://192.168.1.63/

技术分享 

 

linux下

[root@xuegod64 ~]# lftp 192.168.1.63

lftp 192.168.1.63:~> ls

drwxr-xr-x    2 0        0            4096 Mar 04  2011 pub

lftp 192.168.1.63:/> cd pub/

lftp 192.168.1.63:/pub> ls

lftp 192.168.1.63:/pub> exit         

 

2修改配置文件实战举例

1

要求公司技术部准备搭建一台功能简单的FTP 服务器允许匿名员工上传和下载文件并允许创建自己的目录。

 

1修改配置文件

[root@xuegod63 vsftpd]# pwd

/etc/vsftpd

[root@xuegod63 vsftpd]# cp vsftpd.conf vsftpd.conf.back

[root@xuegod63 vsftpd]# vim vsftpd.conf #修改以下内容

anonymous_enable=YES  #允许匿名用户访问

anon_upload_enable=YES #允许匿名用户上传文件并可以创建目录

anon_mkdir_write_enable=YES  #允许匿名用户创建并修改文件夹或目录

anon_other_write_enable=YES  #允许匿名用户对文件进行删除和修改权限

2启动服务

[root@xuegod63 vsftpd]# service vsftpd reload

 

3修改用户根目录的属主

[root@xuegod63 vsftpd]# ll -d /var/ftp/pub/

drwxr-xr-x 2 root root 4096 Feb 12  2013 /var/ftp/pub/

[root@xuegod63 vsftpd]# chown ftp /var/ftp/pub/

[root@xuegod63 vsftpd]# !l

ll -d /var/ftp/pub/

drwxr-xr-x 2 ftp root 4096 Feb 12  2013 /var/ftp/pub/

注意默认匿名用户家目录/var/ftp的权限是755这个权限是不能改变的。切记

 

4测试-可以创建文件夹删除更改和上传文件夹

技术分享 

[root@xuegod64~]# lftp 192.168.1.63

lftp 192.168.1.63:~> ls

drwxr-xr-x    3 14       0            4096 Sep 20 04:33 pub

lftp 192.168.1.63:/> cd pub/

lftp 192.168.1.63:/pub> mkdir test

mkdir 成功, 建立 `test‘

lftp 192.168.1.63:/pub> ls

drwx------    2 14       50           4096 Sep 20 04:34 test

drwx------    2 14       50           4096 Sep 20 04:33 新文件夹

lftp 192.168.1.63:/pub> rm -rf test  

rm 成功, 删除 `test‘

lftp 192.168.1.63:/pub> ls

drwx------    2 14       50           4096 Sep 20 04:33 新文件夹

 

2

要求公司内部现在有一台FTP WEB 服务器FTP 的功能主要用于维护公司的网站内容包括上传文

件、创建目录、更新网页等等。公司现有两个部门负责维护任务他们分别使用team1 team2

帐号进行管理。先要求仅允许team1 team2 帐号登录FTP 服务器但不能登录本地系统并将

这两个帐号的根目录限制为/var/www/html不能进入该目录以外的任何目录。

 

分析

ftp 和www web服务器相结合。

www web服务器根目录  /var/www/html

只允许team1和team2两用户 可以上传。 vsftp禁止匿名。

其次使用chroot 功能将team1 team2 锁定在/var/www/html 目录下

 

1建立维护网站内容的本地帐号team1 team2 并禁止本地登录然后设置其密码

[root@xuegod63 ~]# useradd -s /sbin/nologin team1

[root@xuegod63 ~]# useradd -s /sbin/nologin team2

[root@xuegod63 ~]# echo "123456" | passwd --stdin team1

 [root@xuegod63 ~]# echo "123456" | passwd --stdin team2

 

2配置vsftpd.conf 主配置文件并作相应修改

[root@xuegod63 vsftpd]# cp vsftpd.conf vsftpd.conf.back

[root@xuegod63 vsftpd]# vim vsftpd.conf

anonymous_enable=NO禁止匿名用户登录

local_enable=YES允许本地用户登录

local_root=/var/www/html设置本地用户的根目录为/var/www/html

chroot_list_enable=YESchroot 功能

chroot_list_file=/etc/vsftpd/chroot_list设置锁定用户在根目录中的列表文件。此文件存放要锁定的用户名

 

3建立/etc/vsftpd/chroot_list 文件添加team1 team2 帐号

[root@xuegod63 vsftpd]# touch /etc/vsftpd/chroot_list

 [root@xuegod63 ~]# vim /etc/vsftpd/chroot_list  #写入以下内容一行一个用户名

team1

team2

 

4重启vsftpd 服务使配置生效,并复制内容到之地文件夹中

[root@xuegod63 ~]#service vsftpd restart

[root@xuegod63 ~]# cp /etc/passwd /var/www/html/

[root@xuegod63 ~]# cp install.log /var/www/html/

 

5修改本地权限

[root@xuegod63 ~]# ll -d /var/www/html/

drwxr-xr-x. 2 root root 4096 Oct  6  2011 /var/www/html/

[root@xuegod63 ~]# chmod -R o+w /var/www/html/

[root@xuegod63 ~]# ll -d /var/www/html/

drwxr-xrwx. 2 root root 4096 Oct  6  2011 /var/www/html/

 

6测试

测试

ftp://192.168.1.63/

物理机测试

 

技术分享

技术分享

 

#登录并新建文件夹并且在linux 系统中进行删除

 

客户端测试

[root@xuegod64 ~]# lftp team1@192.168.1.63

口令: 123456

lftp team1@192.168.1.63:~> ls          

-rw-r--rw-    1 0        0           56422 Sep 20 04:45 install.log

-rw-r--rw-    1 0        0            1800 Sep 20 04:44 passwd

drwxr-xr-x    2 500      500          4096 Sep 20 04:56 新文件夹

lftp team1@192.168.1.63:/> rm -rf passwd

]rm 成功, 删除 `passwd‘

lftp team1@192.168.1.63:/> ls

-rw-r--rw-    1 0        0           56422 Sep 20 04:45 install.log

drwxr-xr-x    2 500      500          4096 Sep 20 04:56 新文件夹

lftp team1@192.168.1.63:/>

lftp team1@192.168.1.63:/> cd /var/www/

cd: Access failed: 550 Failed to change directory. (/var/www) #被锁住了

lftp team1@192.168.1.63:/> cd /etc

cd: Access failed: 550 Failed to change directory. (/etc)

 

 

3

要求ftp虚拟帐号

   公司为了宣传最新的产品信息计划搭建FTP 服务器为客户提供相关文档因此对所有互联网开放共享目录允许客户下载产品信息但是禁止上传文件。与公司合作的相关单位能够使用FTP服务器进行上传和下载但不可以删除数据。

 

分析

   需要保证服务器的稳定性并做优化需考虑到服务器的安全性所以关闭实体用户登录使用虚拟帐号验证机制并对不同虚拟帐号设置不同的权限保证服务器的性能还需要根据用户的等级限制客户端的连接数及下载速度。

 

1、创建用户数据库

1创建用户文本文件

   先建立用户文本文件vsftpd_virtualuser.txt添加两个虚拟帐号公共客户帐号ftp 及合作客户帐号vip

[root@xuegod63 vsftpd]# vim /etc/vsftpd/vsftpd_virtualuser.txt  #写入以下内容。

ftp  

123456  

vip 

123456 

#此文件格式要示奇数行用户名、偶数行密码

 

2生成数据库

   保存虚拟帐号和密码的文本文件无法被系统帐号直接调用。我们需要使用db_load 命令生成db

数据库文件

安装

[root@xuegod63 vsftpd]# rpm -qf `which db_load `

db4-utils-4.7.25-16.el6.x86_64

[root@xuegod63 ~]# rpm -ivh /mnt/Packages/db4-utils-4.7.25-18.el6_4.x86_64.rpm

[root@xuegod63 ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_virtualuser.txt  /etc/vsftpd/vsftpd_virtualuser.db

选项

-T允许应用程序能够文本文件转译载入进数据库

-t hash使用类型为hash算法进行码加密

-f 指定包含用户名和密码文本文件

 [root@xuegod63 vsftpd]# rm -rf /etc/vsftpd/vsftpd_virtualuser.txt   #为了安全删除此文件。后期不再使用此文件。

 

3修改数据库文件访问权限

[root@xuegod63 vsftpd]# chmod 600 /etc/vsftpd/vsftpd_virtualuser.db

[root@xuegod63 vsftpd]# ll !$

ll /etc/vsftpd/vsftpd_virtualuser.db

-rw------- 1 root root 12288 Nov 10 21:16 /etc/vsftpd/vsftpd_virtualuser.db

 

2、配置PAM 文件

   为了使服务器能够使用数据库文件对客户端进行身份验证需要调用系统的PAM 模块.

PAM概述

   PAM(Plugable Authentication Module)为可插拔认证模块不必重新安装应用系统通过修

改指定的配置文件调整对该程序的认证方式。PAM 模块配置文件路径为/etc/pam.d/目录此

目录下保存着大量与认证有关的配置文件并以服务名称命名。

 

[root@xuegod63 ~]# vim  /etc/pam.d/vsftpd #修改vsftpd 对应的PAM 配置文件/etc/pam.d/vsftpd将默认配置使用#全部注释添加两行应字段。

auth required/lib64/security/pam_userdb.so  db=/etc/vsftpd/vsftpd_virtualuser

accountrequired/lib64/security/pam_userdb.so  db=/etc/vsftpd/vsftpd_virtualuser

注释/lib64 表示64位系统

 

3、创建虚拟帐号对应的系统用户及ftp共享的目录

   于公共客户帐号和合作客户帐号因为需要配置不同的权限所以可以将两个帐号的目录进行隔离并且控制用户的文件访问。公共客户帐号ftp 对应系统帐号ftpuser并指定其主目录为/var/ftp/public

而客户帐号vip 对应系统帐号ftpvip指定主目录为/var/ftp/vip

[root@xuegod63 vsftpd]# useradd -d /var/ftp/public ftpuser

[root@xuegod63 vsftpd]# useradd -d /var/ftp/vip ftpvip

[root@xuegod63 vsftpd]# chmod -R 500 /var/ftp/public/  #修改权限

[root@xuegod63 vsftpd]# chmod -R 700 /var/ftp/vip/

 

chmod -R 500 /var/ftp/public/ 公共帐号ftp 只允许下载修改share 目录其他用户权限为

rx 可读可执行。

chmod -R 700 /var/ftp/vip/ 客户帐号vip 允许上传和下载所以对vip 目录权限设置为rwx

可读可写可执行。

 

4、建立配置文件

一个配置文件无法实现此功能需要为每个虚拟帐号建立独立的配置文件并根据需要进行相应的设置。

 

1修改vsftpd.conf 主配置文件

[root@xuegod63 vsftpd]# cp vsftpd.conf.back vsftpd.conf

禁用匿名用户登录并启用本地用户登录设置

[root@xuegod63 vsftpd]# vim vsftpd.conf

anonymous_enable=NO

local_enable=YES   #确认此选项打开允许本地用户登录。

chroot_local_user=YES   #确认此选项打开。将所有本地用户限制在家目录中NO 则不限制

pam_service_name=vsftpd  #确认在文件的最后有选项。配置vsftpd 使用的PAM 模块为vsftpd

user_config_dir=/etc/vsftpd/vuserconfig设置虚拟帐号的主目录为 vuserconfig

max_clients=300设置FTP 服务器最大接入客户端数为300

max_per_ip=10设置每个IP 地址最大连接数为10

 

2建立虚拟帐号配置文件

   user_config_dir 指定路径下建立与虚拟帐号同名的配置文件并添加相应的配置字段

首先建立公共帐号ftp 的配置文件

[root@xuegod63 ~]# grep vuserconfig /etc/vsftpd/vsftpd.conf   #查看要创建的目录名

user_config_dir=/etc/vsftpd/vuserconfig

[root@xuegod63 ~]# mkdir /etc/vsftpd/vuserconfig

[root@xuegod63 ~]# touch /etc/vsftpd/vuserconfig/ftp

[root@xuegod63 ~]# touch /etc/vsftpd/vuserconfig/vip

 

配置虚拟帐号配置文件写入以下内容

[root@xuegod63 ~]# vim /etc/vsftpd/vuserconfig/ftp

guest_enable=yes开启虚拟帐号登录

guest_username=ftpuser设置ftp 对应的系统帐号为ftpuser

anon_world_readable_only=no不许匿名用户浏览整个服务器的文件系统

anon_max_rate=50000限定传输速率为50KB/s

#对于虚拟用户默认就是可以下载的默认是不能上传的

 

注意

vsftpd 对于文件传输速度限制并不是绝对锁定在一个数值上哈而是在80%~120%之间变化

比如设置100KB/s 则实际是速度在80KB/s~120KB/s 之间变化

 

下面是合作伙伴帐号的配置文件vip

[root@xuegod63 ~]# vim /etc/vsftpd/vuserconfig/vip  #写入以下内容

guest_enable=yes开启虚拟帐号登录

guest_username=ftpvip设置ftp 对应的系统帐号为ftpvip

anon_world_readable_only=no不允许匿名用户浏览整个服务器的文件系统

write_enable=yes允许在文件系统写入权限

anon_mkdir_write_enable=yes允许创建文件夹

anon_upload_enable=yes开启匿名帐号的上传功能

anon_max_rate=100000限定传输速度为100KB/s

anon_other_write_enable=YES    # 允许删除重命名等

 

5、重启vsftpd 使配置生效

[root@xuegod63 ~]# service vsftpd restart

 

6、测试

1公共帐号ftp 测试--在公共帐号测试前我们先建立个测试文件

[root@xuegod63 vsftpd]# cp /mnt/Packages/mysql-server-5.1.71-1.el6.x86_64.rpm /var/ftp/public/productinfo.xls #共享的文件要大一些方便后期测试下载速度。

[root@xuegod63 vsftpd]# cp -r /boot/grub/ /var/ftp/public/   #复制一个目录

 

 

ftp客户端命令

lftp  ftpIP   -u  username,passwd

lftp  ftpIP   -u  username

 

使用公共帐号ftp登录ftp 服务器

 

 [root@xuegod64 ~]# lftp 192.168.1.63 -u ftp,123456

lftp ftp@192.168.1.63:~> ls

drwxr-xr-x    2 0        0            4096 Nov 28 08:40 grub

-r--r--r--    1 0        0         9029932 Nov 28 08:40 productinfo.xlslftp ftp@192.168.1.63:/> get produtinfo.xls  #下载单个文件  。并测试限速50KB/s

技术分享 

 

lftp ftp@192.168.1.63:/> mget *.txt  

lftp ftp@192.168.1.63:/> mirror grub/  #下载一个文件夹

lftp ftp@192.168.1.63:/> !ls grub #这个是查看vip客户下载的文件在自己的物理机上出现的内容

device.map     iso9660_stage1_5  reiserfs_stage1_5  ufs2_stage1_5

e2fs_stage1_5  jfs_stage1_5 splash.xpm.gz    vstafs_stage1_5

fat_stage1_5   menu.lst stage1    xfs_stage1_5

ffs_stage1_5   minix_stage1_5 stage2

 

测试 vip帐号

[root@xuegod63 vsftpd]# lftp 192.168.1.63 -u vip

Password:

lftp vip@192.168.1.63:~> ls      #这个是查看vip客户在FTP上分的的目录    

lftp vip@192.168.1.63:/> !ls       #这个是查看vip客户在自己物理机上的目录

chroot_list user_list   vsftpd_conf_migrate.sh

ftpusers vsftpd.conf   vsftpd_virtualuser.db

grub vsftpd.conf.anon  vuserconfig

productinfo.xls  vsftpd.conf.back

lftp vip@192.168.1.63:/> put chroot_list   #测试上传

12 bytes transferred       

 技术分享 

lftp vip@192.168.1.63:/> rm -rf chroot_list

rm ok, `chroot_list‘ removed

lftp vip@192.168.1.63:/> ls

-r--r--r--    1 0        0         8492640 Mar 09 14:21 a.zip

      

 


本文出自 “末班车” 博客,请务必保留此出处http://blxueyuan.blog.51cto.com/9673381/1876335

FTP文件传输服务器(详解)