本文轉載自 Leon 的網誌
有時候還是需要 FTP 這種老派的服務,總之就是要給它架起來!
搭配的系統是 Ubuntu 18.04 LTS,提供 FTP 服務的是 pure-ftpd,當初在調查 FTP daemon 的時候比較常看到別人是選用 vsftpd,可是設定好像有點複雜,最後找到 pure-ftpd 感覺比較簡單就挑它了!
本文單純就是架一台機台起來然後讓它提供 FTP 服務,不會涉及到 AWS S3。另外本文假設讀者已經懂得基本的 Linux 操作及 AWS 操作,故也不會講怎麼開 AWS / EC2 / IP / SSH / Cloud9 等主題。
在架設前需要了解一些 FTP 的基礎知識,特別是被動式 FTP(Passive FTP)的基本知識。由於 EC2 只認得自己的 Private IP,不認得自己的 Public IP,所以須強制指定它送出的 IP 設成 AWS Public IP,不然客戶端會無法正常使用。
安裝 pure-ftpd
ubuntu$ sudo apt update
ubuntu$ sudo apt install pure-ftpd
確認 pure-ftpd 正常運作
ubuntu$ service pure-ftpd status
應該會看到「Active: active (running)」的字樣,表示正常運作中。
設定 pure-ftpd
pure-ftpd 的設定都放在 /etc/pure-ftpd/conf/ 內,每個檔名代表一個設定項目,檔案的內容為該項目的設定值,通常為 yes 或 no 或 IP 或數字。完整的設定在 pure-ftpd 的文件內,你可以選擇花五個小時把它看完或者直接跟我下面的設定,有其它需求再問 Google 或 StackOverflow。
檔名 | 內容 | 說明 |
---|---|---|
NoAnonymous | yes | 禁止匿名登入 |
UnixAuthentication | yes | 直接用系統帳號作為 FTP 認證帳密 |
DisplayDotFiles | no | 不顯示隱藏檔 |
ForcePassiveIP | AWS Elastic IP | 強迫對客戶端回覆 AWS Public IP |
PassivePortRange | 30000 - 5000 | 被動模式可使用的 port 範圍 |
ChrootEveryone | yes | 只允許 FTP 用戶存取自己的家目錄 |
TrustedGID | 27 | 開放讓 GID = 27 的成員讀取所有目錄(大權限) |
設定 AWS 安全組(防火牆)
有幾個 port 必須打開才能夠提供服務,標準的 FTP 通訊 port 21 及前面指定的 port 30000 – 50000,以上這兩組 port 要到 AWS 安全組那邊去開放入站。
建 FTP 帳戶與群組
在建立之前,我們的計畫是不讓這些 FTP 用戶從 login 登入,只讓他們從 FTP 登入,所以要把 nologin 加入系統的 shell 清單內,並指定這些用戶使用 nologin。
系統的 shells 檔案在 /etc/shells,編輯它並在最後一行加入 /usr/sbin/nologin。
開始建帳戶與群組:
ubuntu$ sudo groupadd ftp
ubuntu$ sudo useradd ftp001 -g ftp
ubuntu$ sudo passwd ftp001
Enter new UNIX password: ftp001password
幫 ftp001 建家目錄並設定權限:
ubuntu$ sudo mkdir /home/ftp001
ubuntu$ sudo chown -R ftp001:ftp /home/ftp001
幫 ftp001 設 nologin:
ubuntu$ sudo chsh ftp001
Login Shell [/bin/bash]: /usr/sbin/nologin
這樣 ftp001 就設定好了,本節幾個步驟可以寫成 shell script 方便日後使用。