简介
需求是这样:客户公司对我们开发了一台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 | ./configure |
不幸缺少一些依赖
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 | chroot_local_user=YES # 用户不能跳出根目录 |
但我们开启FTP服务后,发现我们在使用FTP服务进行登录时找不到之前我们FTP映射的目录
接着在控制台执行,然后就能看到目录了
1 | setsebool allow_ftpd_full_access 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 |