zoukankan      html  css  js  c++  java
  • Linux下FTP服务器搭建

    FTP文件传输协议,是基于tcp协议的,它使用多端口通信。分主动模式和被动模式。

          主动模式:client随机选取一个大于1024的端口n发送请求到server的21端口,并发送n+1表示要监听的数据端口,server会从20端口发送数据到client的n+1端口。但是,如果client有防火墙则发送的数据可能会被拒之门外。

          被动模式:client随机选取一个大于1024的端口n发送请求到server的21端口,server会随机选取一个端口m(会发送port和6个十进制的参数,前四个表示client ip地址,后两个数据 x y表示server端口x*256+y),发送给client,client从自己的n+1端口发送数据请求到服务器的端口m。但是,这样服务器会被防火墙阻塞。

    vsftpd(Very Secure FTP)是一个Linux下FTP服务器软件:

    安装:yum install vsftpd 
    文件:    
        /etc/pam.d/vsftpd         vsftpd使用的pam模块配置文件
        /etc/rc.d/init.d/vsftpd    启动脚本                
        /etc/vsftpd/ftpusers      pam模块指定那些用户不能登录
        /etc/vsftpd/user_list     vsftpd指定的那些用户不能登录userlist_enable=yes调用这个文件里的内容;userlist_deny=yes开启这个功能作用
        /usr/sbin/vsftpd          主程序文件
        /etc/vsftpd/chroot_list    指定那些用户的根目录为自己的家目录
            Chroot_local_user=yes  本地所有帐户都锁定在自家目录
            Chroot_list_enable=yes 文件中的名单可以调用
            Chroot_list_file=/任意指定的路径 前提是chroot_local_user=no 
        /var/ftp/                  匿名用户的根目录        
    

    主配置文件:

    vim    /etc/vsftpd/vsftpd.conf    主配置文件    
            1、与服务器环境相关设置:
                connect_from_port_20=YES    主动连接使用的端口号
                listen=YES                    表示使用独立模式监听
                dirmessage_enable=YES        用户进入该目录时显示一些话
                message_file=.message        存放要显示的话的文件
                pasv_enable=YES             支持数据流的被动模式
                use_localtime=YES            使用本地时间,vsftpd默认使用GMT时间,会比中国晚8个小时
                write_enable=YES            允许用户上传,
                xferlog_enable=YES            用户上传与下载的文件都会被记录下来。
                xferlog_file=/var/log/xferlog    日志记录在该文件下
                chroot_local_user=YES        默认系统用户被限制在自己家目录中
                chroot_list_enable=YES        是否启用chroot,
                chroot_list_file=/etc/vsftpd.chroot_list    设置用户名单
                userlist_enable=YES            是否要阻止一些用户访问
                userlist_deny=YES            表示列表中的用户不能访问,如果为NO表示列表中的用户才能访问
                userlist_file=/etc/vsftpd/user_list    用户列表文件
                local_umask=022                本地用户上文件的m默认权限
                xferlog_std_format=YES        日志格式与wu-ftp一样
                pam_service_name=vsftpd.pam    使用pam的模块
                guest_enable=YES            任何用户都将被认为是guest指定的用户
                guest_username=ftpuser        指定guest用户名
                user_config_dir=/etc/vsftpd/users_config    虚拟用户的配置文件
                tcp_wrappers=YES            支持tcp_wrappers    
            2、匿名用户设置:    
                virtual_use_local_privs=YES/NO(NO)当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与 匿名用户相同的权限。默认情况下此参数是关闭的(NO)
                anonymous_enable=YES        表示允许匿名anonymous登录     
                anon_upload_enable=YES        匿名可以上传
                anon_mkdir_write_enable=YES    匿名可以建立目录
                anon_world_readable_only=YES只有下载可读权限    
                anon_other_write_enable=YES    除了写外还有删,改的权限
    案例:一个实验室要搭建一个ftp服务器,要求仅有一个用户可以上传,删除,修改,下载文件,其他用户只能查看和下载。

    1、创建虚拟用户文件,
    vim /etc/vsftpd/user.virtual
        ftp01      奇数行为用户名
        XXXX       偶数行为密码
        ftp02
        xxxx
    2、生成用户数据库:
    db_load -T -t hash -f /etc/vsftpd/user.virtual /etc/vsftpd/user.virtual.db
    3、修改数据库访问权限:
    chmod 700 /etc/vsftpd/user.virtual.db
    4、创建pam文件
    vim /etc/pam.d/vsftpd.pam
        auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/user.virtual               
        account required /lib64/security/pam_userdb.so db=/etc/vsftpd/user.virtual
    如果是32位系统:  
        auth required /lib/security/pam_userdb.so db=/etc/vsftpd/user.virtual               
        account required /lib/security/pam_userdb.so db=/etc/vsftpd/user.virtual
    5、创建共享目录和虚拟用户
        mkdir /ftp/share
        chmod -R 700 /ftp/share
        useradd -d /ftp/share ftpuser 
        chown ftpuser.ftpuser /ftp/share
    6、主配置文件
            anonymous_enable=NO
            local_enable=YES
            write_enable=YES
            local_umask=022
            dirmessage_enable=YES
            xferlog_enable=YES
            connect_from_port_20=YES
            xferlog_std_format=YES
            listen=YES
            pam_service_name=vsftpd.pam
            userlist_enable=YES
            guest_enable=YES
            guest_username=ftpuser
            user_config_dir=/etc/vsftpd/users_config
            tcp_wrappers=YES    
    7、虚拟用户配置
    vim users_config/ftp01
            write_enable=YES
            anon_world_readable_only=NO
            anon_upload_enable=YES    
            anon_mkdir_write_enable=YES
            anon_other_write_enable=YES
    vim users_config/ftp02
            anon_world_readable_only=NO
            anon_other_write_enable=NO
            write_enable=NO
            anon_upload_enable=NO
            anon_mkdir_write_enable=NO
    8、重启服务 service vsftpd restart
    
    

    ftp防火墙:(已知本机ip222.24.24.46)

    首先要开启ftp的两个模块:
    vim /etc/sysconfig/iptables-config 
        IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"  #中间用空格隔开
    被动模式下:
    iptables -A INPUT -d 222.24.24.46 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT  #放行21端口,状态为新连接的和已建立的都允许进 
    iptables -A INPUT -d 222.24.24.46 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT    #tcp状态为已建立的和已发出数据等待回复的都允许进,因为server要随机选取一个大于1024的端口所以要用RELATED状态
    iptables -A OUTPUT -s 222.24.24.46 -m state --state ESTABLISHED,RELATED -j ACCEPT       #状态为已建立的和以发出数据等待回复的都允许出
    主动模式下:
    iptables -A INPUT -d 222.24.24.43 -p tcp --dport 20:21 -j ACCEPT   #允许20,21端口进
    
    
    

  • 相关阅读:
    【DFS】算24点
    【位运算】【BFS】移动玩具
    【并查集】【DFS】搭桥
    shell脚本编写informix数据库中表的导入和导出
    利用springloaded进行java jar&class的动态替换
    利用springloaded进行java class动态替换
    ActiveMq unsupported major.minor version 52.0
    oracle主键修改&设置某一字段可以为null
    XStream将XML转javaben,出现多余的tag,导致出错
    oracle:the password has expired
  • 原文地址:https://www.cnblogs.com/imlifelong/p/10651321.html
Copyright © 2011-2022 走看看