在 Linux 中“禁用 SFTP”通常有几种不同层级的做法,取决于你是完全禁止 SSH 中的 SFTP,还是只允许/禁止某些用户。下面按常见场景说明。
SFTP 依赖 sshd 中的 sftp-server 子系统。
编辑 SSH 配置:
sudo vim /etc/ssh/sshd_config
找到这一行:
Subsystem sftp /usr/lib/openssh/sftp-server
改成:
# Subsubsystem sftp /usr/lib/openssh/sftp-server
或直接删除/注释掉。
重启 SSH:
sudo systemctl restart sshd
✅ 效果:所有用户都无法使用 SFTP,但 SSH 登录仍可用。
如果不想动全局配置,可以用 ForceCommand。
sudo vim /etc/ssh/sshd_config
在文件末尾添加:
Match all
ForceCommand /bin/bash
或更严格:
Match all
ForceCommand internal-sftp -R
(不推荐完全禁用 shell 的方式,除非你很清楚用途)
sudo vim /etc/ssh/sshd_config
Match User testuser
ForceCommand /bin/bash
或彻底禁止:
Match User testuser
Subsystem sftp none
重启:
sudo systemctl restart sshd
如果用户不应该登录:
sudo usermod -s /usr/sbin/nologin username
或:
sudo usermod -s /bin/false username
✅ 同时禁止 SSH 和 SFTP。
iptables -A INPUT -p tcp --dport 22 -m string --string "sftp" --algo bm -j DROP
⚠️ 不稳定、易误杀,不建议生产环境使用。
sftp user@host
若返回:
subsystem request failed on channel 0
说明已成功禁用。
| 需求 | 推荐方式 |
|---|---|
| 全局禁用 SFTP | 注释 Subsystem |
| 禁用某用户 | Match User |
| 禁止登录 | nologin / false |
| 保留 SSH | 不改 shell |
如果你能说明:是服务器安全加固、还是限制特定用户、还是容器环境,我可以给你更精确的配置。