247 条记录
25 私有链接
25 私有链接
CentOS 7 安装 vsftpd(虚拟用户 + FTPS)
⚠️ 请先用
root或sudo -i
==============================
一、系统基础设置
==============================
# 1. 安装中文语言包(支持中文编码)
yum install -y kde-l10n-Chinese glibc-common
# 查看可用语言
localectl list-locales | grep zh
# 设置系统默认中文 UTF-8
localectl set-locale LANG=zh_CN.UTF-8
# 重新登录后生效,验证
locale
# 2. 设置时区
timedatectl list-timezones | grep Shanghai
timedatectl set-timezone Asia/Shanghai
date
# 3. 时间同步(chrony)
yum install -y chrony
systemctl enable chronyd
systemctl start chronyd
timedatectl status
==============================
二、永久关闭 SELinux(CentOS 必做)
==============================
# 临时关闭(立即生效)
setenforce 0
# 永久关闭
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 查看确认(需要重启后完全生效)
getenforce
==============================
三、安装 vsftpd 及依赖
==============================
yum install -y vsftpd db4-utils openssl firewalld
systemctl enable firewalld
systemctl start firewalld
==============================
四、创建 FTP 虚拟用户宿主账户
==============================
useradd -r -d /srv/ftp -s /sbin/nologin ftpvirt
mkdir -p /srv/ftp
chown -R ftpvirt:ftpvirt /srv/ftp
==============================
五、vsftpd 目录结构
==============================
mkdir -p /etc/vsftpd
mkdir -p /etc/vsftpd/vuser_conf
==============================
六、创建虚拟用户
==============================
# 用户名 / 密码(两行一组)
cat > /etc/vsftpd/virt_users.txt <<EOF
scientistzjf
YOUR_PASSWORD
EOF
# 转换为 db 文件
db_load -T -t hash \
-f /etc/vsftpd/virt_users.txt \
/etc/vsftpd/virt_users.db
chmod 600 /etc/vsftpd/virt_users.*
==============================
七、PAM 虚拟用户认证
==============================
cat > /etc/pam.d/vsftpd_virtual <<EOF
auth required pam_userdb.so db=/etc/vsftpd/virt_users
account required pam_userdb.so db=/etc/vsftpd/virt_users
EOF
==============================
八、创建虚拟用户目录
==============================
mkdir -p /srv/ftp/scientistzjf
chown -R ftpvirt:ftpvirt /srv/ftp/scientistzjf
==============================
九、vsftpd 主配置文件
==============================
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
cat > /etc/vsftpd/vsftpd.conf <<EOF
anonymous_enable=NO
local_enable=YES
write_enable=YES
pam_service_name=vsftpd_virtual
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=YES
listen_ipv6=NO
pasv_enable=YES
pasv_address=YOUR_IP_ADDR
pasv_min_port=30000
pasv_max_port=30100
pasv_promiscuous=YES
utf8_filesystem=YES
xferlog_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
log_ftp_protocol=YES
EOF
==============================
十、虚拟用户独立配置
==============================
cat > /etc/vsftpd/vuser_conf/scientistzjf <<EOF
local_root=/srv/ftp/scientistzjf
write_enable=YES
EOF
==============================
十一、用户白名单
==============================
echo "scientistzjf" > /etc/vsftpd.allowed_users
chmod 600 /etc/vsftpd.allowed_users
==============================
十二、防火墙放行
==============================
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=30000-30100/tcp
firewall-cmd --reload
==============================
十三、生成 FTPS(ECC)证书
==============================
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
==============================
十四、启用 FTPS
==============================
cat >> /etc/vsftpd/vsftpd.conf <<EOF
ssl_enable=YES
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_ciphers=ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA256:!aNULL:!MD5
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
debug_ssl=YES
EOF
==============================
十五、启动 vsftpd
==============================
systemctl enable vsftpd
systemctl restart vsftpd
systemctl status vsftpd --no-pager
# 验证监听 21 端口
ss -lntp | grep :21
# 手动启动排错
/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
==============================
🧠 机房实战小提醒
- IP 变了记得改
pasv_address - FTPS 客户端要选:
- 协议:
FTP over TLS (Explicit) - 加密:
Require explicit FTP over TLS
- 协议:
- 530 错误 → 90% 是 PAM / 白名单 / SELinux
- 425 错误 → 防火墙 / PASV 端口