一、FTP的基本概念
1. FTP作用
  FTP(文件传输协议)是TCP/IP协议栈所提供的一种子协议,该子协议具体可以实现在以下功能:
?从客户向服务器发送一个文件
?从服务器向客户发送一个文件
?从服务器向客户发送文件或目录列表
2.FTP的工作体系
FTP工作在TCP/ip模型的第四层(应用层)上,服务器与客户机之间利用TCP的21号端口传送信号指令;利用20号端口用于传送数据;具体工作过程如下:
(1)客户机启动客户端程序,通过TCP的“三次握手”建立服务器的连接
(2)服务器对客户机进行身份验证
(3)进行相应目录操作和数据传输
(4)断开连接
3.FTP的数据传输模式
主动传输模式:
在这种模式下,服务器向客户端发起一个用于数据传输的连接,客户端的连接端口是由服务器和客户端通过协商通过的
被动传输模式:
在这种模式下,客户端向服务器发起一个用于数据传输的连接,客户端的连接端口是发起这个数据连接请求时使用的端口号
4.Linux下常见的FTP软件
vsftpd
优点:是一个安全、高速、稳定的FTP服务器
?    可设定多个基于IP的虚拟FTP服务器
?    匿名FTP服务器更是十分容易
?    不执行任何外部程序,从而减少了安全隐患
?    支持虚拟用户,且支持每个虚拟用户具有独立的配置
?    可以设置为从xinetd启动,或者是独立FTP服务器两种运行方式
?    支持PAM或xinetd/tcp_wrappers的认证方式
?    支持带宽限制
二.FTP服务器配置
1.安装FTP服务的相关软件 
方法一:RPM命令
#rpm  -ivh  vsftpd-1.1.3-8.i386.rpm
方法二:编译方式
(1)准备活动
[root@hpe45 root]# useradd nobody
[root@hpe45 root]# mkdir /usr/share/empty/
[root@hpe45 root]# mkdir /var/ftp/
[root@hpe45 root]# useradd -d /var/ftp ftp
[root@hpe45 root]# chown root.root /var/ftp
[root@hpe45 root]# chmod og-w /var/ftp
(2)为本地用户设置PAM
[root@hpe45 vsftpd-1.2.0]# cp  RedHat/vsftpd.pam   /etc/pam.d/ftp
相关文件:
/etc/vsftpd/vsftpd.conf   主配置文件
/etc/vsftpd.ftpusers      指定哪些用户不能访问FTP服务器
/etc/vsftpd.user_list     可以根据vsftpd.conf文件中的设置来决定该文件中指定的用户是否可以访问ftp服务器
/etc/rc.d/init.d/vsftpd    vsftpd的启动脚本文件
修改/etc/vsftpd/vsftpd.conf文件
#vi  /etc/vsftpd/vsftpd.conf
功能:设置FTP服务器相关选项
文件格式:#说明语句
     ...........
     ...........
配置选项
     ...........
     ...........
说明:在vsftpd. Conf文件中主要由各种配置选项组成,具体以分为以下类别:
连接选项
2.监听地址与控制端口
listen_address=ip address
定义了在主机的哪个IP地址上监听FTP请求(应用于独立启动方式的多IP主机默认值为无)
listen_port=port_value  
指定FTP服务器监听的端口号(控制端口),默认值为21。此选项在standalone模式下生效
2.1.  FTP模式与数据端口
 port_enable=YES|NO
 指定数据连接时模式,默认值为YES(PORT模式,NO为PASV模式)
 connect_from_port_20=YES|NO
 控制以PORT模式进行数据传输时是否使用20端口(ftp-data),(YES使用,NO不使用,默 认值为NO)
 ftp_data_port=port number
 设定ftp数据传输端口(ftp-data)值。默认值为20。此参数用于PORT FTP模式。
 port_promiscuous=YES|NO
 默认值为NO。为YES时,取消PORT安全检查。该检查确保外出的数据只能连接到客户端上 。小心打开此选项。
 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_promiscuous=YES|NO
 此选项激活时,将关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址。小心打开此选项。此选项唯一合理的用法是存在于由安全隧道方案构成的组织中。默认值为NO
pasv_address= ip address
此选项为一个数字IP地址,作为PASV命令的响应。默认值为none,即地址是从呼入的连接套接字(incoming connectd socket)中获取。
2.2.ASCII模式
 ascii_upload_enable=YES|NO
 控制是否允许使用ascii模式上传文件,YES允许,NO不允许,默认为NO
 ascii_download_enable=YES|NO
 控制是否允许使用ascii模式下载文件,YES允许,NO不允许,默认为NO。
3.性能与负载控制
3.1.超时选项
idle_session_timeout= numerical value
空闲(发呆)用户会话的超时时间,若是超出这时间没有数据的传送或是指令的输入,则会强迫断线。单位为秒,默认值为300。
data_connection_timeout= numerical value
空闲的数据连接的超时时间。默认值为300 秒。
accept_timeout=numerical value
接受建立联机的超时设定,单位为秒。默认值为60。
connect_timeout=numerical value
响应PORT方式的数据联机的超时设定,单位为秒。默认值为60。以上两个选项针对客户端的,将使客户端空闲1分钟后自动中断连接,并在中断1分钟后自动激活连接
3.2.负载控制
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为单位。默认无。此选项对所有的用户都生效
4.用户选项
4.1.匿名用户
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
指定拥有匿名用户上传文件所有权的用户。此参数与chown_uploads联用。不推荐使用root用户。
4.2.本地用户
local_enable=YES|NO
控制vsftpd所在的系统的用户是否可以登录vsftpd。默认值为YES。
local_root=
定义所有本地用户的根目录。当本地用户登入时,将被更换到此目录下。默认值为无。
user_config_dir=
定义用户个人配置文件所在的目录。用户的个人配置文件为该目录下的同名文件。个人配置文件的格式与vsftpd.conf格式相同。例如定义user_config_dir=/etc/vsftpd/userconf,并且主机上有用户xiaowang,lisi,那我们可以在user_config_dir的目录新增名为xiaowang、lisi的两个文件。当用户lisi 登入时,VSFTPD则会读取user_config_dir下lisi这个文件中的设定值,应用于用户lisi。默认值为无。
4.3.虚拟用户
guest_enable=YES|NO
若是启动这项功能,所有的非匿名登入者都视为guest。默认值为关闭
guest_username=
定义VSFTPD的guest用户在系统中的用户名。默认值为ftp
5.安全措施
pam_service_name=vsftpd
指出VSFTPD进行PAM认证时所使用的PAM配置文件名,默认值是vsftpd,默认PAM配置文件是/etc/pam.d/vsftpd。
/etc/vsftpd.ftpusers
VSFTPD禁止列在此文件中的用户登录FTP服务器。这个机制是在/etc/pam.d/vsftpd中默认设置的。
userlist_enable=YES|NO
此选项被激活后,VSFTPD将读取userlist_file参数所指定的文件中的用户列表。当列表中的用户登录FTP服务器时,该用户在提示输入密码之前就被禁止了。即该用户名输入后,VSFTPD查到该用户名在列表,VSFTPD就直接禁止掉该用户,不会再进行询问密码等后续步聚。默认值为NO。
userlist_file=/etc/vsftpd.user_list
指出userlist_enable选项生效后,被读取的包含用户列表的文件。默认值是/etc/vsftpd.user_list。
userlist_deny=YES|NO
决定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器。此选项在userlist_enable 选项启动后才生效。YES,默认值,禁止文件中的用户登录,同时也不向这些用户发出输入口令的提示。NO,只允许在文件中的用户登录FTP服务器。
tcp_wrappers=YES|NO
在VSFTPD中使用TCP_Wrappers远程访问控制机制,默认值为YES。
5.1.目录访问控制
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。
5.2.文件操作控制
hide_ids=YES|NO
是否隐藏文件的所有者和组信息。YES,当用户使用"ls -al"之类的指令时,在目录列表中所有文件的拥有者和组信息都显示为ftp。默认值为NO。
ls_recurse_enable=YES|NO
YES,允许使用"ls -R" 指令。这个选项有一个小的安全风险,因为在一个大型FTP站点的根目录下使用"ls -R"会消耗大量系统资源。默认值为NO。
write_enable=YES|NO
控制是否允许使用任何可以修改文件系统的FTP 的指令,比如STOR、DELE、RNFR、RNTO、MKD、RMD、APPE 以及SITE。默认值为NO,不过自带的简单配置文件中打开了该选项。
secure_chroot_dir=
这选项指向一个空目录,并且ftp用户对此目录无写权限。当vsftpd不需要访问文件系统时,这个目录将被作为一个安全的容器,用户将被限制在此目录中。默认目录为/usr/share/empty。
5.3.新增文件权限设定
anon_umask=
匿名用户新增文件的umask 数值。默认值为077。
file_open_mode=
上传档案的权限,与chmod 所使用的数值相同。如果希望上传的文件可以执行,设此值为0777。默认值为0666。
local_umask=
本地用户新增档案时的umask 数值。默认值为077。不过,其他大多数的FTP服务器都是使用022。如果您的用户希望的话,可以修改为022。在自带的配置文件中此项就设为了022。
6.提示信息
ftpd_banner=logi n banner string
此参数定义了login banner string(登录欢迎语字符串)。用户可以自行修改。预设值为无。当ftpd_banner设置后,将取代系统原来的欢迎词。
banner_file=/directory/vsftpd_banner_file
此项指定一个文本文件,当使用者登入时,会显示此该文件的内容,通常为欢迎话语或是说明。默认值为无。与ftpd_banner相比,banner_file是文本文件的形式,而ftpd_banner是字串格式。banner_file选项将取代ftpd_banner选项。
dirmessage_enable=YES|NO
控制是否启用目录提示信息功能。YES启用,NO不启用,默认值为YES。此功能启用后,当用户进入某一个目录时,会检查该目录下是否有message_file选项所指定的文档,若是有,则会出现此文档的内容,通常这个档案会放置欢迎话语,或是对该目录的说明。
message_file=
此选项,仅在dirmessage_enable选项激活方生效。默认值为.message。
7.日志设置
xferlog_enable=YES|NO
控制是否启用一个日志文件,用于详细记录上传和下载。该日志文件由xferlog_file选项指定。默认值为NO,但简单配置文件中激活此选项。
xferlog_file=
这个选项设定记录传输日志的文件名。默认值为/var/log/vsftpd.log。
xferlog_std_format=YES|NO
控制日志文件是否使用xferlog的标准格式,如同wu-ftpd一样。使用xferlog格式,可以重新使用已经存在的传输统计生成器。然而,默认的日志格式更为可读性。默认值为NO,但自带的配置文件中激活了此选项。
log_ftp_protocol=YES|NO
当此选项激活后,所有的FTP请求和响应都被记录到日志中。提供此选项时,xferlog_std_format不能被激活。这个选项有助于调试。默认值为NO。
案件实例:
根据以下要求配置ftp服务器,具体要求如下:
a.允许匿名用户登录和本地用户登录
b.禁止匿名用户上传
c.允许本地用户上传和下载
d.本地文件生成掩码为022
e.空闲的会话时间为600秒,数据连接时间为60秒,空闲中断时间为30秒,自动激活时        间为10秒
f.本地用户的最大传输速率为50000b/s,匿名用户的最大传输速率为30000b/s
g.客户端的连接端口为5000-6000
h.使用独占启动方式,侦听192.168.5.1接口的21号端口
i.并发连接的客户数为300,每台客户机的最大连接为5
#vi  /etc/vsftpd/vsftpd.conf
根据以上的要求作以下更改:
anonymous_enable=yes
local_enable=yes
anon_upload_enable=no
write_enable=yes
local_umask=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
listen=yes
listen_address=192.168.5.1
listen_port=21
max_clients=300
max_per_ip=5
 启动服务
如果采用独占方式的话,方法如下:
#service  vsftpd  start
如果采用超级服务方式的话,方法如下:
#ntsysv  (选中vsftpd服务)
#service  xinetd   restart