Ubuntu 24-部署FTP和自定义用户
目录
一、 安装 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"