0%

如何将FTP挂载在linux的本地磁盘并在挂载机上发布FTP服务.md

简介

需求是这样:客户公司对我们开发了一台FTP服务器以供我们上传数据回流给客户,但是客户为了安全原因只对我们开放了固定一台服务器才能进行FTP登录,由于想偷懒,也为了加快该功能的上线使用,所以思考时候能将FTP类似像NFS一样挂载在linux的本地,然后再在我们的服务器上开放一个FTP服务往挂载的客户FTP的目录上写入文件,这里使用的是Centos 7.5

需要的模块

FTP挂载

使用curlftpfs来将来远程FTP目录到本地

FTP服务

vsftp

安装过程详解

挂载本地yum源

由于服务是在内网,无法使用外面的yum源,为了方便安装需要制作一个本地的yum源,在我们下载的ISO包下已经包含了大多数的常用软件(不包含curlftpfs和其一些依赖的组件),那么我们在使用yum去安装时就会去改ISO包中寻找时候有包含合适的软件

  • 挂载镜像,首先我们将我们的镜像上传到服务器,并且挂载在本地目录如

    1
    mount /tmp/CentOS-7-x86_64-DVD-1611.iso /test/iso
  • 然后我删除了默认的所有yum源,因为服务器是在内网不可能连接到外网,进入/etc/yum.repos.d/目录,删除该目录下所有文件

  • 创建新的yum源文件 local.repo 注意其后缀必须为repo,编辑以下内容,其中baseurl为你镜像挂载的目录,然后我们的本地yum源就完成了

    1
    2
    3
    4
    5
    [localrepo]
    name=localrepo
    baseurl=file:///test/iso
    enabled=1
    gpgcheck=0

安装curlftpfs

由于我的服务器无法连接外网,所以使用yum install curlftpfs无法安装,所以这里只能去下载其源码自行编译然后安装

源码下载地址

http://sourceforge.net/projects/curlftpfs/files/?source=navbar

接下来编译安装三部曲

1
2
3
./configure
make
make install

不幸缺少一些依赖

  • glib

    该包在CentOS 7.5中提供的镜像里并没有,所以老样子下载源码编译之

    http://ftp.acc.umu.se/pub/GNOME/sources/glib/

    然后一样执行

    1
    2
    3
    ./configure
    make
    make install

    接着继续编译curlftpfs,还会发现缺少fuse,FUSE使用镜像自带的yum源就可安装

    1
    yum install fuse-devel

    提示libcurl 缺失但是使用

    1
    rpm -qa |grep libcurl

发现其已经存在,在网上找了资料后使用自带yum源安装libcurl-devel后通过编译

接着将远程FTP服务挂载到本地,并且授权所有用户可以访问,其中uid和gid可使用cat /etc/password |grep 用户,实际过程中需要先进行目录绑定才能开启FTP服务器

1
curlftpfs –o rw,allow_other,uid=0,gid=0 ftp://username:password@192.168.1.1 /ftp

部署本地FTP

目前已经完成远程FTP挂载到本地,那么为了让使用则能够上传文件到映射的目录,我又在本地开放了一个目录,将其的目录地址映射到之前远程FTP目录的地址

vsftpd,此软件使用镜像中自带yum源即可安装

其中安装教程依照如下所示

https://www.linuxprobe.com/linux-ftpserver.html

安装完成后,本来想将用户的权限规定到特定目录,且不能切换根目录,所以在配置文件中加入如下配置

1
2
3
chroot_local_user=YES   # 用户不能跳出根目录
allow_writeable_chroot=YES #在新版本中必须要加,否则在开启chroot_local_user参数后无法进行账号密码验证
local_root=/ftp #指定根目录地址

但我们开启FTP服务后,发现我们在使用FTP服务进行登录时找不到之前我们FTP映射的目录

接着在控制台执行,然后就能看到目录了

1
2
setsebool allow_ftpd_full_access 1
setsebool allow_ftpd_use_cifs 1

大坑

本人下载最新的0.9.2版本,在挂载后,写入文件一直出现I/O错误,在找了大量资料后,重新安装 0.9.1版本并且参数中加入direct_io后解决

1
curlftpfs -o codepage=gbk,rw,allow_other,uid=1001,gid=1001,direct_io ftp://password@ip:port  /file