温馨提示×

Ubuntu系统中vsftp安全设置

小樊
47
2025-11-10 18:36:13
栏目: 智能运维

Ubuntu系统中vsftpd安全设置指南

1. 安装vsftpd

首先更新系统软件包列表并安装vsftpd,确保使用最新版本修复已知漏洞:

sudo apt update
sudo apt install vsftpd

2. 基础安全配置(修改/etc/vsftpd.conf

编辑vsftpd主配置文件,通过以下关键参数限制访问和权限:

  • 禁用匿名访问:防止未授权用户获取服务器文件。
    anonymous_enable=NO
    
  • 允许本地用户登录:仅允许系统用户通过账号密码登录。
    local_enable=YES
    
  • 启用写入权限:允许用户上传/修改文件(需配合后续目录权限设置)。
    write_enable=YES
    
  • 限制用户至家目录(chroot):将用户锁定在自己的主目录,避免访问系统敏感文件。
    chroot_local_user=YES
    allow_writeable_chroot=YES  # 允许chroot目录可写(解决“500 OOPS”错误)
    
  • 限制用户列表:通过/etc/vsftpd.user_list文件指定允许/拒绝登录的用户,提升访问控制粒度。
    userlist_enable=YES
    userlist_file=/etc/vsftpd.user_list
    userlist_deny=NO  # 仅允许列表中的用户登录(设为YES则为拒绝)
    

3. 配置SSL/TLS加密传输

为防止数据在传输过程中被窃取或篡改,必须启用SSL/TLS加密:

  • 生成自签名证书(或使用Let’s Encrypt获取免费证书):
    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
    
  • 修改配置文件启用SSL
    ssl_enable=YES
    force_local_data_ssl=YES    # 强制数据传输加密
    force_local_logins_ssl=YES  # 强制登录过程加密
    ssl_tlsv1=YES               # 仅使用TLSv1协议(禁用SSLv2/3)
    ssl_sslv2=NO
    ssl_sslv3=NO
    rsa_cert_file=/etc/ssl/private/vsftpd.pem
    rsa_private_key_file=/etc/ssl/private/vsftpd.pem
    

4. 配置被动模式(PASV)

被动模式可避免防火墙拦截主动模式的随机端口连接,提升连接稳定性:

pasv_enable=YES
pasv_min_port=40000  # 被动模式端口范围起始值
pasv_max_port=40100  # 被动模式端口范围结束值

需同步配置防火墙允许该端口范围(见下文)。

5. 配置防火墙(UFW为例)

允许FTP必要端口及被动模式端口,阻断非法访问:

# 允许FTP控制端口(21)和数据端口(20)
sudo ufw allow 21/tcp
sudo ufw allow 20/tcp
# 允许被动模式端口范围
sudo ufw allow 40000:40100/tcp
# 启用防火墙
sudo ufw enable
# 检查防火墙状态
sudo ufw status

6. 重启vsftpd服务

应用所有配置变更:

sudo systemctl restart vsftpd
# 设置开机自启
sudo systemctl enable vsftpd

7. 额外安全建议

  • 使用强密码:为用户账号设置包含大小写字母、数字和符号的复杂密码(如Aa123456@),避免弱密码被破解。
  • 限制用户权限:通过local_umask设置文件创建掩码(如022),确保用户上传的文件权限合理(如-rw-r--r--),防止其他用户修改或删除文件。
  • 监控日志文件:定期检查/var/log/vsftpd.log(或配置的日志路径),查看登录记录、传输行为等,及时发现异常(如频繁登录失败、大量文件下载)。
  • 禁用shell访问:若用户仅需FTP访问,可移除其shell权限,降低服务器被入侵风险:
    sudo usermod -s /sbin/nologin ftpuser  # 将ftpuser的shell设为无登录权限
    

0