zoukankan      html  css  js  c++  java
  • linux ftp配置及实操

    一、基础知识:

    1、ftp:file transfer protocal 及文件传输协,工作与应用层。

    2、ftp协议的实现:

      服务器端实现软件:vsftpd,pureftpd,filezilla server

      客户端实现软件:ftp,lftp

    3、数据传输格式:

      ASCII:ASCII格式传输

      binary:二进制文件传输格式

    4、ftp传输连接类型:ftp客户端与服务器端通过命令建立连接后,并不适用命令连接通道传输数据,而是新建一个数据连接传输数据

      命令连接:传输指令

      数据连接:传输数据

    5、ftp工作模式:主动模式和被动模式两种。

      主动模式:port模式,服务器监听于某一固定端口。服务器端主动向客户端发起连接请求。

      被动模式:PASV模式,服务器监端口不固定,客户端向服务器端发起连接请求。

      为什么要有两种工作模式?

        因为,客户端出于安全因素考虑,一般会禁用大于1024的端口,但是服务器并不知道客户端哪些端口处于禁用状态,所以主动模式难以生效。因此最好使用被动模式。

    6、ftp用户类型

      匿名用户:所有的农名用户,一般映射为本地魔衣固定的系统用户(一般为用户ftp)。家目录为/var/ftp

      本地用户:又称为系统用户,UID一般0~999。存在于/etc/passwd文件中的所有用户

      虚拟用户:使用开了中间层(一般为PAM),如使用mysql数据库存储用户名和密码

        PAM:plugable authentication modules 插入式认证模块。

     二、vsftpdf的安装

    1、关闭防火墙:service iptables stop

    2、关闭selinux:setenforce 0

    3、 先用rpm -q vsftpd命令检查是否已经安装,若ftp没有安装,使用yum  -y  install vsftpd 安装

    4、设置开机自启 :chkconfig  vsftpd on  。

    5、启动vsftpd: service vsftpd  <start |stop|status|restart>

    三、vsftpd配置

    1、备份配置文件:cp  /etc/vsftpd/vsftpd.conf  /etc/vsftpd/vsftpd.conf.bak

    1、写权限全局配置项:

    write_enable=YES               ###是否对登录用户开启写权限。属全局性设置。默认NO。  

    2、匿名用户配置

    anonymous_enable=YES           ###设置是否允许匿名用户登录FTP服务器。默认为YES。所有匿名用户都会映射至某一固定系统用户,此用户一般问ftp,家目录是/var/ftp。
    ftp_username=ftp               ###定义匿名用户的账户名称,默认值为ftp。
    no_anon_password=YES           ###匿名用户登录时是否询问口令。设置为YES,则不询问。默认NO。
    anon_world_readable_only=YES   ###匿名用户是否允许下载可阅读的文档,默认为YES。
    anon_upload_enable=YES         ###是否允许匿名用户上传文件。前提是write_enable=YES时,该配置项才有效。而且匿名用户对相应的目录必须有写权限。默认为NO。
    anon_mkdir_write_enable=YES    ###是否允许匿名用户创建目录。前提是write_enable=YES时有效。且匿名用户对上层目录有写入的权限。默认为NO。
    anon_other_write_enable=NO     ###除去上传和建立目录的权限,其它写权限如删除和更名权限,依赖于次配置。默认值为NO。
    

    2.1、修改匿名用户上传文件属主

    # If you want, you can arrange for uploaded anonymous files to be owned by
    # a different user. Note! Using "root" for uploaded files is not
    # recommended!
    chown_uploads=YES   
    ###是否允许匿名用户上传文件,匿名用户上传文件默认属主为root。允许匿名用户上传文件除了

     ###write_enable=YES外还需配置匿名用户对家目录(默认为/var/ftp)有写权限。

     ####示例,我们将智图表格.txt文件上传到默认匿名用户家目录/var/ftp/下,可以看到文件属主为root

    chown_username=test    ####指定匿名用户上传文件的属主。此处设置为test
    ###示例,匿名登录FTP然后我们将智图.xls表格上传.可以看到上传后的文件属主就是我们指定的test
    此处有个问题:当匿名用户对默认家目录/var/ftp有写权限,而且
    chown_uploads=YES,或
    chown_username=test 同时使用时会限制匿名用户登录。本次示例是通过先启动服务,匿名登录服务器后再赋予写权限后上传成功的。本人没有研究明白问题所在,希望高人指点。

    3、访问控制

    (1)基于IP
    tcp_wrappers=YES:用来设置vsftpd服务器是否与tcp wrapper相结合,进行主机的访问控制。设置为YES时,vsftpd服务器会检查/etc/hosts.allow和/etc /hosts.deny中的配置,通过两个我带你见来判断是否允许客户端访问该FTP服务器。类似于简易的防火墙。

    示例:只允许192.168.121.1~192.168.121.254的用户访问ftp服务器,则可编辑/etc/hosts.allow文件中并添加以下内容:
    vsftpd:192.168.121.0/255.255.255.0 :allow
    all:all:deny 

    (2)基于用户
      ①记录在/etc/vsftpd/ftpusers中的用户不允许登录ftp,文件中默认有一些系统用户不允许登录如root。  

    [root@localhost vsftpd]# more ftpusers 
    # Users that are not allowed to login via ftp
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    mail
    news
    uucp
    operator
    games
    nobody
    

      ②指令控制 

      userlist_enable=YES  :控制是否开启由userlist_file=/PATH控制的ftp访问控制文件(默认为/etc/vsftpd/user_list)。

      userlist_file=/etc/vsftpd/user_list   :文件访问控制文件路径

      userlist_deny=YES:代表userlist_file=/PATH指定文件为黑名单,即文件记录所有用户都不允许登录。默认为YES,即黑名单。

      userlist_deny=NO:代表userlist_file=/PATH指定文件为白名单,即只有文件记录用才能登录ftp。

    root@localhost vsftpd]# more 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.
    # Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
    # for users that are denied.
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    mail
    news
    uucp
    operator
    games
    nobody
    

      

      

    4、本地用户配置

    注意,其他用户不能对/etc/vsftpd/下的三个文件有执行权限,否则不能登录FTP

    local_enable=YES               ###是否允许非匿名用户,如本地用户(/etc/passwd中的用户)登录FTP服务器。所有非匿名用户的生效都依赖于此配置。默认为NO。
    local_mask=022             ###本地用户上传文件的权限掩码

    注意在/etc/vsftpd/ftpusers 中记录的本地用户不允许登录ftp。此配置文件默认包含以下用户。当然本地用户能否登录还与其他配置有关如userlist_enable。

      userlist_enable=YES  :控制是否开启由userlist_file=/PATH控制的ftp访问控制文件(默认为/etc/vsftpd/user_list).

      userlist_deny=YES:代表userlist_file=/PATH指定文件为黑名单,即文件记录所有用户都不允许登录。默认为YES,即黑名单。

      userlist_deny=NO:代表userlist_file=/PATH指定文件为白名单,即只有文件记录用才能登录ftp。

      

    示例:要想让root用户能登录系统需要以下配置

      local_enable=YES

      编辑ftpusers,将root用户删除或者注释掉

      userlist_enable=YES 时,若userlist_deny=YES。要编辑userlist_file指向的文件,在黑名单中删除或注释掉root

                 ,若userlist_deny=NO。要编辑userlist_file指向的文件,在白名单中添加root 

    5、欢迎信息配置

    ①用户登录成功后欢迎消息设定

    # You may fully customise the login banner string:
    #ftpd_banner=Welcome to blah FTP service.    ###可以自己定制登录横幅字符串,即自己定制一个欢迎登录成功用户的信息
    ftpd_banner=Warning:this is my page.
    banner_file=/PATH/TO/FILE    ###若欢迎信息较多可以将其写入到某以文件中。
    
    
    ②有时候我们会在用户切换至某一目录时,设置目录消息,用来提醒用户,不要轻易做删除操作等信息。此时就可以使用目录消息设定了。
    # Activate directory messages - messages given to remote users when they
    # go into a certain directory.
    dirmessage_enable=YES   
    ####开启时,用户切换至指定目录后,vsftpd会查看目标目录下的.message(没有时要新建)文件,并将其内容显示给用户。,当然也可使用message_file命令指定文件
    ,将文件内容显示给用户。此处我们设置.message文件内容为this is a test information.
    message_file=/PATH/TO/FILE


    6、禁锢用户于自己的家目录。例如test用户登录ftp后默认在其指定的家目录(本人配置的是/home/test),但是默认test用户是可以切换到其他目录的。这样很不安全。

    # You may specify an explicit list of local users to chroot() to their home
    # directory. If chroot_local_user is YES, then this list becomes a list of
    # users to NOT chroot().
    #chroot_local_user=YES   
    ###是否禁锢所有本地用户于自己的家目录中。设置为YES是代表禁锢所有本地用户。 #chroot_list_enable=YES
    ####有时候我们不想禁锢所有用户,只是禁锢其中的某些用户,此时可以使用此配置项。设置为YES时,开启一个(chroot_list_file)指向的文件。文件中用户不允许cd到本地系统其他目录。  
    # (default follows) 
    #chroot_list_file=/etc/vsftpd/chroot_list ####默认文件为/etc/vsftpd/chroot_list

    示例:chroot_local_user与chroot_list_enable都为YES时,会有什么情况?

    我们准备两个用户test和wxx

      ①配置
      chroot_local_user=YES
      chroot_list_enable=YES
      chroot_list_file=/etc/vsftpd/chroot_list
      ②在chroot_list文件中添加用户test
      ③启动ftp服务,结果如下图。即,test用户使用pwd显示的在家目录/home/test,可以cd到其他目录;wxx用户显示在/下,实际是在/home/test,无法cd到其他目录。

    ④得出结论是都为YES时,只有在chroot_list中的目录才能cd到其他目录,此时chroot_list其实是一个白名单,即允许哪些用户切换目录。具体有以下几种情况


    1)当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件中列出的用户,可以cd到其他目录;未在文件中列出的用户,不能cd到其他目录。
    2)当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd/chroot_list文件中列出的用户,不能cd到其他目录;未在文件中列出的用户,可以cd到其他目录。
    3)当chroot_list_enable=NO,chroot_local_user=YES时,所有用户均不能cd到其他目录。
    4)当chroot_list_enable=NO,chroot_local_user=NO时,所有用户均可cd换到其他目录。
    5)当用户不允许切换到上级目录时,登录后FTP站点的使用pwd命令显示在/下,其实还是在家目录下。

    7、日志文件

    # The target log file can be vsftpd_log_file or xferlog_file.
    # This depends on setting xferlog_std_format parameter
    xferlog_enable=YES   ###是否启用上传或下载日志记录
    # Switches between logging into vsftpd_log_file and xferlog_file files.
    # NO writes to vsftpd_log_file, YES to xferlog_file
    xferlog_std_format=YES 
    ###控制是使用vsftpd_log_file 日志文件,还是使用xferlog_file日志文件
    NO代表使用vsftpd_log_file;YES代表使用xferlog_file。
    # The name of log file when xferlog_enable=YES and xferlog_std_format=YES
    # WARNING - changing this filename affects /etc/logrotate.d/vsftpd.log
    #xferlog_file=/var/log/xferlog       
    vsftpd_log_file=/var/log/vsftpd.log

    示例:两种文件格式

     

      

    8、FTP监听端口

    # When "listen" directive is enabled, vsftpd runs in standalone mode and
    # listens on IPv4 sockets. This directive cannot be used in conjunction
    # with the listen_ipv6 directive.
    listen=YES  ####YES代表ftp工作于standalone模式。
    listen_port=21 ###ftp命令连接监听端口,默认为21
    listen_address=*.*.*.* ###设置FTP在哪个IP上监听用户的连接请求。一般注释掉代表监听于本机所有IP,如127.0.0.1

    9、FTP并发连接数

    max_clients=0 :设置vsftpd允许的最大并发连接数,默认为0,代表不受限制。若设置为200时,则同时允许有200个连接,超出的将拒绝客户端连接请求。只有在standalone模式下有效

    max_per_ip=0:设置每个IP地址可以FTP服务器同时建立连接的最大数目。默认为0,代表不受限制。建议设置一个较小值,防止同一个用户建立太多的连接。只有在以standalone模式运行时才有效。

    10、会话超时时长

    idle_session_timeout:空闲连接超时时长,服务于客户端建立了解后,若在指定时间内在没有互相发送任何指令则自动断开连接。

    connect_timeout=60:port模式下

    data_connection_timeout=300:数据传输超时时长。

    11、PASV模式下端口配置

    pasv_enable=YES:  若设置为YES,则启用PASV工作模式;若设置为NO,启用PORT模式。默认为YES,即使用PASV模式。

    pasv_max_port=0:PASV模式下,数据连接端口最大值,默认值为0,表示任意端口。

    pasv_mim_port=0:PASV模式下,数据连接端口最小值 ,默认值为0,表示任意端口。       
    12、传输速率 

    anon_max_rate=0:设置匿名用户最大传输速度,单位为b/s。0为默认值代表不受速度限制。
    local_max_rate=0 : 设置本地用户最大传输速度。默认为0。

     

    示例:一个最简单的FTP配置示例

    要求:1、不允许匿名用户登录,只允许本地用户中的指定用户登录。

       2、该用户有读写权限。 

         3、禁锢用户与自己家目录

       4、工作于被动模式

       5、本地用户名为zxy家目录是/tmp/zxy

    第一步配置文件相关

    ①保持/etc/vsftpd/vsftpd.conf文件其他内容默认,更改一下配置

      anonymous_enable=NO

    ②添加以下指令

      pasv_enable=YES

      pasv_min_port=10000

      pasv_max_port=11000

      userlist_deny=NO

      chroot_local_user=YES

    第二步添加用户指定家目录为/tmp/zxy 

      useradd -m /tmp/zxy zxy

      passwd zxy

    第三步编辑/etc/vsftpd/user_list

      删除所有已存在用户,添加zxy用户

    第四步重启服务

  • 相关阅读:
    “百度杯”CTF比赛 九月场 code
    初识thinkphp(3)
    i春秋CTF web题(1)
    初识thinkphp(2)
    初识thinkphp(1)
    0MQ底层队列设计
    0MQ文档导读
    LF模式是个坑,ZeroIce中间件让你体会这个痛
    0xe7f001f0!?NDK调试过程,无故抛出SIGSEGV。
    KDevelop
  • 原文地址:https://www.cnblogs.com/wxxjianchi/p/9945884.html
Copyright © 2011-2022 走看看