有多种方法可以限制Linux FTP服务器的访问权限,以下是几种常见的方法:
对于vsftpd服务器,可以通过修改配置文件/etc/vsftpd.conf
实现多种限制:
# 禁止匿名访问
anonymous_enable=NO
# 限制本地用户访问(仅允许指定用户)
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO # 仅允许列表中的用户
# 限制用户不能离开其主目录
chroot_local_user=YES
allow_writeable_chroot=YES
# 限制IP访问
tcp_wrappers=YES
然后在/etc/hosts.allow
和/etc/hosts.deny
中设置IP限制。
# 只允许特定IP访问FTP
iptables -A INPUT -p tcp --dport 21 -s 192.168.1.100 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j DROP
# 允许被动模式端口范围
iptables -A INPUT -p tcp --dport 30000:31000 -j ACCEPT
编辑/etc/pam.d/vsftpd
(或其他FTP服务的PAM配置):
# 限制用户组
auth required pam_listfile.so item=group sense=allow file=/etc/ftpallowedgroups onerr=fail
在/etc/hosts.allow
和/etc/hosts.deny
中添加规则:
# /etc/hosts.allow
vsftpd: 192.168.1.0/24
# /etc/hosts.deny
vsftpd: ALL
# 查看FTP相关SELinux设置
getsebool -a | grep ftp
# 根据需要设置布尔值
setsebool -P ftp_home_dir on
# 创建仅限FTP使用的用户
useradd -d /var/www/html -s /sbin/nologin ftpuser
passwd ftpuser
# 设置目录权限
chown -R ftpuser:ftpgroup /var/www/html
chmod 750 /var/www/html
可以通过/etc/security/time.conf
限制用户登录时间:
# 限制用户ftpuser只能在工作日9-17点登录
vsftpd;ftpuser;*;!Wk0900-1700
修改配置后需要重启FTP服务:
systemctl restart vsftpd
确保防火墙规则不会阻止合法连接
对于生产环境,建议使用SFTP(SSH文件传输)代替FTP,因为FTP协议本身不加密
定期检查日志文件/var/log/vsftpd.log
或/var/log/messages
监控访问情况
您需要根据具体的FTP服务器软件(vsftpd, proftpd, pure-ftpd等)和系统环境调整上述方法。