每天 Shaarli

一天内的所有链接,汇聚在一个页面上。

January 28, 2026

Note: CentOS 7 安装 vsftpd(虚拟用户 + FTPS)

CentOS 7 安装 vsftpd(虚拟用户 + FTPS)

⚠️ 请先用 rootsudo -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 端口