首页 > 代码库 > FTP

FTP

ftp :文件传输协议   独立服务

    vsftpd工具:ftp用户(系统用户)管理维护,在后台运行进程

    ftp默认端口 2 1 数据端口 2 0 端口(主动模式);默认情况下ftp服务运行在被模式下。

    

ftp原理:

    主动模式:客服机向服务器的21端口发送请求,服务接受连接,建立一条命令链路,需要传送数据时候,客服端命令链路上用RORT命令回复服务端接口已经打开可以连接,服务端的从20端口向客户端改21端口发送连接请求,建立一条数据连接来传送数据。数据链路建立过程服务器主动请求。

    被动模式:客服端向服务器的控制端口发送连接请求,服务端接受连接,建立一条命令链路,当需要传送数据时候,服务端在命令链路上用PASV命令告诉客服端:端口打开了某个端口,告诉端来连接,客服端向服务端的该端口发送连接,建立一条数据链路来传送数据。在数据建立的过程中是服务端被动向等待客服端请求。


建立好环境 客服端:windows: ftp://10.1.1.1  linux:ftp 、lftp


搭建服务的步骤:1、关闭防火墙和selinux   

                2、配置YUM源

                3、软件三部曲(查看、安装、查看配置文件)

                rpm -q vsftp    是否安装  ***

                yum -y install vsftpd


             4、了解主配置文件   man 5 vsftpd.conf
               # cat /etc/vsftpd/vsftpd.conf|grep -v ^#|grep -v ^$
                anonymous_enable=YES  允许匿名用户访问
                local_enable=YES        允许本地用户访问
                write_enable=YES        写总开关(本地用户)
                local_umask=022         本地用户的默认权限
                dirmessage_enable=YES   开启消息功能 .messages
                xferlog_enable=YES      开启日志功能
                connect_from_port_20=YES   支持主动模式(默认被动模式)
                xferlog_std_format=YES    日志格式
                listen=YES  以独立服务运行
                pam_service_name=vsftpd  认证服务名
                userlist_enable=YES  开启用户列表
      tcp_wrappers=YES  支持tcp_wrappsers功能,类似防火墙,但是没有防火墙功能强大

        

            5、根据需求修改配置文件

            

            6、启动服务,开机自动动

            #serivce vsftpd start

            #chkconfig vsftpd no

            

            #setstat -nltp | grep 21  端口是否开启

          tcp      0      0 0.0.0.0:21     0.0.0.0:*       LISTEN      3087/vsftpd                         

            7、测试验证(需要安装ftp和lftp)

  默认测试的结果:1、默认允许本地用户和匿名用户访问

                  2、默认匿名用户没有权限上传文件可以下载;本地用户可以上传、删除文件。



 需求 1允许匿名用户上传、下载文件、删除及重命名,匿名用户不可以下载别人上传的文件


        1、  #vim  /etc/vsftpd/vsftpd.conf
          ...
          anon_upload_enable=YES              允许上传
          anon_mkdir_write_abled=YES          允许创建
          anon_other_write_enable=YES         重命名


        2、 重启服务    # service  vsftpd restart
  

        3、测试: # lftp 10.1.1.1 
     lftp 10.1.1.1:/> put test1
     put: Access failed: 553 Could not create file. (test1)    目录权限
    

      lftp 10.1.1.1
  lftp 10.1.1.1:~> ls
ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable anonymous root 查看不了
# lftp 10.1.1.1:~>

      原因:权限太大,不安全。修改目录的权限


 解决办法:

      #chmod  o - w   /var/ftp
      #chmod  o + w  /var/ftp/pub  ——>在 ftp 家目录下创建一个目录


需求 2 : 匿名用户允许下载其他匿名用户上传的文件
  匿名用户上传文件的默认权限,  man 文档查看
          default:    anon_umask:077
         

          匿名用户创建 file 的默认权限:600
                       dir 的默认权限:700

    1、 #vim  /etc/vsftpd/vsftpd.conf     ——>修改主配置文件(修改默认权限)
              ...
              anon_umask=02
  

    2、重启服务
   
   

需求 3 :开启匿名用户和本地用户家目录里的消息功能
局部:
  anon:/var/ftp
  echo hello anon > /var/ftp/.message
  local:/home/$username
  echo hello local > /home/user01/.message


 # vim  /etc/vsftpd/vsftpd.conf    ——>全局修改
     ...
    banner_file=/etc/vsftpd/banner     其他人登录时会看见该文件的内容呢
   
 #echo  banner  xxx  > /etc/vsftpd/banner
 
 #service  vsftpd  restart


需求 4 :禁锢本地用户的家目录

1、   #vim  /etc/vsftpd/vsftpd.conf
          ...
          chroot_local_user=YES    禁锢所有本地用户,只能在自己的家目录里活动

       #service  vsftpd  restart   重启
       
2、#vim  /etc/vsftpd/vsftpd.conf
       ...
         chroot_local_user=YES       只允许user01可以切换,其他任何人都不允许
         chroot_list_enable=YES
       #( default    follows )
         chroot_list_file=/etc/vsftpd/chroot_list
         
    #echo  user01 > /etc/vsftpd/chroot_list

3、#vim  /etc/vsftpd/vsftpd.conf
      ...
      #chroot_local_user=YES         只拒绝user01,其他人都可以切换
        chroot_list_enable=YES
      #( default    follows )
         chroot_list_file=/etc/vsftpd/chroot_list
         
     #echo  user01 > /etc/vsftpd/chroot_list


需求 5 :允许拒绝某人访问 ftp 服务(ftp 自身访问控制)

   /etc/vsftpd/ftpusers:黑名单   /etc/vsftpd/user_list: 白名单
   如果ftpusers 和 user_list 文件冲突,ftpusers黑名单 优先
                                                   

#echo  user01 >>ftpusers 用户放入黑名单

client:
          Name (192.168.1.102:root): user01
          331 Please specify the password.
          Password:
          530 Login incorrect.
          Login failed.
          ftp>



1、只允许 user01 访问 ftp 服务

     # cat   user_list
     # vsftpd  userlist
     # If userlist_deny=NO,  only allow users in this file
     # If userlist_deny=YES (default),  never allow users in this file, and
     # do not even prompt for a password.
 
      #vim vsftpd.conf
          ...
          userlist_deny=NO
         
重启服务,测试:

Name (192.168.1.102:root): user02  没在user_list里面,所一拒绝登录
   530 Permission denied.
   Login failed.
ftp>

 



需求 6 :允许或者拒绝网络中的主机

# ldd /usr/sbin/vsftpd |grep  libwrap
        libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f42562a0000)

      /etc/hosts.deny    拒绝访问      
      /etc/hosts.allow    允许访问
先匹配

      /etc/hosts.deny  , 再去匹配

hosts.allow ; 如果两个文件都不存在,默认都允许;如果两个文件有冲突,allow优先

The extensible language uses the following format:
         daemon_list : client_list : option : option ...

ALL: .friendly.domain: ALLOW    允许friendly.domain域下面的所有主机访问所有服务
ALL: ALL: DENY   拒绝所有人来访问所有服务
ALL: .bad.domain: DENY   拒绝.bad.domain下面的所有主机访问所有服务
ALL: ALL: ALLOW    允许所有人来访问所有服务


#vim  /etc/hosts.deny   ——>拒绝列表
   ...
   服务名称:选项
   vsftpd:all       拒绝所有人来访问 ftp 服务
   vsftpd:192.168.1.3 , 192.168.1.110
   vsftpd :  192.168.1.0/255.255.255.0
   vsftpd , sshd : .uplooking.com   except  vm01.uplooking.com
   
#vim  /etc/hosts.allow   ——> 允许列表       
  ...
  vsftpd:all  except:192.168.1.3


重启服务测试

 


需求 7 :自定义匿名用户和本地用户的数据根目录


/anon/data :匿名用户数据根目录
/local/data:本地用户数据的根目录


1、创建相应的目录
  #mkdir     /anon/data   -p
  #mkdir     /local/data    -p
 
2、修改配置文件
   #vim    /etc/vdftpd/vsftpd.conf
      ...
      anon_root=/anon/data
      local_root=/local/data
     
3、重启服务

4、测试验证


 

其他访问控制:
    max _clients : 客户端最大连接次数   默认是2000
    max_per_ip : 客户端每个 IP 最大连接次数  默认 50
    max_login_fails : 客户端最大登录失败的次数  默认 3
    local_max_rate : 本地用户传输文件的最大速率   默认没限制   单位是 字节

本文出自 “11447124” 博客,谢绝转载!

FTP