vsFTPd(Very Secure FTP Daemon)是 Linux 發行版中最受推崇的 FTP 服務器軟體,以輕量、高效、安全著稱。本文面向初學者,涵蓋用戶管理基礎、安裝方式、服務啟停、防火牆/SELinux 衝突排除、常見錯誤修復、核心配置檔解析,以及匿名/本地用戶權限、虛擬路徑、日誌、歡迎訊息、連線數與速度限制、chroot 限制、IP 綁定等實戰技巧。
vsFTPd 預設依據 /etc/passwd 與 /etc/group 管理用戶,**務必先掌握 Linux 用戶/群組管理**,否則遇到問題時將無從下手。
ftp。ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
/sbin/nologin 表示該帳號**無法登入系統 Shell**,僅供 FTP 使用,提高安全性。/var/ftp。ftp:x:50:(GID 需與用戶一致)。注意:/etc/passwd 與 /etc/group 中的 ftp 用戶/群組**不可刪除**,但可修改家目錄、UID/GID 等屬性。
強烈建議使用發行版套件管理器安裝(約 2 分鐘),避免手動編譯源碼的複雜度。
# Fedora / RedHat / CentOS
yum install vsftpd
# Debian / Ubuntu
apt-get install vsftpd
# RPM 通用
rpm -ivh vsftpd*.rpm
若必須編譯安裝(以 vsftpd-2.0.3 為例):
tar zxvf vsftpd-2.0.3.tar.gz
cd vsftpd-2.0.3
make && make install
cp vsftpd.conf /etc
echo "listen=yes" >> /etc/vsftpd.conf
# RPM 系統需刪除 /etc/xinetd.d/vsftpd 並重啟 xinetd
/etc/init.d/xinetd restart
本文統一採用獨立運行模式,不使用 xinetd。
# 啟動 (需 root)
/usr/sbin/vsftpd & # 或 /usr/local/sbin/vsftpd &
# 檢查進程
pgrep vsftpd # 顯示 PID 即運行中
# 停止
pkill vsftpd
pgrep vsftpd # 無輸出即已停止
/etc/init.d/vsftpd start
/etc/init.d/vsftpd restart
/etc/init.d/vsftpd stop
**最常見問題**:服務啟動正常但無法連線、或無法上傳,多半是防火牆或 SELinux 攔截。
system-config-securitylevel-tui 開放 FTP,或直接清空規則 iptables -F(測試用)。Disabled 或 Permissive。
vim /etc/selinux/config
SELINUX=disabled # 修改後需重啟系統
**原因**:匿名用戶家目錄權限過於開放(如 chmod 777 /var/ftp)。vsFTPd 基於安全拒絕啟動。
**修復**:
# 查看 ftp 家目錄
grep ftp /etc/passwd
# 輸出範例:ftp:x:1000:1000:FTP User:/var/ftp:/sbin/nologin
# 修正權限
chown root:root /var/ftp
chmod 755 /var/ftp
# 若需匿名上傳,在家目錄下建立子目錄並開放權限
mkdir /var/ftp/pub
chmod 777 /var/ftp/pub
# 並修改 vsftpd.conf 開啟匿名寫入權限(見下文)
vsftpd.conf 解析/etc/vsftpd.conf 或 /etc/vsftpd/vsftpd.conf# 開頭為註解/停用。anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_umask=022
# 在 ftp 家目錄建立可寫入目錄
mkdir /var/ftp/pub
chmod 777 /var/ftp/pub
# 建立用戶 beinan,家目錄 /opt/beinan,群組 ftp,禁止登入 Shell
adduser -d /opt/beinan -g ftp -s /sbin/nologin beinan
passwd beinan
# vsftpd.conf 確保啟用
local_enable=YES
write_enable=YES
local_umask=022
將 /mnt/LinG/WinSoft 映射到 FTP 目錄 /var/ftp/WinSoft:
mkdir /var/ftp/WinSoft
mount --bind /mnt/LinG/WinSoft /var/ftp/WinSoft
xferlog_file=/var/log/vsftpd.log
dirmessage_enable=YES
message_file=.message
# 在各用戶家目錄放置 .message 檔案
echo -e "歡迎來到 LinuxSir FTP\n這裡提供最真誠的幫助" > /var/ftp/.message
# 修改 /etc/passwd 中 ftp 那行的家目錄欄位
ftp:x:14:50:FTP User:/opt/ftp:/sbin/nologin
mkdir /opt/ftp
chown root:root /opt/ftp
chmod 755 /opt/ftp
max_clients=100
max_per_ip=5
# 單位為 Bytes/秒。80 KB/s = 81920
anon_max_rate=81920
local_max_rate=81920
# 建立名單檔
touch /etc/vsftpd.chroot_list
echo -e "beinan\nnanbei" > /etc/vsftpd.chroot_list
# vsftpd.conf
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
**一刀切限制所有用戶**:chroot_local_user=YES
# vsftpd.conf 僅監聽內網 IP
listen_address=192.168.0.2