FTP 搭建
 
第一部分:理论
一. FTP服务器的基本原理
1. 基本概念:ftp是文件传输协议,(file transport portocol)
2. 数据传输模式:主动模式和被动模式  (要和binary ascii 区分一下)
3. 使用的端口号: A 主动模式 :命令控制端口:21    数据传输端口:20
   B 被动模式 :命令控制端口:21    数据传输端口:1024之后的随机端口

二. 常用的FTP 服务器软件
1. windows下:iis  server-U
2. Linux下:wu-ftp  proftp vsftp  (现在的主流是vsftp,其他的两种基本被淘汰)
三. Linux常用的服务器软件:vsftp 它是本章的重点:vsery security transport portocol
四.常用的ftp客户端软件
1. 特点:运行在图形环境下的窗口程序,可使用鼠标和通过菜单进行操作,操作方便
2.常用的ftp客户端软件: windows下有Cuteftp  leapftp  flashxp filezilla是windows下运行的开源软件
   
   Linux下有gftp,是GNOME桌面环境中运行的ftp客户的软件,是我GNOME的重要组成部分

五. voftpd.conf中常用的配置参数:
    anonymous_enable=YES   (启用匿名用户,即:允许匿名用户登录)
   
    local_enable=YES   (启用本地用户,即:允许本的用户登录)
    write_enabe=YES (启用本地用户写的权限,即:本的用户登录到宿主目录后有写的权限)
    local_umask=022 (本地用户生成文件的掩码,上传文件的权限是644) 
   【如果上传文件夹的总权限为777,文件为666,可以用 file_open_mode=0777】   
   【注:文件夹的最大权限是777,文件的最大权限是666】 
 
    xferlog_enable=YES (设置为YES时,ftp服务器将启用上传和下载日志。日志文件:/var/log/xferlog
    xferlog_std_format=YES (设为YES时,ftp服务器将使用标准的ftp xferlog 日志格式)
    dual_log_enable=YES (设置为时将生成两个相似的日志文件分别是/var/log/xferlog和/var/log/vsfptpd.log)
    connect_from_port_20=YES (设为YES时,将启用ftp数据端口的连接请求)
    pam_service_name=YES (设置PAM认证服务的配置文件名称)
    userlist_enable=YES  (设为YES时,FTP服务器将检查vsftpd.user_list 文件中的用户是否可以访问ftp服务器)
    【userlist_enable=YES  userlist_deny=NO 表示vsftpd.user_list 文件中的用户可以登录ftp服务器】
   
    【userlist_enable=YES  userlist_deny=NO 表示vsftpd.user_list文件中的用户不可以登录ftp服务器】
    【默认情况下userlist_deny=YES,即:vsftpd.user_list文件中的用户不能登录发图片服务器】
    listen=YES 设为YES时,ftp服务器以独立方式启动,否则以超级进程的方式启动
    tcp_wrappers=YES  设为YES时,ftp服务器将使用tcp_wrappers作为主机访问控制方式

    chroot_local_user=YES/NO  限制本地用户是否禁锢在自己的宿主目录中
    chroot_list_enable=YES/NO 
    chroot_list_file=/etc/vsftpd/chroot_list [chroot_list文件中的用户被禁锢在自己的宿主目录中]
    max_clients=100  最大客户端的数量
    max_per_ip=5     每个ip的最大连接数
 
    local_mal_rate=50000  本地用户最大的传输速率  (单位是byte,字节)
    anon_max_rate=20000   匿名用户最大传输速率    (单位是byte,字节)
    listen_port=2121      更改ftp默认的端口号

六. ftp 服务器中默认的黑名单:/etc/vsftpd.ftpusers  (此文件中的用户不能登录ftp服务器)
七. /etc/vsftpd.user_list 文件具有对vsftpd服务器跟灵活的用户访问控制
1. 如果想让该文件中的用户禁止登录ftp服务器:
   userlist_enable=YES
   userlist_deny=YES
2. 如果想让该文件中的用户可以登录ftp服务器:
    
   userlist_enable=YES
   userlist_deny=NO
八. vsftpd支持的用户类型
1. 匿名用户:匿名用户名称:ftp和anonymous    登录目录:/var/ftp
2. 系统用户:系统中实际存在的用户            登录目录:/该用户的宿主目录
3. 虚拟用户:非系统用户                      登录目录:  可手工指定

九. 命令行模式下常用命令:
   put (上传,这能上传一个文件)
   get (下载,这能下载一个文件)
   mput(上传,可上传多个文件)
   mget(下载,可下载多个文件)
 
第二部分:实验

实验一:测试匿名用户和系统用户
1.安装ftp软件包:# rpm -ivh vsftpd
2.启动ftp服务器:# service vsftpd start
3.建立系统用户。(匿名用户不用建立)
 
4.在客户端登录ftp进行测试:
  A. 在cmd里面用命令测试,格式为:ftp 服务器的ip  然后输入用户名和密码
  B. 用客户端软件测试: windows下可用flashxp cuteftp leapftp 测试
                        Linux下可用 gftp测试(先安装gftp 软件包)
  
  【匿名用户测试时,用户名为ftp或anonymous,输入密码时,直接回车即可】
  【系统用户测试时,输入系统用户的用户名和密码】

实验二:虚拟用户的支持
1. 建立虚拟用户的口令库文件。(奇数行是用户名,偶数行是密码。在/etc/vsftpd/目录下建立该文件,假设为benet。文件名可自定义)
2. 生产vsftpd的认证文件(需要先安装db4-util软件包)
   # db_load  -T  -t  hash  -f  /etc/vsftpd/benet   /etc/vsftpd/benet.db (注意修改该文件的权限)
3. 建立虚拟用户所需要的PAM 配置文件(在/etc/pam.d/目录下创建该文件。文件名可自定义,假设为ftp)
  # vim  /etc/pam.d/ftp 输入下面内容:
 
    auth  required  /lib/security/pam_userdb.so   db=/etc/vsftpd/benet(库名) 
    account  required  /lib/security/pam_userdb.so   db=/etc/vsftpd/benet(库名) 

3. 建立虚拟用户登录目录,并修改相应权限(修改主目录权限为700)
  # useradd -s /sbin/nologin/   -d /aa qq
 
  # chmod 700 /aa
 
  【该系统用户qq不能登录,宿主目录是/aa。所有的虚拟用户都将登录到/aa这个目录中。-s 和 -d 参数不是必须的】
4. 设置/etc/vsftpd/vsftpd.conf配置文件,在文档末尾添加如下内容:
   guest_enable=YES
   guest_username=qq(qq是上面的系统用户)
   pam_service_name=ftp(ftp是pam认证的模块名称)
   user_config_dir=/etc/vsftpd/config(config要手动创建,它是虚拟用户权限配置目录。在该目录中以虚拟用户的用户名编辑文件,设置权限)
5. 进入/etc/vsftpd/config目录,以虚拟用户的名字编辑权限配置文件,可用参数如下:
  anon_world_readable_only=NO (表示用户可以浏览ftp目录和下载文件)
  anon_upload_enable=YES      (表示用户可以上传文件)
 
  anon_mkdir_write_enable=YES (表示用户具有建立目录的权限,但不能删除目录)
 
  anon_other_write_enable=YES (表示用户具有文件改名和删除文件的权限)
  local_root=/zz              (指定虚拟用户的登录目录)
 

补充实验
1. 如何实现匿名用户的上传文件权限?
 
 A. 在/var/ftp/目录下建立目录。
 B.修改/etc/vsftpd/vsftpd.conf文件: anon_upload_enable=YES (虚拟用户可上传文件)
        anon_mkdir_write_enable=YES (虚拟用户可创建目录)
        anon_world_readable_only=YES (虚拟用户可浏览和下载文件)
       【根据需要设置相应的权限】
                                 

2. 如何限制系统用户任意切换宿主目录?
  chroot_local_user=YES

3. 虚拟用户aa,权限设置可上传,可建立文件夹,可删除文件夹,最大传输速率为0.5MB,登录目录为/ftpsite
   local_root=/ftpsite
   anon_world_readable_only=NO
   anon_upload-enable=YES
   anon_mkdir_write_enable=YES
   anon_other_write_enable=YES
   anon_max_rate=500000