用docker架FTP vsftpd on docker

如果你需要很迅速的架起一個FTP伺服器,docker確實是個很好的方式

一條指令就完成伺服器建立以及使用者設定

這次遇到的狀況是公司換了新的NAS之後,原本NAS上的FTP卻無法讓傳真機連接

原本公司的傳真機跟印表機都可以連線到NAS,收到傳真後直接透過SMB的方式將檔案轉存,印表機也是可以直接掃描儲存到NAS上

而這次更換了NAS硬體後印表機的部分連線沒有問題,傳真機卻掛了

SMB無法認證,FTP無法建立檔案,經過了一天從設定值中找不到任何解法後我決定轉用docker試著來處理這個問題

概念是 : 透過QNAP的docker station架設FTP後將原本儲存傳真的資料夾綁定到docker FTP的根目錄中

參考連結 :

https://hub.docker.com/r/fauria/vsftpd/

https://www.5yun.org/17060.html

https://devanswers.co/vsftp-default-permissions-uploaded-files-folders-600/

如果你還沒有閱讀過以下文章,請先閱讀

MAC安裝docker

Reverse Proxy on Nginx docker 使用QNAP Container Station

1. vsftpd docker參數設定

vsftp有許多可設定的參數,先整理幾個比較重要的參數

參數 用途 預設值
FTP_USER 可登入使用者 亂數
FTP_PASS 登入使用者密碼 亂數
PASV_MIN_PORT 被動模式port最小值 21100
PASV_MAX_PORT 被動模式port最大值 21110
LOCAL_UMASK 檔案權限遮罩 077

上面幾個參數是本次設定有用到的,其他參數可以上docker hub參考描述

2. 啟動FTP

所以,基於以上幾個參數我們就可以很輕易地透過下列使令來啟動FTP

指令的部分跟containser station的畫面我就不再截圖說明,-v 就是container station中的共用資料夾,-e 就是container station中的環境變數,而-p 則可以在命令中直接設定

另外,值得一提的是 -v參數,/home/vsftpd/ 資料夾是vsftp給使用者的預設根目錄,但是在這層目錄下還會區分不同的使用者,因此fax使用者的根目錄就是 /home/vsftpd/fax,所以我們必須把這個資料夾映射到原本儲存傳真資料的資料夾中

就這樣子,傳真機已經順利連線到這個新架設好的FTP上,並且順利將檔案存入,但是緊接著問題還是來了

3. 設定檔案權限

按照以上設定好的方式,上傳的所有檔案權限都會是600,導致除了admin管理員以外其他NAS上的使用這會沒有辦法存取檔案

當然如果你只有給個人使用那有枚有這樣子的問提,要解決這個問題就必須將上傳的檔案權限修改為755才能讓其他非擁有者也可以存取

所以,我們講指令改成以下

將 LOCAL_UMASK設定為022即可