本文共 4641 字,大约阅读时间需要 15 分钟。
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访问的目录
2)开启匿名用户配置,并启动vsftpd服务
3)测试匿名FTP服务器:
登录FTP后对客户端的操作:
操作系统 | Linux | Windows |
显示当前路径 | !pwd | !cd |
改变路径 | lcd | lcd |
查看目录内容 | !ls | !dir |
4)在已经知道要下载文件的完整URL地址时,可以使用wget命令工具直接下载文件:
b、用户验证的FTP服务:
基本的本地用户验证
Windows 7本地验证:
c、如果使用URL地址的形式,必须指定FTP账号名称:
ftp://wzx@192.168.10.1 ——根据提示输入密码进行验证
ftp://wzx:123.asd@192.168.10.1—— 直接指定密码
通过ftp命令访问FTP服务器时,只需输入正确的用户名、密码验证即可:
使用user_list用户列表文件:
d、Vsftp服务的其他常用配置:
1)修改vsftpd服务的监听地址、端口:
2)允许FTP服务器的别动模式:
pasv_enable=YES
pasv_min_port=24500
pasv_max_port=24600
3)限制FTP连接的并发数、传送速度:
max_clients=20
max_per_ip=2
anan_max_rate=50000
local_max_rate=200000
e、基于虚拟用户的FTP服务:
(1)建立虚拟用户的账号数据库:
条件:需要用到db_load工具,db_load工具由db4-utils软件包提供:
(2)创建文本格式的用户名、密码列表(奇数行为用户名,偶数行为上一行中用户对应的密码):
首先添加两个用户wzx、hello,密码分别为123.asd、123.qwe:
(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
Db_load 命令注解:
-f:指定数据源文件;
-T:允许非BerkeleyDB的应用程序使用从文本格式转换的DB数据文件
-thash :指定读取数据文件的基本方法
(4)为了提高虚拟用户账号文件的安全性,应将文件权限设置为 600 ,防止外泄:
(5)添加虚拟用户的映射账号、创建FTP根目录:(vsftpd服务器对虚拟用户的控制采用了映射的控制方式,将所有的虚拟用户对应到同一个系统用户,该系统用户宿主目录作为所有虚拟用户登录后公用的FTP根目录):
Eg:将使用的FTP根目录设为/var/ftproot/,映射账号的名称为wenzhongxiang:
useradd -d /var/ftproot -s /sbin/nologin wenzhongxiang
chmod 755 /var/ftproot/
(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
注解:db=/etc/vsftpd/vusers:指定要使用的虚拟用户数据库文件位置
修改vsftpd配置,添加虚拟用户支持(在vsftpd.conf配置文件中添加guest_enable、guest_username配置项,将访问FTP服务的所有用户对应到同一个系统用户wenzhongxiang,并修改pam_service_name配置项指向上一步建立的/etc/pam.d/vsftpd.vu认证文件):
(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
Eg:虚拟用户wzx能够上传文件、创建目录,而hello用户只有默认的下载权限:
mkdir /etc/vsftpd/vusers_dir/ //创建用户配置文件
cd /etc/vsftpd/vusers_dir/
vim wzx //为用户wzx建立独立的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
touch hello //为其他用户创建空的配置文件
service vsftpd reload //重新加载配置
在vsftp.conf文件中启用了“user_config_dir”配置项后,应该为每一个虚拟用户都建立一个单独的配置文件(可以是空文件),否则该用户可能会无法登录。
效果:
hello用户可以登录,并能够正常浏览、下载文件,但不能上传文件:
wzx用户可以登录,且正常浏览、下载文件,也可以上传文件:
Linux主机中的系统用户将无法登录:
补充:
如果内容依旧不够详细,附件里有更详细的配置文档供大家更好的研究。
转载地址:http://mppoo.baihongyu.com/