美文网首页
linux下安装FTP服务

linux下安装FTP服务

作者: 先生_吕 | 来源:发表于2017-09-27 18:59 被阅读34次

    FTP简述

    FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。它需要依赖于FTP服务器(支持FTP协议的服务器就是FTP服务器)。其传输方式有两种:ASCII传输方式、二进制传输模式。

    安装

    在网上查了查,FTP的安装都是用命令安装,这就要求你的服务器有网络。如果是个人虚拟机没有网,可以修改网络模式为net模式,ip改为自动模式(Automatic)即可

    1、确认是否安装

    pgrep vsftpd
    
    2017-09-27_181356.png

    2、安装

    yum install vsftpd
    
    2017-09-27_181450.png

    3、启动 停止 重启 卸载

    systemctl start vsftpd.service#启动
    systemctl status vsftpd.service#重启
    systemctl stop vsftpd.service#停止 
    
    
    /sbin/service vsftpd start
    /sbin/service vsftpd restart
    /sbin/service vsftpd stop
    
    
    rpm -e vsftpd# 卸载
    
    2017-09-27_181726.png

    4、关闭防火墙

    service iptables stop
    

    5、修改配置
    在修改配置之前,我们先看看ftp有哪些配置,ftp的配置在/etc/vsftpd/下

    2017-09-27_182234.png

    vsftpd的配置,配置文件中限定了vsftpd用户连接控制配置。
    (1):vsftpd.ftpusers:位于/etc/vsftpd目录下。它指定了哪些用户账户不能访问FTP服务器,例如root等。
    (2):vsftpd.user_list:位于/etc/vsftpd目录下。该文件里的用户账户在默认情况下也不能访问FTP服务器,仅当vsftpd .conf配置文件里启用userlist_enable=NO选项时才允许访问。
    (3):vsftpd.conf:位于/etc/vsftpd目录下。来自定义用户登录控制、用户权限控制、超时设置、服务器功能选项、服务器性能选项、服务器响应消息等FTP服务器的配置。

    anonymous_enable=NO            #禁止匿名
    local_enable=YES                       #允许本地登录
    write_enable=YES                       #允许写,如需上传,则必须
    llocal_umask=027                        #将上传文件的权限设置为:777-local_umask
    anon_upload_enable=YES          #允许虚拟用户和匿名用户上传
    anon_other_write_enable=YES #允许虚拟用户和匿名用户修改文件名和删除文件
    dirmessage_enable=YES           
    xferlog_enable=YES                      #打开日志记录
    connect_from_port_20=YES
    xferlog_file=/var/log/vsftpd.log     #日志存放位置
    xferlog_std_format=YES              #标准日志格式
    idle_session_timeout=600        #空闲连接超时
    data_connection_timeout=120
    ftpd_banner=Welcome to ChinaRise FTP service       #欢迎信息
    
    chroot_local_user=NO              
    chroot_list_enable=YES
    #以上两行将虚拟用户限制在其目录下,不能访问其他目录,或者直接用                            
    chroot_local_user=YES                               
    
    listen=yes               #监听/被动模式
    listen_port=21        #监听端口
    
    chroot_list_file=/etc/vsftpd/vsftpd.chroot_list      #虚拟用户名单保存在文件/etc/vsftpd/vsftpd.chroot_list 中
    user_config_dir=/etc/vsftpd/vsftpd_user_conf  #每个虚拟用户名的更加详细的培植保存在/etc/vsftpd/vsftpd_user_conf 中
    

    注意
    这里ftpusers和user_list的限制用户列表,通常我们自己本地测试时都用root登陆,所以切记注掉这两个文件中的root(LZ在这被坑了许久)

    6、设置selinux

    vim /etc/selinux/config
    
      #SELINUX=enforcing #注释掉
      #SELINUXTYPE=targeted #注释掉
      SELINUX=disabled #增加
    
    2017-09-27_182724.png

    7、关闭selinux

    setenforce 0
    

    8、用winSPC链接

    2017-09-27_183248.png

    这里注意,ftp默认有两个端口20和21,20端口为数据传输端口,21端口为链接控制端口

    java操作ftp

    准备jar包
    commons-net-1.4.1.jar
    jakarta-oro-2.0.8.jar
    log4j-1.2.17.jar

    FtpInfo.java

    /**
     * ClassName: FtpInfo
     * @author lvfang
     * @Desc: TODO
     * @date 2017-9-27
     */
    public class FtpInfo {
    
        //主机ip、端口
        private String host;
        private Integer port;
        //用户名、密码
        private String username;
        private String password;
        //基础路径、 文件路径、 文件名
        private String basePath;
        private String filePath;
        private String filename;
    
        private String localPath;//下载后保存到本地的路径 
        
        public FtpInfo(){};
        
        //连接对应构造函数
        public FtpInfo(String host,Integer port,String username,String password){
            this.host = host;
            this.port = port;
            this.username = username;
            this.password = password;
        };
        //上传文件对应构造函数
        public FtpInfo(String host,Integer port,String username,String password,String basePath,String filePath,String filename){
            this.host = host;
            this.port = port;
            this.username = username;
            this.password = password;
            this.basePath = basePath;
            this.filePath = filePath;
            this.filename = filename;
        };
        
        //下载文件对应构造函数
        public FtpInfo(String host,Integer port,String username,String password,String basePath,String filePath,String filename,String localPath){
            this.host = host;
            this.port = port;
            this.username = username;
            this.password = password;
            this.basePath = basePath;
            this.filePath = filePath;
            this.filename = filename;
            this.localPath = localPath;
        };
        
        //getter   setter方法
    }
    

    FtpUtil.java

    /**
     * ClassName: FtpUtil
     * @author lvfang
     * @Desc: TODO
     * @date 2017-9-28
     */
    public class FtpUtil {
    
        private static FTPClient ftp;
    
        private static FtpInfo ftpInfo = null;
    
        /**
         * Description: 上传文件
         * 
         * @param f.host
         *            FTP服务器hostname
         * @param f.port
         *            FTP服务器端口
         * @param f.username
         *            FTP登录账号
         * @param f.password
         *            FTP登录密码
         * @param f.basePath
         *            FTP服务器基础目录
         * @param f.filePath
         *            FTP服务器文件存放路径。例如分日期存放:/2017/09/28。文件的路径为basePath+filePath
         * @param f.filename
         *            上传到FTP服务器上的文件名
         * @param input
         *            输入流
         * @return 成功返回true,否则返回false
         */
        public static boolean uploadFile(FtpInfo ftpInfo, InputStream input) {
            boolean result = false;
            ftp = new FTPClient();
            try {
                int reply;
                ftp.connect(ftpInfo.getHost(), ftpInfo.getPort());// 连接FTP服务器
                // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
                ftp.login(ftpInfo.getUsername(), ftpInfo.getPassword());// 登录
                reply = ftp.getReplyCode();
                if (!FTPReply.isPositiveCompletion(reply)) {
                    ftp.disconnect();
                    return result;
                }
                // 切换到上传目录
                if (!ftp.changeWorkingDirectory(ftpInfo.getBasePath()
                        + ftpInfo.getFilePath())) {
                    // 如果目录不存在创建目录
                    String[] dirs = ftpInfo.getFilePath().split("/");
                    String tempPath = ftpInfo.getBasePath();
                    for (String dir : dirs) {
                        if (null == dir || "".equals(dir))
                            continue;
                        tempPath += "/" + dir;
                        if (!ftp.changeWorkingDirectory(tempPath)) {
                            if (!ftp.makeDirectory(tempPath)) {
                                return result;
                            } else {
                                ftp.changeWorkingDirectory(tempPath);
                            }
                        }
                    }
                }
                // 设置上传文件的类型为二进制类型
                ftp.setFileType(FTP.BINARY_FILE_TYPE);
                ftp.enterLocalPassiveMode();//不加这一次会出现无法上传
                // 上传文件
                if (!ftp.storeFile(ftpInfo.getFilename(), input)) {
                    return result;
                }
                input.close();
                ftp.logout();
                result = true;
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (ftp.isConnected()) {
                    try {
                        ftp.disconnect();
                    } catch (IOException ioe) {
                    }
                }
            }
            return result;
        }
    
        /**
         * Description: 下载文件
         * 
         * @param f.host
         *            FTP服务器hostname
         * @param f.port
         *            FTP服务器端口
         * @param f.username
         *            FTP登录账号
         * @param f.password
         *            FTP登录密码
         * @param f.basePath
         *            基础路径
         * @param f.filePath
         *            文件路径
         * @param fileName
         *            要下载的文件名
         * @param localPath
         *            下载后保存到本地的路径
         * @return
         */
        public static boolean downloadFile(FtpInfo ftpInfo) {
            boolean result = false;
            ftp = new FTPClient();
            try {
                int reply;
                ftp.connect(ftpInfo.getHost(), ftpInfo.getPort());
                // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
                ftp.login(ftpInfo.getUsername(), ftpInfo.getPassword());// 登录
                reply = ftp.getReplyCode();
                if (!FTPReply.isPositiveCompletion(reply)) {
                    ftp.disconnect();
                    return result;
                }
                ftp.changeWorkingDirectory(ftpInfo.getBasePath() + ftpInfo.getFilePath());// 转移到FTP服务器目录
                ftp.setControlEncoding("GBK");
                //ftp.enterLocalPassiveMode();//不加这一次会出现无法上传
                FTPFile[] fs = ftp.listFiles();
                for (FTPFile ff : fs) {
                    if (ff.getName().equals(ftpInfo.getFilename())) {
                        File localFile = new File(ftpInfo.getLocalPath() + "/"+ ff.getName());
    
                        OutputStream is = new FileOutputStream(localFile);
                        ftp.retrieveFile(ff.getName(), is);
                        is.close();
                    }
                }
    
                ftp.logout();
                result = true;
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (ftp.isConnected()) {
                    try {
                        ftp.disconnect();
                    } catch (IOException ioe) {
                    }
                }
            }
            return result;
        }
    
        /**
         * 测试连接
         * 
         * @param f.host、f.port、f.username、f.password           
         * @return
         * @throws Exception
         */
        public static boolean connectFtp(FtpInfo ftpInfo) throws Exception {
            ftp = new FTPClient();
            boolean flag = false;
            int reply;
            if (ftpInfo.getPort() == null) {
                ftp.connect(ftpInfo.getHost(), 21);
            } else {
                ftp.connect(ftpInfo.getHost(), ftpInfo.getPort());
            }
            ftp.login(ftpInfo.getUsername(), ftpInfo.getPassword());
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return flag;
            }
            // 转入当前目录工作
            // ftp.changeWorkingDirectory(ftpInfo.getBasePath()+ftpInfo.getFilePath());
            flag = true;
            return flag;
        }
    
        /**
         * 关闭连接
         */
        public static void closeFtp() {
            if (ftp != null && ftp.isConnected()) {
                try {
                    ftp.logout();
                    ftp.disconnect();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        public static void main(String[] args) throws Exception {
    
            // 测试连接
            // FtpInfo ftpInfo = new
            // FtpInfo("192.168.**.***",21,"root","密码");
            // System.out.println(FtpUtil.connectFtp(ftpInfo));;
    
            // 上传测试
            // FileInputStream in=new FileInputStream(new File("D:\\03.png"));
            // ftpInfo = new
            // FtpInfo("192.168.**.***",21,"root","密码","/home/images","/2017/09/28","05.jpg");
            // System.out.println(FtpUtil.uploadFile(ftpInfo, in));
    
            // 下载
            ftpInfo = new FtpInfo("192.168.**.***", 21, "root", "密码","/home/images", "/2017/09/28", "05.jpg", "d:/");
            System.out.println(FtpUtil.downloadFile(ftpInfo));
        }
    }
    
    
    2017-09-27_185757.png

    相关文章:

    http://blog.csdn.net/wantaway314/article/details/52584531
    http://www.cnblogs.com/zc123/p/6394470.html
    http://www.cnblogs.com/huzi007/p/4236150.html

    相关文章

      网友评论

          本文标题:linux下安装FTP服务

          本文链接:https://www.haomeiwen.com/subject/ldauextx.html