在Ubuntu系统中,SFTP传输限制主要通过OpenSSH服务器配置(速度、文件大小)和流量控制工具(带宽)实现,以下是具体步骤:
在配置限制前,需确保已安装OpenSSH服务器,并创建专用SFTP用户(若未完成):
# 安装OpenSSH服务器(若未安装) sudo apt update && sudo apt install openssh-server # 创建SFTP专用用户(以"sftpuser"为例) sudo adduser sftpuser sudo usermod -aG sftp sftpuser # 将用户加入sftp组(需提前创建:sudo groupadd sftp) # 设置用户家目录权限(关键:防止用户越权) sudo chown root:root /home/sftpuser sudo chmod 755 /home/sftpuser 注:家目录权限必须为
root:root且权限为755,否则SFTP连接会失败。
编辑SSH配置文件(/etc/ssh/sshd_config),通过Match指令针对特定用户/组设置速度限制:
sudo nano /etc/ssh/sshd_config 在文件末尾添加以下内容(以用户sftpuser为例):
# 匹配指定用户 Match User sftpuser # 强制使用SFTP(禁用Shell访问) ForceCommand internal-sftp # 限制上传速度(1Mbps = 1024kbps) LimitBandwidth 1024 # 限制下载速度(1Mbps = 1024kbps) LimitBandwidthUp 1024 # 其他可选限制(如禁用端口转发) AllowTcpForwarding no X11Forwarding no 若需针对用户组(如sftp组)设置,将Match User改为Match Group sftp即可。
在sshd_config中,通过LimitFileSize指令限制单个文件的最大传输大小(支持Bytes、KB、MB、GB单位):
# 继续在Match块中添加(或全局设置) Match User sftpuser # 限制单个文件最大100MB LimitFileSize 100M 此配置会阻止用户上传/下载超过100MB的文件。
若需更精细的带宽控制(如区分上传/下载带宽),可使用Linux自带的tc(Traffic Control)工具:
# 安装iproute2(包含tc工具,Ubuntu默认已安装) sudo apt install iproute2 # 1. 清除现有队列规则(避免冲突) sudo tc qdisc del dev eth0 root 2>/dev/null # 2. 添加HTB队列(根队列) sudo tc qdisc add dev eth0 root handle 1: htb default 30 # 3. 创建主类(总带宽10Mbps) sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit ceil 10mbit # 4. 创建上传子类(2Mbps) sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 2mbit ceil 2mbit # 5. 创建下载子类(8Mbps) sudo tc class add dev eth0 parent 1:1 classid 1:20 htb rate 8mbit ceil 8mbit # 6. 添加过滤器(将SFTP流量(端口22)关联到对应子类) sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:20 # 下载 sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 22 0xffff flowid 1:10 # 上传 注:
eth0为网络接口名称(可通过ip a命令查看),rate为保证带宽,ceil为最大带宽。
wondershaper是tc的封装工具,简化了带宽限制命令:
# 安装wondershaper sudo apt install wondershaper # 限制eth0接口的下载速度(100kbps)和上传速度(50kbps) sudo wondershaper eth0 100 50 # 查看当前限制状态 sudo wondershaper status eth0 # 删除限制 sudo wondershaper clear eth0 注:
wondershaper会影响系统整体网络性能,建议仅在简单场景下使用。
无论使用哪种方法,修改配置后均需重启SSH服务:
sudo systemctl restart sshd # Ubuntu 16.04及以上版本 # 或 sudo service ssh restart # 旧版本 root:root和755权限。sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak)。Match User或Match Group分别配置。tc和wondershaper的配置需添加到启动脚本(如/etc/rc.local)以实现重启后生效。