Docker 使用 Pure-FTPd 啟動 FTP Server

最近公司因為使用者需求需要架設 FTP Server,而現在使用 Docker 架設其實非常簡單就一行指令就可以完成了,我們目前使用的是 Pure-FTPd 而 Docker 直接使用 Docker Hub

啟動 Pure-FTPd

簡單的啟動方法其實很簡單只需要一行指令就可以啟動它了
docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST=localhost" stilliard/pure-ftpd

啟動 Pure-FTPd 使用 SSL

轉 pure-ftpd.pem 錯誤

不過在使用上要用 TLS 遇到了一點問題,我目前手上有的 SSL certificate 只有 pfx 檔案,所以需要轉欓,一開始我直接使用 openssl pkcs12 把 pfx 轉 pem,再放入 pure-ftpd 取用會失敗,其實我也不太知道為什麼

openssl pkcs12 -in file.pfx -out pure-ftpd.pem -nodes

分開轉 pure-ftpd-key.pem 與 pure-ftpd-cert.pem

後來我分開轉 cert 與 key 就正常了真是讓我匪夷所思,不過可以正常執行就好了

openssl pkcs12 -in server.pfx -out pure-ftpd-key.pem -nocerts -nodes
openssl pkcs12 -in server.pfx -out pure-ftpd-cert.pem -nokeys -clcerts

啟動 Pure-FTPd

啟動 Pure-FTPd SSL 記得更換 ssl 資料夾(/folder_on_disk/private)把它掛載到對應的地方

docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e ADDED_FLAGS="--tls=2" -e "PUBLICHOST=localhost" -v /folder_on_disk/private:/etc/ssl/private stilliard/pure-ftpd

查看 run.sh

我後來去看了一下腳本發現它啟動的時候會去檢查 pure-ftpd-key.pem 與 pure-ftpd-cert.pem 再把它合併,所以應該是我哪裡有做錯吧。不過現在可以用就好了 ~

# If TLS flag is set and cert and key are given are given as two files, merge them into one cert
if [ -e /etc/ssl/private/pure-ftpd-cert.pem ] && [ -e /etc/ssl/private/pure-ftpd-key.pem ] && [[ "$PURE_FTPD_FLAGS" == *"--tls"* ]]
then
    echo "Merging certificate and key"
    cat /etc/ssl/private/pure-ftpd-cert.pem /etc/ssl/private/pure-ftpd-key.pem > /etc/ssl/private/pure-ftpd.pem
fi

參考資料:

  • https://trustzone.com/knowledge-base/split-pfx-file-into-pem-key-files-openss-windows-linux/