Leon
Posted on October 20, 2021
有時候還是需要 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 方便日後使用。
Posted on October 20, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.