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=YES激chroot 功能
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测试
测试
物理机测试
#登录并新建文件夹并且在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