linux 配置ftp服务

需求:定时远程上传文件,windows->linux

linux是一个云服务器,centos7

1:安装vsftpd

yum install vsftpd

2:设置开机启动服务
chkconfig vsftpd on

3:启动服务 
 service vsftpd start

4:防火墙端口打开

打开/etc/sysconfig/iptables文件

vi /etc/sysconfig/iptables

在REJECT行之前添加如下代码

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

保存和关闭文件,重启防火墙

service iptables restart

5:配置vsftpd 服务器

vi /etc/vsftpd/vsftpd.conf

将匿名登录关闭 anonymous_enable=NO

chroot_list_enable=YES //限制访问自身目录
# (default follows)
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list

编辑 vsftpd.chroot_list文件,将受限制的用户添加进去,每个用户名一行,(但实际上加了这个会很麻烦,所以没加),比如出现 500 OOPS: vsftpd: refusing to run with writable root inside chroot()

参考这个link:https://zhidao.baidu.com/question/1732079113433285347.html

6:添加ftp用户

useradd -d /home/test test

passwd oneuser

如果加错了,可以删掉这个用户

userdel test

7:修改文件夹所有者

chown test /home/test -R

如果还是不好使,改一下权限

chmod -R 777 /home/test

8:最后,别忘了重启服务

service vsftpd restart

通过java的FTPClient去连接时会出现各种错误,首先,用户名和密码,端口别搞错了,FTPClient的jar包可以选最高的版本

网上有FTPutil的代码,我也是拿来主义了,但是发现有bug,下面是自己测试过的代码,传单个文件,如果要传文件夹的话也很简单。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

public class FtpUtils {
        //ftp服务器地址
        public String hostname = "XXXX";
        //ftp服务器端口号默认为21
        public Integer port = 21 ;
        //ftp登录账号
        public String username = "XXX";
        //ftp登录密码
        public String password = "XXX";

        public FTPClient ftpClient = null;

        /**
         * 初始化ftp服务器
         */
        public void initFtpClient() {
            ftpClient = new FTPClient();
            ftpClient.setControlEncoding("utf-8");
            try {
                System.out.println("connecting...ftp服务器:"+this.hostname+":"+this.port);
                ftpClient.connect(hostname, port); //连接ftp服务器
                ftpClient.login(username, password); //登录ftp服务器
                int replyCode = ftpClient.getReplyCode(); //是否成功登录服务器
                if(!FTPReply.isPositiveCompletion(replyCode)){
                    System.out.println("connect failed...ftp服务器:"+this.hostname+":"+this.port);
                }else{
                    System.out.println("connect successfu...ftp服务器:"+this.hostname+":"+this.port);
                }

            }catch (MalformedURLException e) {
               e.printStackTrace();
            }catch (IOException e) {
               e.printStackTrace();
            }
        }

        /**
        * 上传文件
        * @param pathname ftp服务保存地址
        * @param fileName 上传到ftp的文件名
        *  @param originfilename 待上传文件的名称(绝对地址) *
        * @return
        */
        public boolean uploadFile( String pathname, String fileName,String originfilename){
            boolean flag = false;
            InputStream inputStream = null;
            try{
                System.out.println("开始上传文件");
                inputStream = new FileInputStream(new File(originfilename));
                initFtpClient();
                ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
                ftpClient.setDataTimeout(60000);       //设置传输超时时间为60秒
                ftpClient.setConnectTimeout(60000);       //连接超时为60秒
                ftpClient.storeFile(fileName, inputStream);
                inputStream.close();
                ftpClient.logout();
                flag = true;
                System.out.println("上传文件成功");
            }catch (Exception e) {
                System.out.println("上传文件失败");
                e.printStackTrace();
            }finally{
                if(ftpClient.isConnected()){
                    try{
                        ftpClient.disconnect();
                    }catch(IOException e){
                        e.printStackTrace();
                    }
                }
                if(null != inputStream){
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return true;
        }
        /**
         * 上传文件
         * @param pathname ftp服务保存地址
         * @param fileName 上传到ftp的文件名
         * @param inputStream 输入文件流
         * @return
         */
        public boolean uploadFile( String pathname, String fileName,InputStream inputStream){
            boolean flag = false;
            try{
                System.out.println("开始上传文件");
                initFtpClient();
                ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
                CreateDirecroty(pathname);
                ftpClient.makeDirectory(pathname);
                ftpClient.changeWorkingDirectory(pathname);
                ftpClient.storeFile(fileName, inputStream);
                inputStream.close();
                ftpClient.logout();
                flag = true;
                System.out.println("上传文件成功");
            }catch (Exception e) {
                System.out.println("上传文件失败");
                e.printStackTrace();
            }finally{
                if(ftpClient.isConnected()){
                    try{
                        ftpClient.disconnect();
                    }catch(IOException e){
                        e.printStackTrace();
                    }
                }
                if(null != inputStream){
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return true;
        }
        //改变目录路径
         public boolean changeWorkingDirectory(String directory) {
                boolean flag = true;
                try {
                    flag = ftpClient.changeWorkingDirectory(directory);
                    if (flag) {
                      System.out.println("进入文件夹" + directory + " 成功!");

                    } else {
                        System.out.println("进入文件夹" + directory + " 失败!开始创建文件夹");
                    }
                } catch (IOException ioe) {
                    ioe.printStackTrace();
                }
                return flag;
            }

        //创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建
        public boolean CreateDirecroty(String remote) throws IOException {
            boolean success = true;
            String directory = remote + "/";
            // 如果远程目录不存在,则递归创建远程服务器目录
            if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(new String(directory))) {
                int start = 0;
                int end = 0;
                if (directory.startsWith("/")) {
                    start = 1;
                } else {
                    start = 0;
                }
                end = directory.indexOf("/", start);
                String path = "";
                String paths = "";
                while (true) {
                    String subDirectory = new String(remote.substring(start, end).getBytes("GBK"), "iso-8859-1");
                    path = path + "/" + subDirectory;
                    if (!existFile(path)) {
                        if (makeDirectory(subDirectory)) {
                            changeWorkingDirectory(subDirectory);
                        } else {
                            System.out.println("创建目录[" + subDirectory + "]失败");
                            changeWorkingDirectory(subDirectory);
                        }
                    } else {
                        changeWorkingDirectory(subDirectory);
                    }

                    paths = paths + "/" + subDirectory;
                    start = end + 1;
                    end = directory.indexOf("/", start);
                    // 检查所有目录是否创建完毕
                    if (end <= start) {
                        break;
                    }
                }
            }
            return success;
        }

      //判断ftp服务器文件是否存在
        public boolean existFile(String path) throws IOException {
                boolean flag = false;
                FTPFile[] ftpFileArr = ftpClient.listFiles(path);
                if (ftpFileArr.length > 0) {
                    flag = true;
                }
                return flag;
            }
        //创建目录
        public boolean makeDirectory(String dir) {
            boolean flag = true;
            try {
                flag = ftpClient.makeDirectory(dir);
                if (flag) {
                    System.out.println("创建文件夹" + dir + " 成功!");

                } else {
                    System.out.println("创建文件夹" + dir + " 失败!");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return flag;
        }

        /** * 下载文件 *
        * @param pathname FTP服务器文件目录 *
        * @param filename 文件名称 *
        * @param localpath 下载后的文件路径 *
        * @return */
        public  boolean downloadFile(String pathname, String filename, String localpath){
            boolean flag = false;
            OutputStream os=null;
            try {
                System.out.println("开始下载文件");
                initFtpClient();
                //切换FTP目录
                ftpClient.changeWorkingDirectory(pathname);
                FTPFile[] ftpFiles = ftpClient.listFiles();
                for(FTPFile file : ftpFiles){
                    if(filename.equalsIgnoreCase(file.getName())){
                        File localFile = new File(localpath + "/" + file.getName());
                        os = new FileOutputStream(localFile);
                        ftpClient.retrieveFile(file.getName(), os);
                        os.close();
                    }
                }
                ftpClient.logout();
                flag = true;
                System.out.println("下载文件成功");
            } catch (Exception e) {
                System.out.println("下载文件失败");
                e.printStackTrace();
            } finally{
                if(ftpClient.isConnected()){
                    try{
                        ftpClient.disconnect();
                    }catch(IOException e){
                        e.printStackTrace();
                    }
                }
                if(null != os){
                    try {
                        os.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return flag;
        }

        /** * 删除文件 *
        * @param pathname FTP服务器保存目录 *
        * @param filename 要删除的文件名称 *
        * @return */
        public boolean deleteFile(String pathname, String filename){
            boolean flag = false;
            try {
                System.out.println("开始删除文件");
                initFtpClient();
                //切换FTP目录
                ftpClient.changeWorkingDirectory(pathname);
                ftpClient.dele(filename);
                ftpClient.logout();
                flag = true;
                System.out.println("删除文件成功");
            } catch (Exception e) {
                System.out.println("删除文件失败");
                e.printStackTrace();
            } finally {
                if(ftpClient.isConnected()){
                    try{
                        ftpClient.disconnect();
                    }catch(IOException e){
                        e.printStackTrace();
                    }
                }
            }
            return flag;
        }

        public static void main(String[] args) {
            FtpUtils ftp =new FtpUtils();
            ftp.uploadFile("XXX", "XXX", "XXX");
            //ftp.downloadFile("ftpFile/data", "123.docx", "F://");
//            ftp.deleteFile("ftpFile/data", "123.docx");
            System.out.println("ok");
        }
}
chmod -R 777 /file

原文地址:https://www.cnblogs.com/marszhw/p/10759673.html

时间: 2024-11-09 00:38:45

linux 配置ftp服务的相关文章

2015-05-21 配置FTP服务

配置FTP服务 安装pure-ftpd 1. 下载软件 pure-ftpd 官网是 http://www.pureftpd.org/project/pure-ftpd 当前最新版本为1.0.36, 但阿铭不建议使用最新版本,最新版有可能有一些小bug. [[email protected] ~]# cd /usr/local/src/ [[email protected] src]# wget http://download.pureftpd.org/pub/pure-ftpd/releases

linux中FTP服务搭建详解--1.匿名与权限

实验环境:在redhat6.5中安装配置FTP服务,并使用一台win7系统访问验证. 理论: FTP连接方式     支持两种连接模式:主动模式(Port)和被动模式(Pasv),这两种模式都是针对数据链路进行的,与控制链路无关. 主动模式工作过程: 1.客户端从自己的一个任意端口(N > 1024)和FTP服务器的21端口建立控制链路2.然后客户端发出Port指令告诉服务器连接自己的N+1端口来建立一条数据通道3.当FTP服务器接到这一指令时,会使用20端口连接用户在Port指令中指定的端口号

linux配置vsftpd服务

linux配置vsftpd服务 1.下载 apt-get update apt-get install vsftpd 2.配置 用的全局配置项 listen=YES/NO:是否以独立运行的方式监听服务 listen_address=192.168.4.1:设置监听的 IP 地址 listen_port=21:设置监听 FTP 服务的端口号 write_enable=YES/NO:是否启用写入权限 download_enable=YES/NO:是否允许下载文件 userlist_enable=YE

linux配置vncserver服务

挨踢这么多年,几乎很少记录自己解决的问题,因为总感觉那些问题对于高手来说,都是小菜,所以碍于颜面,不好意思写! 后来想明白了,写下来,能帮助新手,又能帮自己做个记录,下次碰到同样问题,就不用百度google了-- 这篇就算***作吧,好了,言归正传-- 想连接某台linux服务器,方法很多,但是听说除了vnc,其他方法断开网络后,程序会中断运行,只是听说,具体是不是这样,我就不太清楚了,为了保险,还是就用vnc吧. 1.           安装vncserver 我安装linux系统的时候,没

RedHat 7配置FTP服务

在RedHat 7上安装配置FTP服务和RedHat6基本一致,本文是以系统盘自带的vsftpd配置FTP服务. 首先使用yum安装vsftpd:yum install vsftpd 创建两个目录,/data/ftpshare配置需登录服务且可读写,/data/ftppublic配置匿名登录但只读 编辑配置文件:vi /etc/vsftpd/vsftpd.conf,在末尾添加以下内容,指定默认的根目录以及匿名登录目录: 启动服务并设置服务开机运行 root登录FTP并创建文件夹,测试可读写 创建

&lt;Linux下FTP服务的搭建&gt;

默认安装好ftp软件包匿名用户是可以下载的.匿名以后可以上传:anon_upload_enable=YES# getsebool -a | grep ftpallow_ftpd_anon_write --> onchcon -t public_content_rw_t pubchmod 775 pubchgrp ftp pub 匿名用户可以创建目录:anon_mkdir_write_enable=YES 在创建的目录上传文件看不到.添加下面anon_world_readable_only=NO

linux配置nfs服务

简介: unix/linux系统一种远程文件目录共享的服务,可以把某一个远程的文件目录共享到本地,进而像操作本地文件一样,操作这个远程的目录. 例如:a主机作为服务端,共享出来test1这个目录,b主机作为客户端,b以其test2目录挂载a主机的test1目录,那么这个时候查看b主机的test2中的内容则会与a主机的test1中一样,对b主机test2目录的操作就是在操作a主机的test1目录(增删改查,当然要设置足够的权限). 注:我配置的时候,因为只有一台linux主机,所以这里服务端和客户

Linux SSH,FTP服务配置

CentOS-6.4-x86_64-minimal 0.网卡配置 参考:Linux系统\Centos没有网卡eth0配置文件怎么办? - http://jingyan.baidu.com/article/84b4f565cb7afa60f6da32d4.html 临时配置:ifconfig 设备名 IP地址 # ifconfig eth0 192.168.1.11 (设置后立即生效,不要重启网卡服务,否则又失效) 永久解决办法: 1)复制/etc/sysconfig/network-script

讲述一下自己在linux中配置ftp服务的经历

本人大二小白一名,从大一下学期就开始接触到linux,当时看到学校每次让我们下载资源都在一个ftp服务器中,感觉特别的高大上,所以自己就想什么时候自己能够拥有自己的ftp服务器,自己放一点东西进去,让别人访问. 那么,就从那时开始,就有了一系列的艰难旅程.... 要不然先不说经历了,就先直捅技术吧,最后在说经历,要不然有些人就懒得看这篇初级又傻傻的文章了. 小白,那就需要手把手的教,同时还要图文并茂. 第一步: 自己的linux必须是要有的,如果没有,而且你还不会装,那么就可以看一下小弟我以前的