在 CentOS 環境中,若需提供 FTP 服務且不想建立真實系統帳號,使用 vsftpd 搭配虛擬用戶是常見且安全的做法。本文將詳細記錄從下載原始碼、編譯安裝、建立映射用戶、配置 PAM 驗證到目錄權限設定的完整流程,供管理員參考部署。
wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.3.4.tar.gz
useradd wwwftp -d /data/www -s /sbin/nologin
此用戶不具備登入 Shell,僅作為虛擬用戶文件操作的身份映射。
mkdir -p /data/soft/vsftpd/conf
mkdir -p /data/soft/vsftpd/bin
mkdir -p /data/soft/vsftpd/lib
mkdir -p /data/soft/vsftpd/user_conf
mkdir -p /data/soft/vsftpd/empty
mkdir -p /data/soft/vsftpd/logs
mkdir -p /data/www
mkdir -p /data/www/user1
mkdir -p /data/www/user2
chown -R wwwftp:www /data/www
chmod -R 700 /data/soft/vsftpd/empty/
chown -R wwwftp:wwwftp /data/soft/vsftpd/empty/
cp /lib/security/pam_userdb.so /data/soft/vsftpd/lib/
yum -y install gcc db4* pam*
tar zxvf vsftpd-2.3.4.tar.gz
cd vsftpd-2.3.4
預設原始碼未啟用 TCP Wrappers 與 SSL,需手動調整:
/* 原始預設值 */
#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#undef VSF_BUILD_SSL
/* 修改為支援 TCP Wrappers 與 SSL(視需求) */
#define VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#define VSF_BUILD_SSL
make
ldd vsftpd | grep pam
若輸出顯示 libpam.so 相關依賴,即表示編譯成功且已載入 PAM 模組。
/etc/vsftpd/vsftpd.conf 啟用虛擬用戶、指定 PAM 服務名稱、設定用戶配置目錄等。db_load 將帳號密碼文本轉為 Berkeley DB 格式)。/etc/pam.d/vsftpd.virtual 引用 pam_userdb.so 進行驗證。/data/soft/vsftpd/user_conf/,限制根目錄、上傳下載權限等。systemctl enable vsftpd --now。完成上述步驟後,即可使用 FTP 客戶端以虛擬用戶身份登入,實現隔離、安全的文件傳輸環境。