CentOS SFTP配置的常见限制方法
通过ChrootDirectory
指令将用户限制在指定目录(如用户主目录),使其无法访问系统其他部分。配置示例如下:
Match Group sftpusers # 匹配sftpusers组(需提前创建)
ChrootDirectory %h # %h代表用户主目录
ForceCommand internal-sftp # 强制使用内部SFTP命令
AllowTcpForwarding no # 禁用TCP转发
X11Forwarding no # 禁用X11转发
需确保ChrootDirectory
目录及其父目录权限为755
(所有者为root
),否则用户无法登录。
通过ForceCommand internal-sftp
强制用户只能使用SFTP,无法获得Shell访问权限。常与Match User
或Match Group
结合使用,例如:
Match User ftpuser # 针对特定用户
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
此配置可彻底防止用户通过SSH登录系统。
使用tc
(Traffic Control)工具限制用户的上传/下载速度。例如,限制某用户带宽为1Mbps
的脚本示例:
#!/bin/bash
USER="sftpuser"
UPLOAD_LIMIT="100kbit"
DOWNLOAD_LIMIT="100kbit"
tc qdisc add dev eth0 root handle 1: htb default 30
tc class add dev eth0 parent 1: classid 1:1 htb rate $DOWNLOAD_LIMIT
tc class add dev eth0 parent 1:1 classid 1:10 htb rate $UPLOAD_LIMIT
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst $USER flowid 1:10
需将脚本添加到用户登录时的自动执行路径(如/etc/profile.d/
),确保每次登录时生效。
通过防火墙(如firewalld
)限制特定IP地址访问SFTP服务。配置步骤:
# 允许SFTP服务(默认端口22)
sudo firewall-cmd --permanent --add-service=sftp
# 限制特定IP(如192.168.1.100)访问
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'
# 重新加载防火墙配置
sudo firewall-cmd --reload
此方法可有效防止未经授权的IP地址访问SFTP服务。
sshd_config
中的AllowUsers
(允许指定用户)或DenyUsers
(禁止指定用户)指令限制访问。例如:AllowUsers ftpuser1 ftpuser2 # 仅允许这两个用户登录
DenyUsers root admin # 禁止root和admin用户登录
sftpusers
),将需要使用SFTP的用户添加到该组,并通过Match Group
配置组级权限。若系统启用SELinux(默认enforcing
模式),需调整SELinux策略以允许SFTP访问。例如:
enforcing
模式:sudo setenforce 1
;audit2allow
工具生成策略模块并安装:sudo ausearch -c 'sshd' --raw | audit2allow -M my_sshd
sudo semodule -i my_sshd.pp
SELinux可提供更细粒度的访问控制,增强SFTP安全性。
安装fail2ban
监控SFTP登录日志,自动封禁多次尝试失败的IP地址。配置示例:
# 安装fail2ban
sudo yum install fail2ban
# 启用并配置SFTP jail
sudo vi /etc/fail2ban/jail.local
添加以下内容:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
maxretry = 3 # 允许的最大失败次数
bantime = 600 # 封禁时间(秒)
重启fail2ban
服务后,可有效防止暴力破解。