FTP
早起三大网络应用 ftp http mail
FTP的全称file transfer protocol 文件传输协议
40年之前出现的
缺点:明文传输 比较麻烦
FTP 采用双TCP连接方式 C/S模型
控制连接使用TCP端口号21
数据连接使用TCP端口号20
控制连接: 用于在FTP客户端和FTP服务器之间传输FTP控制命令及命令执行信息。控制连接在整个FTP会话期间一直保持打开
数据连接
用于传输数据,包括数据上传、下载、文件列表发送等。数据传输结束后数据连接将终止 粒度
FTP采用两种数据传输方式:
主动方式:PORT
被动方式:PASV
站在服务器角度看,由客户端选择的
FTP有两种文件传输模式:
ASCII模式:默认的文件传输模式,特点:本地文件转换成标准的ASCII码在传输。适用于传输文本文件
二进制模式: 图像文件传输模式,特点是文件按照比特流的方式进行传输,适用于传送程序文件。一般默认是二进制模式
文本模式和二进制模式的区别
文本传输器使用ASCII字符,并由回车键和换行符分开,而二进制不用转换或格式化就可传字符,二进制模式比文本模式更快,并且可以传输所有ASCII值,所以系统管理员一般将FTP设置成二进制模式。
二进制模式用来传送可执行文件,压缩文件,和图片文件。如果你用ASCII模式传,会显示一堆乱码,你必须重新用BINARY模式传。用HTML和文本编写的文件必须用ASCII模式上传,用BINARY模式上传会破坏文件,导致文件执行出错。?
启用ASCII 传输方式
默认情况下,vsftpd 为了提高传输效率,禁止了ASCII 传输方式。虽然在ftp 客户软件中可以使用asc命令,但是传输文件时仍然使用二进制传输方式。
可以分别启用上传和下载的ASCII 传输方式,方法是编辑/etc/vsftpd 配置文件,将如下两行前的#去掉即可启用。
#ascii_upload_enable =YES
#ascii_download_enable=YES
常见的FTP服务器程序
IIS Serv-U Filezilla 用于windows
wu-ftpd Proftpd比较常用
vsftpd (Very Secure FTP Daemon)linux中默认的FtP
常见的FtP客户端程序:
ftp命令 ie chrome
CuteFTP FlashFXP用的比较多,通信加密 LeapFTP Filezilla
gftp kuftp
vsftpd 特性:高速,稳定,与生俱来的安全性能高
大小:140kB
速度方面:它是wu-FTPd的两倍
稳定性方面:在单机支持4000个以上的并发用户同时连接
功能:支持基于IP的虚拟FTP服务器
支持虚拟用户
支持PAM或xinetd/tcp_wrappers的认证方式
支持两种运行方式:独立和Xinetd
支持每个虚拟用户具有独立的配置
支持带宽限制等
FTP用户类型:匿名用户:anonymous或ftp
本地用户:账号名称,密码等信息保存在passwd shadow文件中
虚拟用户:使用独立的账号/密码数据文件
user_list zhangsan 123456 /var/pub
vsftpd 软件包
官方网站:http://vsftpd.beasts.org/
主程序:/usr/sbin/vsftpd
服务名:vsftpd
用户控制列表文件:/etc/vsftpd/ftpusers禁止登录用户列表
/etc/vsftpd/usr_list仅提供一个用户列表,是否禁用在配置文件中设置
配置文件:/etc/vsftpd/vsftpd.conf
配置基本的性能和安全选项
1. 设置空闲的用户会话的中断时间
例如下面的配置:
idle_session_timeout=600
将在用户会话空闲10 分钟后被中断。
2. 设置空闲的数据连接的的中断时间
例如下面的配置:
data_connection_timeout=120
将在数据连接空闲2 分钟后被中断。
3. 设置客户端空闲时的自动中断和激活连接的时间
例如下面的配置:
accept_timeout=60
connect_timeout=60
将使客户端空闲1 分钟后自动中断连接,并在中断1 分钟后自动激活连接。
设置连接服务器后的欢迎信息
为了使用户连接服务器后显示信息,vsftpd 提供了两个选项,分别是:
ftpd_banner
banner_file
例如:可以设置如下的ftpd_banner 选项的值:
banner_enable=Welcome to wnt FTP service.
即:用户连接服务器后显示信息“Welcome to wnt FTP service.”。
也可以设置如下的banner_file 选项的值:
banner_file=/var/vsftpd_banner_file
即:用户连接服务器后显示文件/var/vsftpd_banner_file 中的信息。
设置最大传输速率限制
例如下面的配置:
local_max_rate=50000
anon_max_rate=30000
将使本地用户的最大传输速率为50kbytes/sec,匿名用户的传输速率为30kbytes/sec。
5. 设置客户端连接时的端口范围
例如下面的配置:
pasv_min_port=50000
pasv_max_port=60000
将使客户端连接时的端口范围在50000 和60000 之间。这提高了系统的安全性。
配置基于本地用户的访问控制
要配置基于本地用户的访问控制,可以通过修改vsftpd 的主配置文件/etc/vsftpd.conf 来进行,有如下两种限制方法:
1. 限制指定的本地用户不能访问,而其他本地用户可访问
例如下面的设置:
userlist_enable=YES
userlist_deny=YES
userlist_file= /etc/vsftpd.user_list
使文件/etc/vsftpd.user_list 中指定的本地用户不能访问FTP 服务器,而其他本地用户可访问FTP服务器。
2. 限制指定的本地用户可以访问,而其他本地用户不可访问
例如下面的设置:
userlist_enable= YES
userlist_deny=NO
userlist_file= /etc/vsftpd.user_list
使文件/etc/vsftpd.user_list 中指定的本地用户可以访问FTP 服务器,而其他本地用户不可以访问FTP服务器。
在默认配置中,本地用户可以切换到自家目录以外的目录进行浏览,并在权限许可的范围内进行下载和上传。这样的设置对于一个FTP 服务器来说是不安全的。
如果希望用户登录后不能切换到自家目录以外的目录,则需要设置chroot 选项,涉及如:
chroot_local_user
chroot_list_enable
chroot_list_file
有两种设置chroot 的方法:
(1)设置所有的本地用户执行chroot
只要将chroot_local_user 的值设为YES 即可,即:
chroot_local_user=YES
(2)设置指定的用户执行chroot
需要如下的设置:
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file= /etc/vsftpd.chroot_list
这样,/etc/vsftpd.chroot_list 文件中指定的用户不能执行chroot。
构建基于虚拟用户的vsftpd服务器
1.建立虚拟FTP用户的帐号数据库文件
建立虚拟用户的账户名、密码列表
奇数行为帐号名
偶数行为上一行中帐号的密码
转化为Berkeley DB格式的数据文件
db_load 转换工具
需安装 db4-utils-4.3.29-9.fc6.i386.rpm 软件包
[root@filesvr ~]# vi /etc/vsftpd/vusers.list
mike
123
john
456
[root@filesvr ~]# cd /etc/vsftpd/
[root@filesvr vsftpd]# db_load -T -t hash -f vusers.list vusers.db
[root@filesvr vsftpd]# file vusers.db
vusers.db: Berkeley DB (Hash, version 8, native byte-order)
[root@filesvr vsftpd]# chown 600 /etc/vsftpd/vusers.*
2.创建FTP根目录及虚拟用户映射的系统用户
[root@filesvr ~]# mkdir /var/ftproot
[root@filesvr ~]# useradd -d / var/ftproot -s / sbin/nologin virtual
[root@filesvr ~]# chmod 755 /var/ftproot/
3.建立支持虚拟用户的PAM认证文件
[root@filesvr ~]# vi /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
4.在vsftpd.conf文件中添加支持配置
[root@filesvr ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_umask=022
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd.vu
5.为个别虚拟用户建立独立的配置文件
在vsftpd.conf文件中添加用户配置目录支持
user_config_dir=/etc/vsftpd/vusers_dir
为用户mike、john建立独立的配置目录及文件
配置文件名与用户名同名
[root@filesvr ~]# mkdir /etc/vsftpd/vusers_dir/
[root@filesvr ~]# cd /etc/vsftpd/vusers_dir/
[root@filesvr vusers_dir]# touch mike
[root@filesvr vusers_dir]# vi john
anon_upload_enable=YES
anon_mkdir_write_enable=YES
6.重新加载vsftpd配置
service vsftpd reload
7.使用虚拟FTP账户访问测试
分别用mike、john用户登录FTP服务器进行下载、上传测试
mike用户可以登录,并可以浏览、下载文件,但无法上传
john用户可以登录,并可以浏览、下载文件,也可以上传
匿名用户或其他系统用户将不能登录