1、FTP的基本概念
1. FTP做用
FTP (文件传输协议)是TCP/IP协议栈所提供的一种子协议,该子协议具体能够实如今如下功能:
从客户向服务器发送一个文件;从服务器向客户发送一个文件;
从服务器向客户发送文件或目录列表
2. FTP的工做体系
FTP工做在TCP/ip模型的第四层上,服务器与客户机之间利用TCP的21号端口传送信号指令;利用20号端口用于传送数据;具体工做过程以下:
(1) 客户机启动客户端程序,经过TCP的“三次握手”创建服务器的链接
(2) 服务器对客户机进行身份验证
(3) 进行相应目录操做和数据传输
(4) 断开链接
3. FTP的数据传输模式
主动传输模式:
在这种模式下,服务器向客户端发起一个用于数据传输的链接,客户端的链接端口是由服务器和客户端经过协商经过的
被动传输模式:
在这种模式下,客户端向服务器发起一个用于数据传输的链接,客户端的链接端口是发起这个数据链接请求时使用的端口号
4. Linux下常见的FTP软件
(1)wu-ftp
wu-ftp是历史最久的非商业FTP服务器软件之一,主要有如下特色:
能够限制最高访问人数,以维持系统的最佳运行效率
能够记录文件上传和下载的全过程
能够支持匿名FTP服务
能够支持虚拟FTP主机
能够控制不一样网段及其对FTP服务器的存取权限和访问时段
(2)proftp
proftpd是在乎图修改wu-ftp一些不足状况下产生的,具体有以下特色:
单配置文件,配置简单
基于单个目录的.ftpaccess设置文件,相似apache的.htaccess文件
能够设置为从xinetd启动,或者是独立ftp服务器两种运行方式
强大的log功能
支持以非root身份运行,从而减小了安全隐患
支持匿名FTP功能
(3)vsftpd
是一个安全、高速、稳定的FTP服务器
可设定多个基于IP的虚拟FTP服务器
匿名FTP服务器更是十分容易
不执行任何外部程序,从而减小了安全隐患
支持虚拟用户,且支持每一个虚拟用户具备独立的配置
能够设置为从xinetd启动,或者是独立FTP服务器两种运行方式
支持PAM或xinetd/tcp_wrappers的认证方式
支持带宽限制shell
二.vsftp安装与配置apache
1.软件包:vsftpd-x.x.x-x.i386.rpmvim
2./etc/vsftpd/vsftpd.conf 主配置文件
/etc/vsftpd.ftpusers 指定哪些用户不能访问FTP服务器
/etc/vsftpd.user_list 能够根据vsftpd.conf文件中的设置来决定该文件中指定的用户是否能够访问ftp服务器
/etc/rc.d/init.d/vsftpd vsftpd的启动脚本文件安全
3.vim /etc/vsftp/vsftpd.conf 中一些基本配置选项服务器
anonymous_enable=YES|NO
控制是否容许匿名用户登陆,YES容许,NO不容许,默认值为YES。
ftp_username= username
匿名用户所使用的系统用户名。默认下,此参数在配置文件中不出现,值为ftp
no_anon_password=YES|NO
控制匿名用户登入时是否须要密码,YES不须要,NO须要。默认值为NO。
anon_root=path
设定匿名用户的根目录,即匿名用户登入后,被定位到此目录下。主配置文件中默认无此项,默认值为/var/ftp/。
anon_world_readable_only=YES|NO
控制是否只容许匿名用户下载可阅读文档。YES,只容许匿名用户下载可阅读的文件。NO,容许匿名用户浏览整个服务器的文件系统。默认值为YES。
anon_upload_enable=YES|NO
控制是否容许匿名用户上传文件,YES容许,NO不容许,默认是不设值,即为NO。除了这个参数外,匿名用户要能上传文件,还须要两个条件:一,write_enable参数为YES;二,在文件系统上,FTP匿名用户对某个目录有写权限。
anon_mkdir_write_enable=YES|NO
控制是否容许匿名用户建立新目录,YES容许,NO不容许,默认是不设值,即为NO。固然在文件系统上,FTP匿名用户必需对新目录的上层目录拥有写权限。
anon_other_write_enable=YES|NO
控制匿名用户是否拥有除了上传和新建目录以外的其余权限,如删除、改名等。YES拥有,NO不拥有,默认值为NO。
chown_uploads=YES|NO
是否修改匿名用户所上传文件的全部权。YES,匿名用户所上传的文件的全部权将改成另一个不一样的用户全部,用户由chown_username参数指定。此选项默认值为NO。
chown_username=whoever
指定拥有匿名用户上传文件全部权的用户session
local_enable=YES|NO
控制vsftpd所在的系统的用户是否能够登陆vsftpd。默认值为YES。
local_root=
定义全部本地用户的根目录。当本地用户登入时,将被更换到此目录下。默认值为无。
user_config_dir=
定义用户我的配置文件所在的目录。用户的我的配置文件为该目录下的同名文件并发
chroot_list_enable=YES|NO
锁定某些用户在自家目录中。即当这些用户登陆后,不能够转到系统的其余目录,只能在自家目录(及其子目录)下。具体的用户在chroot_list_file参数所指定的文件中列出。默认值为NO。
chroot_list_file=/etc/vsftpd/chroot_list
指出被锁定在自家目录中的用户的列表文件。文件格式为一行一用户。一般该文件是/etc/vsftpd/chroot_list。此选项默认不设置。
chroot_local_users=YES|NO
将本地用户锁定在自家目录中。当此项被激活时,chroot_list_enable和chroot_local_users参数的做用将发生变化,chroot_list_file所指定文件中的用户将不被锁定在自家目录。本参数被激活后,可能带来安全上的冲突,特别是当用户拥有上传、shell访问等权限时。所以,只有在确实了解的状况下,才能够打开此参数。默认值为NO。
passwd_chroot_enable =YES|NO
当此选项激活时,与chroot_local_user选项配合,chroot()容器的位置能够在每一个用户的基础上指定。每一个用户的容器来源于/etc/passwd中每一个用户的自家目录字段。默认值为NO。app
listen_address=ip address
定义了在主机的哪一个IP地址上监听FTP请求socket
listen_port=port_value
指定FTP服务器监听的端口号(控制端口),默认值为21。此选项在standalone模式下生效tcp
port_enable=YES|NO
指定数据链接时模式,默认值为YES(PORT模式,NO为PASV模式)
connect_from_port_20=YES|NO
控制以PORT模式进行数据传输时是否使用20端口(ftp-data)
ftp_data_port=port number
设定ftp数据传输端口(ftp-data)值。默认值为20。此参数用于PORT FTP模式。
pasv_enable=YES|NO
YES,容许数据传输时使用PASV模式。NO,不容许使用PASV模式。默认值为YES。
pasv_min_port=port number
pasv_max_port=port number
设定在PASV模式下,创建数据传输所可使用port范围的下界和上界,0 表 示任意。默认值为0。把端口范围设在比较高的一段范围内,好比50000-60000,将有助于安全性的提升
pasv_address= ip address
此选项为一个数字IP地址,做为PASV命令的响应。默认值为none,即地址是从呼入的链接套接字(incoming connectd socket)中获取。
ascii_upload_enable=YES|NO
控制是否容许使用ascii模式上传文件,YES容许,NO不容许,默认为NO
ascii_download_enable=YES|NO
控制是否容许使用ascii模式下载文件,YES容许,NO不容许,默认为NO。
idle_session_timeout= numerical value
空闲用户会话的超时时间,如果超出这时间没有数据的传送或是指令的输入,则会强迫断线。单位为秒,默认值为300。
data_connection_timeout= numerical value
空闲的数据链接的超时时间。默认值为300 秒。
accept_timeout=numerical value
接受创建联机的超时设定,单位为秒。默认值为60。
connect_timeout=numerical value
响应PORT方式的数据联机的超时设定,单位为秒。默认值为60
max_clients=numerical value
此参数在VSFTPD使用单独(standalone)模式下有效。此参数定义了FTP服务器最大的并发链接数,当超过此链接数时,服务器拒绝客户端链接。默认值为0,表示不限最大链接数。
max_per_ip=numerical value
此参数在VSFTPD使用单独(standalone)模式下有效。此参数定义每一个IP地址最大的并发链接数目。超过这个数目将会拒绝链接。此选项的设置将影响到象网际快车这类的多进程下载软件。默认值为0,表示不限制。
anon_max_rate=value
设定匿名用户的最大数据传输速度value,以Bytes/s为单位。默认无。
local_max_rate=value
设定用户的最大数据传输速度value,以Bytes/s为单位。默认无。
三.功能实现,以案例为主
案例一:利用vsftpd配置一台支持匿名用户和本地用户登陆,具体要求以下:
容许匿名用户登陆和本地用户登陆
禁止匿名用户上传
容许本地用户上传和下载,且锁定本地用户主目录,容许用户删除用户主目录的文件
创建用户组ftpusers,同时创建用户ftp1,ftp2属于ftpusers组,并设置用户的主目录为/soft
设置/soft目录容许ftpusers组中的用户能够写入,但不能删除目录中的非本身拥有的文件
本地用户的文件生成掩码为022
空闲的会话时间为600秒,空闲数据链接时间为60秒,自动中断时间为30秒,自动激活时间为10秒
本地用户的最大传输速率为50000b/s,匿名用户的最大传输速率为30000b/s
客户端的链接端口为5000-6000(被动模式中使用)
使用独占启动方式,侦听192.168.5.1接口的21号端口
禁止192.168.5.128主机访问FTP服务器
并发链接的客户数为300,每台客户机的最大链接为5
1. 安装相关软件包
#yum install vsftpd
2.修改/etc/vsftpd/vsftpd.conf
#vim /etc/vsftpd/vsftpd.conf
修改以下:
anonymous_enable=yes
local_enable=yes
anon_upload_enable=no
write_enable=yes
local_mask=022
idle_session_timeout=600
data_connection_timeout=60
accept_timeout=30
connect_timeout=10
local_max_rate=50000
anon_max_rate=30000
pasv_min_port=5000
pasv_max_port=6000
chroot_local_user=yes
listen=yes
listen_address=192.168.5.1
listen_port=21
max_clients=300
max_per_ip=5
3.建立相关用户组和用户
#mkdir /soft
#chmod 1777 /soft
#groupadd ftpusers
#useradd -d /soft -g ftpusers ftp1
#passwd ftp1
#useradd -d /soft -g ftpusers ftp2
#passwd ftp2
4. 设置hosts.allow文件
#vi /etc/hosts.allow
vsftpd:192.168.5.128:DENY
5. 启动服务
#service vsftpd start
6.进行实验效果验证,用新添加的用户进行家目录的访问
案例二:利用VSFTPD配置一台支持虚拟用户登陆的FTP服务器,具体要求以下:
支持本地用户和虚拟用户登陆,不容许匿名用户登陆
容许本地用户任意写入
锁定本地用户的用户主目录
创建虚拟用户vftp1,vftp2都对应本地用户guest,且虚拟用户在用户主目录中能够写入,但不能删除
设置客户端链接时的端口为5000-6000
最大空闲会话时间长度为600秒
设置空闲数据链接的中断时间为200秒
设置客户端空闲时的自动中断时间为100秒和激活链接的时间为30秒
本地用户的最大传输速率为2MB/s
使用独占启动方式,侦听192.168.5.1接口的21号端口
设置服务器的并发链接总数为200
每一个客户机的并发链接总量为5
容许192.168.5.0/24网段内的主机访问
所谓虚拟用户:与系统无关联,不能登入系统,只能访问FTP服务器
配置过程:
1. 安装相关软件
#yum install vsftpd
2. 修改/etc/vsftpd/vsftpd.conf文件
#vi m /etc/vsftpd/vsftpd.conf
修改内容以下:
anonymous_enable=no
local_enable=yes
guest_enable=yes
guest_username=guest
write_enable=yes
chroot_local_user=yes
pam_service_name=ftp
idle_session_timeout=600
data_connection_timeout=200
accept_timeout=100
connect_timeout=30
local_max_rate=20000
pasv_min_port=5000
pasv_max_port=6000
listen=yes
listen_address=192.168.5.1
listen_port=21
3. 创建相关用户
#useradd guest
#passwd guest
#chmod 1777 /home/guest
//创建虚拟用户所对应的本地用户
#vi /etc/vsftpd/vlogin.txt //创建虚拟用户文件
添加以下内容:
vftp1 (用户名)
123 (密 码)
vftp2
123
4.生成口令库文件,运行db_load以前先安装db4-utils的RPM包
#yum -y install db4 db4-tcl db4-utils
#db_load -T -t hash -f /etc/vsftpd/vlogin.txt /etc/vsftpd/vlogin.db
#chmod 600 /etc/vsftpd/vlogin.db
5. 设置PAM验证
#cp /etc/pam.d/vsftpd /etc/pam.d/ftp
#vim /etc/pam.d/ftp
添加以下内容:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vlogin
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vlogin
6. 设置主机访问控制
#vim /etc/hosts.allow
添加以下内容:
vsftpd:192.168.5.0/24:ALLOW
7. 启动服务
#service vsftpd start
8.实验效果验证:用虚拟用户进行登陆