温馨提示×

Linux VSFTP如何限制访问

小樊
39
2025-12-08 05:06:31
栏目: 智能运维

Linux VSFTP访问限制实用指南

一 基础安全与登录限制

  • 禁用匿名访问并仅允许本地用户登录:设置anonymous_enable=NOlocal_enable=YES
  • 使用用户列表白名单:启用userlist_enable=YES,指定userlist_file=/etc/vsftpd/user_list,并将策略设为白名单userlist_deny=NO(只有写入该文件的用户可登录)。
  • 禁止系统账号滥用:在**/etc/vsftpd/ftpusers**中列出不允许登录的本地用户(PAM 模块 pam_listfile 会读取该文件生效)。
  • 示例最小配置片段:
    anonymous_enable=NO
    local_enable=YES
    userlist_enable=YES
    userlist_file=/etc/vsftpd/user_list
    userlist_deny=NO
    完成后重启服务:systemctl restart vsftpd。

二 目录与权限限制

  • 启用 chroot 将用户禁锢在主目录:设置chroot_local_user=YES;若需允许在 chroot 目录内写入,开启allow_writeable_chroot=YES(否则登录可能失败)。
  • 仅对特定用户启用 chroot:设置chroot_list_enable=YESchroot_list_file=/etc/vsftpd/vsftpd.chroot_list,将需要禁锢的用户逐行写入该文件。
  • 创建受限用户示例:
    useradd -d /home/ftpuser -m ftpuser
    passwd ftpuser
    usermod -s /sbin/nologin ftpuser(禁止 SSH 登录,仅 FTP)
    按需将上述用户加入 chroot 列表或启用全局 chroot。

三 基于 IP 的访问控制

  • 使用 TCP Wrappers:在**/etc/vsftpd/vsftpd.conf中启用tcp_wrappers=YES**,然后在**/etc/hosts.deny写入“vsftpd: ALL”拒绝全部,在/etc/hosts.allow**按 IP/网段放行,例如:
    vsftpd: 192.168.5.1 :ALLOW
    vsftpd: 192.168.0.* :ALLOW
    重启服务生效。
  • 使用 PAM + access.conf 按用户与 IP 精细控制:编辑**/etc/pam.d/vsftpd**,加入“account required pam_access.so”,并在**/etc/security/access.conf**配置规则,例如:
    -: test: ALL(拒绝 test 从任何地址登录)
    +: vagrant: ALL(允许 vagrant 从任何地址登录)
    -: test: ALL EXCEPT 192.168.5.1 192.168.5.101(仅允许 test 从指定 IP 登录)
    重启服务后测试。

四 常见故障排查

  • 登录报错“530 Login incorrect”:优先检查用户是否存在、密码是否正确、是否被**/etc/vsftpd/ftpusers**拒绝,以及 PAM 配置是否异常。
  • 登录时报“500 OOPS: cannot change directory”:多为 SELinux 限制,执行:setsebool -P ftpd_full_access 1(或 setsebool -P allow_ftpd_full_access 1),随后重启 vsftpd。
  • 修改配置后未生效:确认已执行 systemctl restart vsftpd,并检查 SELinux/防火墙策略是否阻断。

0