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端口进

原文地址:https://www.cnblogs.com/imlifelong/p/10651321.html