目錄
一、 安裝 vsftpd
二、創建 FTP 數據目錄
三、創建 FTP 用戶
四、配置 vsftpd
五、重啟 vsftpd 服務
六、增加新用戶腳本
一、 安裝 vsftpd
sudo apt update
sudo apt install vsftpd -y
二、創建 FTP 數據目錄
sudo mkdir -p /data/ftp
sudo chown nobody:nogroup /data/ftp
sudo chmod a-w /data/ftp
三、創建 FTP 用戶
# 創建用戶 test
sudo useradd --home /data/ftp/test --shell /bin/bash test
sudo mkdir -p /data/ftp/test
sudo chown test:test /data/ftp/test
sudo chmod 750 /data/ftp/test
echo "test:test" | sudo chpasswd
四、配置 vsftpd
sudo vim /etc/vsftpd.conf
使用以下配置:
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
allow_writeable_chroot=YES
user_sub_token=$USER
local_root=/data/ftp/$USERallow_writeable_chroot=YES
user_config_dir=/etc/vsftpd/user_conf
user_sub_token=$USER
local_root=/data/ftp/$USERpasv_enable=YES
pasv_min_port=10000
pasv_max_port=10100
五、重啟 vsftpd 服務
sudo systemctl restart vsftpd
sudo systemctl enable vsftpd
六、增加新用戶腳本
#!/bin/bash# FTP 用戶添加腳本
# 使用方法: sudo ./add_ftp_user.sh# 檢查是否以 root 運行
if [ "$(id -u)" -ne 0 ]; thenecho "錯誤: 此腳本必須使用 sudo 或以 root 用戶運行" >&2exit 1
fi# 檢查 vsftpd 是否安裝
if ! dpkg -l | grep -q vsftpd; thenecho "錯誤: vsftpd 未安裝,請先安裝 vsftpd" >&2exit 1
fi# 輸入用戶名
read -p "請輸入要創建的 FTP 用戶名: " username# 更可靠的用戶存在檢查
if getent passwd "$username" >/dev/null 2>&1; thenecho "錯誤: 用戶 $username 已存在" >&2exit 1
fi# 輸入密碼
read -p "請輸入 $username 的密碼: " -s password
echo
read -p "再次確認密碼: " -s password_confirm
echoif [ "$password" != "$password_confirm" ]; thenecho "錯誤: 兩次輸入的密碼不匹配" >&2exit 1
fi# 創建用戶和目錄
echo "正在創建用戶 $username ..."
useradd --home-dir "/data/ftp/$username" --shell /bin/bash --create-home "$username"# 設置目錄權限
mkdir -p "/data/ftp/$username"
chown "$username:$username" "/data/ftp/$username"
chmod 750 "/data/ftp/$username"# 設置密碼
echo "$username:$password" | chpasswd || {echo "錯誤: 設置密碼失敗" >&2userdel "$username"exit 1
}# 創建用戶特定配置
mkdir -p /etc/vsftpd/user_conf
echo "write_enable=YES" > "/etc/vsftpd/user_conf/$username"# 重啟服務
systemctl restart vsftpdecho "FTP 用戶 $username 創建成功!"
echo "主目錄: /data/ftp/$username"
echo "登錄方式: ftp://$username@服務器IP"