跳到主內容

Debian 11 安裝 vsftpd

  因最近有群友有這樣子的需求外加之前有架設過沒有記錄,因此隨便記錄一下

運行環境


  環境都是在 「Proxmox VE 」 虛擬系統上架設,都是以 「 LXC 」模式為主,除非有特殊狀況會告知使用 「 VM 」 模式

  • 系統環境: Debian 11

安裝或測試過程


  • 安裝 vsftpd 套件
apt install vsftpd
  • 備份設定檔
cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
  • 建立預設要存放的目錄
mkdir -p /home/ftp
  • 設定該目錄權限
chmod 777 /home/ftp
  • 設定設定檔 vim /etc/vsftpd.conf
# 全域性配置
# 本地系統使用者寫入許可權;
write_enable=YES

# 本地使用者建立檔案及目錄預設許可權掩碼;
local_umask=022

# 列印目錄顯示資訊,通常用於使用者第一次訪問目錄時,資訊提示;
dirmessage_enable=YES

# 啟用上傳/下載日誌記錄; 
xferlog_enable=YES

# 日誌檔案將根據xferlog的標準格式寫入;
xferlog_std_format=YES

# 指定 log 路徑
xferlog_file=/var/log/vsftpd.log

# FTP使用20埠進行資料傳輸;
connect_from_port_20=YES

# Vsftpd不以獨立的服務啟動,通過Xinetd服務管理,建議改成YES;
listen=YES

# 啟用IPV6監聽;
listen_ipv6=NO

# 登入FTP伺服器,依據/etc/pam.d/vsftpd中內容進行認證;
pam_service_name=vsftpd

# Vsftpd.user_list和ftpusers配置檔案裡使用者禁止訪問FTP;
userlist_enable=YES

# 設定vsftpd與tcp wrapper結合進行主機的訪問控制,Vsftpd伺服器檢查/etc/hosts.allow 和/etc/hosts.deny中的設定,來決定請求連線的主機,是否允許訪問該FTP伺服器。
tcp_wrappers=YES

# 限制使用者都只能讀取家目錄
chroot_local_user=YES

# 這樣子才可以正常讀取家目錄
allow_writeable_chroot=YES

# 帳號清單路徑
userlist_file=/etc/vsftpd.userlist

# 白名單,拒絕除檔案中的使用者外的使用者FTP訪問
userlist_deny=NO

# 是否使用本地時間?vsftpd 預設使用 GMT 時間(格林威治),所以會比台灣晚 8 小時,建議設定為 YES 吧
use_localtime=YES

# 這個選項必須指定一個空的資料夾且任何登入者都不能有寫入的權限,當vsftpd 不需要file system 的權限時,就會將使用者限制在此資料夾中。預設值為/usr/share/empty
secure_chroot_dir=/var/run/vsftpd/empty

# 這樣子有可能在傳中文不會有亂碼
syslog_enable=YES

# 最大連接數
#max_clients=100

# 每個 ip 最大連接數,預設沒有限制
#max_per_ip=1

# 連線閒置時間超180秒就中斷(DEFAULT:60),單位以second
accept_timeout=180

# 資料傳送閒置時間超180秒就中斷(DEFAULT:YES),單位以second
data_connection_timeout=180

# 本地使用者配置
# 啟用本地系統使用者訪問;
local_enable=YES

# 本地使用者建立檔案及目錄預設許可權掩碼;
local_umask=022

# 修改本地使用者登入時訪問的目錄路徑
local_root=/home/ftp

# 匿名使用者訪問配置(最大許可權)
# 開啟匿名使用者訪問;
anonymous_enable=NO

# 匿名使用者上傳檔案的umask值
anon_umask=022

# 允許匿名使用者上傳檔案
anon_upload_enable=YES

# 允許匿名使用者建立目錄
anon_mkdir_write_enable=YES

# 允許匿名使用者修改目錄名稱或刪除目錄
anon_other_write_enable=YES

# 修改匿名使用者登入時訪問的目錄路徑
anon_root=/data/ftpdata
  • 建立 FTP 登入帳密,在建立帳號過程中系統會順便建立密碼
adduser unixcop-user
  • 將剛剛建立好的帳號加入允許登入 FTP 清單
echo unixcop-user >> /etc/vsftpd.userlist
  • 設定 shell 不然設定成 nologin 會無法登入系統
echo "/usr/sbin/nologin" >> /etc/shells

說明:

將帳號的 loggin shell 改成 /usr/sbin/nologin 該員還是可以連到 ftp

  • 設定該帳號沒有系統登入權限
usermod -s /usr/sbin/nologin unixcop-user
  • 為了提高 ftp 安全性,可以利用 openssl 產生出安全性憑證,該憑證有效期只有一年因此每一年都需要更新該憑證
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd-key.pem -out /etc/ssl/private/vsftpd-cert.pem
  • 在設定檔增加憑證路徑 vim /etc/vsftpd.conf
# 憑證設定
rsa_cert_file=/etc/ssl/private/vsftpd-cert.pem
rsa_private_key_file=/etc/ssl/private/vsftpd-key.pem
ssl_enable=YES
  • 啟動服務
systemctl start vsftpd && systemctl enable vsftpd
  • 在用 ftp 上傳軟體登入會跳出憑證信任問題,只要信任就可以登入並且可以正使使用

ftp-01.png

補充說明


  BUBU 測試上傳中文檔會出現亂碼的問題這要修改 filezilla 設定

ftp-02.png

  因 BUBU 都是用 LXC 模式在運行服務,在查看 log 檔時發現到有中文會產生亂碼,在系統語系上要是 UTF-8 就可以正常顯示。

  • 先用 locale 指令查看,LANGUAGE 值會是什麼,盡量是 UTF-8

ftp-03.png

  由於 BUBU 都是限制在 home 裡面才能正常讀取資料,vsftpd 不支援 soft link 可以利用 mount 方式掛載到 home 目錄裡面

mount --bind 來源 /home/ftp
  • 定期將 messages 裡面關於 vsftpd 訊息同步到指定 vsftpd.log

建立腳本

vim ftpsync.sh

腳本內容

#!/bin/bash
cat /var/log/messages | grep -a vsftpd > /var/log/vsftpd-1.log

排程設定

crontab -e

2 * * * * /root/ftpsync.sh >> /var/log/ftpsync.log 2>&1
外部連線

  BUBU 在測試時候都是以內站方式測試,如果您有對外開放使用 FTP 服務以下還有需要設定的地方,原因是卡在 IP 問題有經過 NAT 的關係會造成無法正常連線。

# 啟動被動式連線(passive mode),現在都是這種模式
pasv_enable=YES

# 負責解析網址
pasv_addr_resolve=YES

# 設定外部公開 IP 位置
pasv_address=

# 如果要禁用 PASV 安全檢查以確保數據連接來自與控制連接相同的 IP 地址,請設置為 YES (這一條建議還是以預設為主。以確保安全性問題)
#pasv_promiscuous=YES

# 指定允許 port 號最小及最大(防火牆上面也要設定)
pasv_min_port=10221
pasv_max_port=10231

備註





參考相關網頁