温馨提示×

Linux vsftp使用教程:文件传输不再困难

小樊
39
2026-01-02 17:56:40
栏目: 智能运维

Linux vsftpd 使用教程 文件传输不再困难

一 快速上手安装与启动

  • CentOS/RHEL 系列:
    • 安装:sudo yum install -y vsftpd
    • 启动与开机自启:sudo systemctl start vsftpd && sudo systemctl enable vsftpd
    • 防火墙放行:sudo firewall-cmd --permanent --add-service=ftp && sudo firewall-cmd --reload
  • Debian/Ubuntu 系列:
    • 安装:sudo apt update && sudo apt install -y vsftpd
    • 启动与开机自启:sudo systemctl start vsftpd && sudo systemctl enable vsftpd
    • 防火墙放行:sudo ufw allow 20/tcp && sudo ufw allow 21/tcp && sudo ufw reload
  • 客户端验证(本机或另一台机器):ftp your_server_ip,出现 220 欢迎信息说明服务已可达。以上步骤覆盖了主流发行版的安装、启动与防火墙放行要点。

二 安全实用的基础配置

  • 建议的“最小可用”安全基线(编辑 /etc/vsftpd/vsftpd.conf):
    • 关闭匿名访问:anonymous_enable=NO
    • 启用本地用户:local_enable=YES
    • 允许写入(上传/删除/重命名):write_enable=YES
    • 将本地用户限制在其家目录:chroot_local_user=YES
    • 常见可选:local_umask=022(上传文件权限更通用)
  • 用户与目录准备(示例用户 ftpuser,根目录 /home/www/ftproot):
    • 创建系统用户(禁止 shell 登录):sudo useradd -d /home/www/ftproot -s /usr/sbin/nologin ftpuser
    • 设置密码:sudo passwd ftpuser
    • 调整目录属主:sudo chown -R ftpuser:ftpuser /home/www/ftproot
    • 若使用 nologin 作为 shell,确保其存在于 /etc/shells,否则登录可能被 PAM 拒绝
  • 使配置生效:sudo systemctl restart vsftpd
  • 说明:上述做法兼顾安全与易用,适合大多数 Web 站点文件维护与交付场景。

三 用户访问控制与目录隔离

  • 两个关键文件与开关:
    • /etc/vsftpd/ftpusers:黑名单,列在此文件中的用户(如 root 等)禁止登录 FTP
    • /etc/vsftpd/user_list:配合 userlist_enable=YES 使用
      • userlist_deny=YES(默认):该文件为黑名单
      • userlist_deny=NO:该文件为白名单(仅允许列表内用户登录)
  • 目录隔离策略(chroot):
    • chroot_local_user=YES:所有本地用户均被限制在其家目录
    • 若需“例外放行”,可开启 chroot_list_enable=YES 并配置 /etc/vsftpd/chroot_list,其生效与 chroot_local_user 的组合逻辑如下:
      • chroot_local_user=YES + chroot_list_enable=YES:列表内用户可“出”家目录,其他用户不可
      • chroot_local_user=NO + chroot_list_enable=YES:列表内用户不可“出”家目录,其他用户可
  • 提示:开启 chroot 后,如用户家目录可写,vsftpd 可能出于安全考虑拒绝登录;常见做法是为上传目录单独授权或使用 allow_writeable_chroot=YES(视版本与策略而定)。

四 传输性能与安全加固

  • 带宽与连接数限制(在 vsftpd.conf 末尾追加):
    • 限制本地与匿名用户速率(单位:字节/秒),示例为约 300 KB/s
      • anon_max_rate=307200
      • local_max_rate=307200
    • 限制并发:max_clients=100max_per_ip=5
  • 启用 SSL/TLS 加密传输(防嗅探):
    • 准备证书(示例自签,生产建议用受信任 CA):
      • sudo mkdir -p /etc/ssl/private && sudo chmod 700 /etc/ssl/private
      • sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
    • 配置启用:
      • ssl_enable=YES
      • allow_anon_ssl=NO
      • force_local_data_ssl=YESforce_local_logins_ssl=YES
      • ssl_tlsv1=YES(或同时启用 ssl_sslv2=NOssl_sslv3=NO 以禁用不安全协议)
    • 重启服务:sudo systemctl restart vsftpd
  • 客户端连接建议:使用 FileZilla 或命令行 lftp,选择 FTP over TLS(显式加密)。

五 常见问题与快速排查

  • 出现 “550 无法上传/创建目录”
    • 确认 write_enable=YES
    • 检查目标目录属主与权限:ls -ld /your/dir,必要时 sudo chown -R ftpuser:ftpuser /your/dir
    • 若启用了 chroot,确认目录权限与策略匹配(必要时设置可写或调整 chroot 例外)
  • 登录被拒绝或“Login incorrect”:
    • 检查 /etc/vsftpd/ftpusers 是否包含该用户
    • 核对 /etc/vsftpd/user_listuserlist_deny 的组合逻辑
    • 确认系统用户存在且 shell 为 /usr/sbin/nologin(或存在于 /etc/shells
  • 能登录但列目录/传输慢或卡顿:
    • 确认被动模式(PASV)数据端口已放通(云厂商安全组/本机防火墙)
    • 设置合理的 local_max_rate/anon_max_rate 避免拥塞
  • 日志与状态定位:
    • 传输日志:/var/log/xferlog
    • 登录日志:启用 dual_log_enable=YES 后查看 /var/log/vsftpd.log
    • 服务状态:systemctl status vsftpdjournalctl -xe

0