• CentOS7使用vsftpd搭建ftp


    1、下载安装vsftpd的rpm安装包

    下载地址:http://rpmfind.net/linux/rpm2html/search.php?query=vsftpd(x86-64)
    

    2.检查是否已经安装了vsftp

    # 如果没有提示则说明没有安装,如果提示版本号则说明已经安装
    rpm -qa | grep vsftpd
    

    3、安装vsftpd-3.0.2-28.el7.x86_64.rpm

    # 离线安装
    rpm -ivh vsftpd-3.0.2-28.el7.x86_64.rpm
    # 在线安装
    yum install -y vsftp
    
    # 安装过程可能会报错:
    [root@localhost mysoftware]# rpm -ivh vsftpd-3.0.2-22.el7.x86_64.rpm  warning: vsftpd-3.0.2-22.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY error: Failed dependencies: libc.so.6(GLIBC_2.14)(64bit) is needed by vsftpd-3.0.2-22.el7.x86_64 libc.so.6(GLIBC_2.15)(64bit) is needed by vsftpd-3.0.2-22.el7.x86_64
    
    # 解决办法:安装相关依赖
    rpm -ivh libcap-2.16-5.5.el6.x86_64.rpm
    rpm -ivh libcap-devel-2.16-5.5.el6.x86_64.rpm
    

    4、检查是否安装成功

    [root@localhost mysoftware]# rpm -qa | grep vsftpd
    # 出现版本号,说明安装成功
    vsftpd-2.2.2-24.el6.x86_64 
    
    # vsftpd安装主要目录说明
    /etc/vsftpd #ftp服务主目录
    /etc/vsftpd/ftpusers #ftp用户目录
    /etc/vsftpd/user_list #ftp用户列表
    /etc/vsftpd/vsftpd.conf #配置文件
    /usr/sbin/vsftpd # 系统目录
    /usr/lib/systemd/system/vsftpd.service
    /var/ftp #匿名用户的默认数据目录
    /var/ftp/pub #匿名用户的数据目录的扩展目录
    

    5、防火墙开启21端口

    # 因为ftp默认的端口为21,而centos默认是没有开启的。
    # centos7中的防火墙改成了firewall,使用iptables无作用,开放端口的方法如下:
    
    # 开启80端口,此处只需要开启21端口即可
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    # 返回success为成功,命令含义: 
    #    --zone #作用域 
    #    --add-port=80/tcp #添加端口,格式为:端口/通讯协议 
    #    --permanent #永久生效
     
    # 开启21端口
    firewall-cmd --zone=public --add-port=21/tcp --permanent
    # 重新加载防火墙
    firewall-cmd --reload
    # 查看已开放的端口
    firewall-cmd --list-ports
    

    6、修改selinux

    # 执行以下命令查看状态:
    getsebool -a | grep ftp
    
    [root@localhost vsftpd]# getsebool -a | grep ftp 
    ftpd_anon_write --> off
    ftpd_connect_all_unreserved --> off
    ftpd_connect_db --> off
    ftpd_full_access --> off #改为on
    ftpd_use_cifs --> off
    ftpd_use_fusefs --> off
    ftpd_use_nfs --> off
    ftpd_use_passive_mode --> off
    httpd_can_connect_ftp --> off
    httpd_enable_ftp_server --> off
    tftp_anon_write --> off
    tftp_home_dir --> off # 改为on
    
    # 使用一下命令进行修改
    [root@localhost vsftpd]# setsebool -P allow_ftpd_full_access on
    [root@localhost vsftpd]# setsebool -P tftp_home_dir on
    

    7、使用xftp进行测试

    匿名登录默认访问目录:/var/ftp/pub

    8、创建用户并关闭匿名访问

    # 创建用户
    useradd ftpuser
    # 设置密码
    passwd ftpuser
    # 此用户就是用来登录ftp服务器用的,登录后默认的路径为 /home/ftpuser
    
    # 设置FTP用户的账号,例如账号为“ftpuser”,目录为/home/ftpuser,且设置不允许通过ssh登录,不允许ssh会导致登录失败,可参考下面的解决方案配置
    useradd -d /home/ftpuser -s /sbin/nologin ftpuser
    
    # 切换目录
    cd /etc/vsftpd
    # 备份配置文件
    cp vsftpd.conf vsftpd.conf.copy
    # 编辑
    vim /etc/vsftpd/vsftpd.conf
    # 在配置文件中找到“anonymous_enable=YES”,将"YES"改为"No",将匿名登录禁用
    anonymous_enable=No
    

    9、开启被动模式

    # 默认是开启的,但是要指定一个端口范围,打开vsftpd.conf文件,在后面加上
    pasv_min_port=30000
    pasv_max_port=30999
    表示端口范围为30000~30999,这个可以随意改。改完重启一下vsftpd。
    
    [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
    [root@localhost ~]# service vsftpd restart
    
    #由于指定这段端口范围,firewall也要把相应的端口打开
    [root@localhost ~]# firewall-cmd --zone=public --add-port=30000-30999/tcp --permanent
    [root@localhost ~]# firewall-cmd --reload
    
    查看:
    [root@localhost ~]# firewall-cmd --list-ports
    80/tcp 21/tcp 30000-30999/tcp
    

    Centos7中vsftpd--530 Login incorrect. Login failed的一个解决办法

    # 查看对应的ftp用户所对应的主目录和登陆shell
    cat /etc/passwd
    # 发现ftpuser对应为/sbin/nologin
    ftpuser:x:1001:1001::/home/ftpuser:/sbin/nologin
    
    # 修改
    vim /etc/shells
    # 在末尾处添加/sbin/nologin
    /bin/sh
    /bin/bash
    /usr/bin/sh
    /usr/bin/bash
    /bin/tcsh
    /bin/csh
    /sbin/nologin
    
    # 之后再登陆可能会报
    vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot
    # 在vsftpd.conf中新增allow_writeable_chroot=YES配置
    vim /etc/vsftpd/vsftpd.conf
    allow_writeable_chroot=YES
    # 重新启动服务
    systemctl restart vsftpd.service
    

    代码测试:

    package com.startest;
    
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTP;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    public class test {
        public static void main(String[] args) throws IOException {
            FTPClient ftpClient = new FTPClient();
            ftpClient.connect("192.168.64.128");
            boolean res = ftpClient.login("username", "password");
            FileInputStream inputStream = new FileInputStream(new File("F:\cat.jpeg"));
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            ftpClient.storeFile("cat.jpeg", inputStream);
            inputStream.close();
            if (ftpClient.logout()) {
                System.out.println("成功!");
            } else {
                System.out.println("失败!");
            }
        }
    }
    

    注意:如果使用工具连接或代码访问时连接很慢,读目录也很慢,则可以修改配置:reverse_lookup_enable=NO ,表示不查找dns服务器

    附录一:vsdftp相关命令

    # 启动
    service vsftpd start
    # 查看启动端口
    netstat -nltp|grep vsftpd
    # 重新启动vsftpd服务
    service vsftpd restart
    
    # 设置开机启动
    systemctl enable vsftpd.service
    # 查看开机启动项命令
    systemctl list-unit-files
    # 启动vsftpd服务
    systemctl start vsftpd.service
    # 停止vsftpd服务
    systemctl stop vsftpd.service
    # 查看状态
    systemctl status vsftpd.service
    # 重启vsftpd服务
    systemctl restart vsftpd.service
    

    附录二:防火墙相关命令

    # 查看防火墙状态:
    firewall-cmd --state 
    # 启动防火墙
    systemctl start firewalld
    # 关闭防火墙
    systemctl stop firewalld
    # 检查防火墙开放的端口
    firewall-cmd --permanent --zone=public --list-ports
    # 开放一个新的端口
    firewall-cmd --zone=public --add-port=8080/tcp --permanent
    # 重启防火墙
    firewall-cmd --reload
    # 验证新增加端口是否生效
    firewall-cmd --zone=public --query-port=8080/tcp
    # 防火墙开机自启动
    systemctl enable firewalld.service
    # 防火墙取消某一开放端口
    firewall-cmd --zone=public --remove-port=9200/tcp --permanent
    # 查看开放的端口号
    firewall-cmd --list-all
    
  • 相关阅读:
    visio画UML用例图没有include关系的解决方法
    个人推荐-几款好用的App
    win10锁屏壁纸文件夹Assets中无文件问题的解决方法
    云服务器搭建Jupyter-主要部分为配置服务器安全组+添加python3
    开通博客的第一天
    express学习(二)—— Post()类型和中间件
    自定义模块
    命名参数名(含*args , * *kw的区别)
    Python学习之中文注释问题
    Python学习之再议row_input
  • 原文地址:https://www.cnblogs.com/giswhw/p/14755317.html
Copyright © 2020-2023  润新知