247 条记录
25 私有链接
25 私有链接
VSFTP配置(虚拟用户版)
非加密FTP
修改系统默认语言为中文
sudo dpkg-reconfigure locales
在弹出的配置界面中,选择 zh_CN.UTF-8 和 en_US.UTF-8,然后将 zh_CN.UTF-8 设置为默认语言。
同步时间
timedatectl list-timezones | grep Shanghai
sudo timedatectl set-timezone Asia/Shanghai
date
sudo apt install openntpd
sudo systemctl status openntpd
timedatectl status
安装依赖工具
sudo apt install -y vsftpd db-util
创建vsftpd专用目录
mkdir -p /etc/vsftpd/
创建ftp用户
sudo useradd -r -d /srv/ftp -s /usr/sbin/nologin ftpvirt
sudo mkdir -p /srv/ftp
sudo chown -R ftpvirt:ftpvirt /srv/ftp
sudo mkdir -p /etc/vsftpd/vuser_conf
sudo mkdir -p /srv/ftp/scientistzjf
sudo chown -R ftpvirt:ftpvirt /srv/ftp/scientistzjf
创建虚拟用户的用户名和密码,并转换成db数据
# virt_users.txt每两行一组
sudo tee /etc/vsftpd/virt_users.txt > /dev/null <<'EOF'
YOUR_USERNAME
YOUR_PASSWORD
EOF
sudo db_load -T -t hash -f /etc/vsftpd/virt_users.txt /etc/vsftpd/virt_users.db
sudo chmod 600 /etc/vsftpd/virt_users.*
将用户数据导入PAM中
sudo tee /etc/pam.d/vsftpd_virtual > /dev/null <<'EOF'
auth required pam_userdb.so db=/etc/vsftpd/virt_users
account required pam_userdb.so db=/etc/vsftpd/virt_users
EOF
创建日志文件
touch /var/log/vsftpd.log
chmod 600 /var/log/vsftpd.log
编辑/etc/vsftpd.conf配置文件
# 禁止匿名
anonymous_enable=NO
# 允许非匿名登录(虚拟用户也算“非匿名”,必须开)
local_enable=YES
# 允许写
write_enable=YES
# PAM 指向我们刚建的虚拟用户认证
pam_service_name=vsftpd_virtual
# 启用 guest 映射:所有虚拟用户映射为 ftpvirt
guest_enable=YES
guest_username=ftpvirt
# 让虚拟用户拥有本地用户权限(否则像匿名一样限制多)
virtual_use_local_privs=YES
# 每个虚拟用户独立配置(非常好用)
user_config_dir=/etc/vsftpd/vuser_conf
# 建议启用(按需)
chroot_local_user=YES
allow_writeable_chroot=YES
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.allowed_users
# 独立监听模式
listen_ipv6=NO
listen=YES
# Bad IP connecting解决方法
pasv_address=YOUR_IP_ADDR
pasv_promiscuous=YES
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30100
# 启用 utf8 支持
utf8_filesystem=YES
给vsftpd独立用户创建配置
sudo tee /etc/vsftpd/vuser_conf/scientistzjf > /dev/null <<'EOF'
local_root=/srv/ftp/scientistzjf
write_enable=YES
EOF
#此处local_root=/srv/ftp/scientistzjf是该用户的根目录,一定要给与ftp用户目录权限(ftpvirt:ftpvirt)
给vsftpd配置白名单(防止服务器本地用户登录)
echo "scientistzjf" | sudo tee /etc/vsftpd.allowed_users
sudo chmod 600 /etc/vsftpd.allowed_users
注意,vsftpd.conf中应该要有以下配置:
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.allowed_users
重启VSFTPD服务
sudo systemctl restart vsftpd
sudo systemctl status vsftpd --no-pager
sudo systemctl enable vsftpd
验证是否真的在监听 21 端口
sudo ss -lntp | grep ':21'
远程测试命令
telnet YOUR_IP_ADDR 21
使用加密FTPS
检查 OpenSSL 是否支持椭圆曲线加密(ECC)
openssl ecparam -list_curves
如果显示了椭圆曲线(如 prime256v1, secp384r1 等),说明你的 OpenSSL 已启用椭圆曲线支持。
生成椭圆曲线密钥(ECDSA)
openssl ecparam -name secp384r1 -genkey -noout -out /etc/vsftpd/vsftpd.key
openssl req -new -x509 -key /etc/vsftpd/vsftpd.key -out /etc/vsftpd/vsftpd.crt -days 36500
生成普通RSA加密(可选)
sudo openssl req -x509 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.key -out /etc/vsftpd/vsftpd.crt -days 36500 -nodes
编辑/etc/vsftpd.conf配置文件,添加SSL信息
// ...之前的配置
# 启用 SSL 支持
ssl_enable=YES
# 仅使用 SSL 加密传输(两个都是YES则只用FTPS,两个都是NO则FTP和FTPS都可用)
force_local_data_ssl=YES
force_local_logins_ssl=YES
# 证书文件路径
rsa_cert_file=/etc/vsftpd/vsftpd.crt
rsa_private_key_file=/etc/vsftpd/vsftpd.key
# 允许客户端使用 SSL 协议
ssl_ciphers=ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA256:!aNULL:!MD5
ssl_tlsv1=YES
ssl_sslv3=NO
ssl_sslv2=NO
# 启用日志记录,用于排查问题
xferlog_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
# 启用 FTP 协议级日志记录(帮助排查 SSL 握手问题)
log_ftp_protocol=YES
# 平时 debug_ssl=NO,出问题再临时开
debug_ssl=YES
重启VSFTPD服务
sudo systemctl restart vsftpd
sudo systemctl status vsftpd --no-pager
sudo systemctl enable vsftpd
手动启动 vsftpd,查看错误日志
sudo /usr/sbin/vsftpd /etc/vsftpd.conf