天天看點

如何利用雲存儲網關搭建SFTP伺服器通路OSS存儲

背景

雲存儲檔案網關是阿裡雲提供的存儲網關産品,它可以滿足使用者通過NFS或Samba等協定通路OSS對象存儲資料的需求。而通過簡單的配置,我們也可以基于檔案網關來配置一台FTP伺服器,讓使用者通過FTP來通路OSS中的資料,實作用FTP用戶端上傳和下載下傳同步OSS bucket中存儲的資料。

本文将介紹在linux伺服器上如何通過在雲存儲網關共享上搭建FTP伺服器來實作對OSS内資料的分發與共享。

準備工作

添加NFS共享

(注:關于如何開通及建立雲存儲網關,大家可以參考

如何在Linux上挂載OSS Bucket

這篇文章)

首先,通過雲存儲檔案網關管理控制台,為想要通過FTP通路的Bucket添加一個新的NFS共享(如果不需要共享整個bucket,請在建立共享時勾選子目錄并填入要共享的子目錄路徑):

如何利用雲存儲網關搭建SFTP伺服器通路OSS存儲

在配置共享時,如果有很多資料需要從OSS反向同步到檔案網關的話,建議打開極速同步功能,這樣可以保證我們在OSS中上傳的檔案及時同步到檔案網關中。關于極速同步功能,可以參考

檔案網關秒級同步OSS變更對象初體驗
如何利用雲存儲網關搭建SFTP伺服器通路OSS存儲

挂載共享目錄

接下來,我們在linux伺服器上建立/ftp目錄,并将新建立的nfs共享挂載到/ftp目錄下:

# 1. 建立ftp伺服器使用的目錄
[root@csg ~]# mkdir -p /var/ftp/oss-bucket

# 2. 使用showmount 指令檢視新建立的網關共享
[root@csg ~]# showmount -e <網關IP位址>

# 3. 挂載共享目錄到/var/ftp/oss-bucket目錄下
[root@csg ~]# mount -t nfs <網關IP位址>:<共享路徑> /var/ftp/oss-bucket

# 4. 檢視目錄挂載狀态
[root@csg ~]# df -h /var/ftp/oss-bucket           

搭建ftp伺服器

1. 安裝ftp服務

我們以centos 為例,安裝ftp服務vsftpd:

[root@csg ~]# yum -y install vsftpd           

2. 添加ftp使用者

[root@csg ~]# useradd ftpuser1
[root@csg ~]# passwd ftpuser1           

3. 配置vsftpd

[root@csg ~]# vi /etc/vsftpd/vsftpd.conf
## 正常配置
# line 12: 關閉匿名使用者登陸
anonymous_enable=NO
# line 82,83: 允許ascii模式通路
ascii_upload_enable=YES
ascii_download_enable=YES
# line 100, 101: 使能chroot
chroot_local_user=YES
chroot_list_enable=YES
# line 103: 指定chroot使用者清單配置檔案路徑
chroot_list_file=/etc/vsftpd/chroot_list
# line 109: 使能ls recurse
ls_recurse_enable=YES
# line 114: 如果使用ECS IPV4位址,修改下面一行并按需關閉IPV6
listen=YES
# line 123: 
listen_ipv6=NO

# 添加下面幾行配置到配置檔案中
# 修改使用的chroot目錄,我們配置為挂載了檔案網關NFS共享的路徑 (如果不指定的話,會預設使用ftp使用者的home目錄而不是NFS挂載目錄)
local_root=/var/ftp/oss-bucket

# 使用本地時間
use_localtime=YES
# 關閉seccomp filter
seccomp_sandbox=NO

# 指定用戶端passive模式通路端口,可自由指定
pasv_min_port=12001
pasv_max_port=12005
           
# 添加chroot允許使用者
[root@csg ~]# vi /etc/vsftpd/chroot_list
# 添加允許chroot的ftp使用者
ftpuser1           

啟動vsftpd服務

[root@csg ~]# systemctl start vsftpd
[root@csg ~]# systemctl enable vsftpd           

如果開啟了防火牆,需要添加規則允許ftp端口的通路:

[root@csg ~]# firewall-cmd --add-service=ftp --permanent
success
[root@csg ~]# firewall-cmd --reload
success           

如果開啟了selinux,需要允許ftp通路

[root@csg ~]# setsebool -P ftpd_full_access on           

通路ftp/sftp伺服器

配置完成後,我們就可以使用ftp用戶端來通路部署好的ftp伺服器了,我們以fileZilla用戶端為例,使用ftpuser1這個使用者登陸ftp伺服器,并嘗試上傳一個f檔案到ftp伺服器:

如何利用雲存儲網關搭建SFTP伺服器通路OSS存儲

圖: 登陸并上傳檔案到ftp server

上傳成功後,登陸到OSS控制台,到雲存儲網關配置共享的bucket對應的目錄下檢視,可以檢視到剛剛上傳的檔案,實作了通過FTP用戶端向OSS上傳的功能:

如何利用雲存儲網關搭建SFTP伺服器通路OSS存儲

圖:在OSS控制台通路ftp client新上傳的檔案

同樣,在檔案網關打開極速同步或反向同步功能後,檔案網關也可以反向同步OSS上的資料更新,讓FTP的用戶端擷取到OSS上新上傳的檔案清單,下載下傳OSS中新上傳的檔案。

注意事項

有些使用者會使用Linux中預設的SFTP服務作為SFTP服務端,當使用WinSCP或其它支援斷點續傳的SFTP用戶端上傳到伺服器上的雲存儲網關NFS共享目錄時,上傳大于100K會遇到檔案失敗的錯誤:

如何利用雲存儲網關搭建SFTP伺服器通路OSS存儲

這是由于WinSCP 在斷點續傳模式下,會首先生成上傳檔案.filepart的檔案,上傳完成後再重命名回真正的目的檔案導緻上傳失敗。這種情況下,使用者可以通過關閉WinSCP的斷點續傳選項(選項-傳輸-Endurance-開啟斷點續傳/傳輸到臨時檔案名-禁用)來規避該問題:

如何利用雲存儲網關搭建SFTP伺服器通路OSS存儲

總結

通過基于雲存儲網關的NFS共享搭建FTP伺服器,可以讓使用者使用ftp通路OSS中的資料,實作用FTP用戶端上傳資料到OSS和下載下傳OSS中的資料的功能,讓檔案共享與分發更加的友善。

繼續閱讀