Linux VSFTP如何限制访问
小樊
39
2025-12-08 05:06:31
Linux VSFTP访问限制实用指南
一 基础安全与登录限制
- 禁用匿名访问并仅允许本地用户登录:设置anonymous_enable=NO、local_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=YES、chroot_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/防火墙策略是否阻断。