最近甲方需要批量下載服務器中已上傳的文件,由於當前的文件處理並沒有使用s3單獨處理,所以需要在服務器上創建一個ftp服務,供用户使用ftp客户端完成下載。
FreeBSD中的Pure-FTPd是款小巧、使用簡單且安全的ftp服務,我們在此安裝它以提供ftp服務
安裝
安裝的過程非常簡單。
切換到root用户後,先使用pkg update -f更新下pkg,然後使用pkg install pure-ftpd進行安裝,當出現是先安裝提供的時候,輸入y後按回車繼續。
安裝完成後,得到的提示如下:
Message from pure-ftpd-1.0.51:
--
Now you need to examine /usr/local/share/examples/pure-ftpd/pam.d/pure-ftpd
and add the relevant PAM configuration lines to your /etc/pam.conf file.
If you defined call upload script in pure-ftpd config define corresponding
vars in rc.conf. pure-ftpd will not listen TCP socket without it.
See FAQ: https://github.com/jedisct1/pure-ftpd/blob/master/FAQ
上面的提示在説:我們需要檢查 /usr/local/share/examples/pure-ftpd/pam.d/pure-ftpd 文件,並編輯 /etc/pam.conf 來完成權限配置(當前場景並不需要更復雜的配置,此處我們可以忽略)。
這裏有個專有名詞PAM,代表 Privileged Access Management 簡單翻譯即為:權限管理。
更多的信息參考 https://github.com/jedisct1/pure-ftpd/blob/master/FAQ
配置權限
安裝完成後,我們參考上面給出的github地址的信息進行權限配置。
首先添加一個用户組:pw group add ftpgroup, 然後在這個用户組中添加一個用户: pw user add ftpuser -g ftpgroup。
最後便可以使用prue-pw命令來添加prue管理的ftp用户了,比如我添加一個readonly用户,並且限制其下載的帶寬為10Mbit/s,並且指定其對應的目錄為:/mengyunzhi/app/api/attachment,則可以執行以下命令:
# pure-pw useradd readonly -m -u ftpuser -t 10M -d /mengyunzhi/app/api/attachment
上述命令中 -m 的作用是將新用户信息寫入 /usr/local/etc/pureftpd.passwd 的同時,將 /usr/local/etc/pureftpd.passwd 編譯為 /usr/local/etc/pureftpd.pdb , pureftpd.pdb文件為pure-ftp的權限驗證文件。
然後輸入兩次密碼,一個可用的ftp用户便創建好了。
啓動服務
$ /usr/local/sbin/pure-ftpd -lpuredb:/usr/local/etc/pureftpd.pdb
lpuredb:/usr/local/etc/pureftpd.pdb指認證的方式為文件,該認證文件的位置位於:/usr/local/etc/pureftpd.pdb。除了使用文件做為驗證方式外,pureftpd還支持mysql,pgsql和ldap。
此時便可以使用ftp工具進行連接測試了:
測試沒有問題後,使用ctrl+c終止前面的命令,然後重新執行:
/usr/local/sbin/pure-ftpd -lpuredb:/usr/local/etc/pureftpd.pdb -H -B
這樣ftp便可以在後台中運行,即使關閉了當前的shell該ftp仍然會正常的運行而不會隨着shell的關閉而關閉了。