在 CentOS 上“禁用 SFTP”有多种理解方式,常见需求如下,你可以按需要选择对应方案。
SFTP 是由 sshd 内置的 sftp-server 或 internal-sftp 提供的。只要 SSH 服务还在,就可以通过修改 sshd_config 来关闭 SFTP。
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
vi /etc/ssh/sshd_config
# Subsystem sftp /usr/libexec/openssh/sftp-server
或(较新系统)
# Subsystem sftp internal-sftp
systemctl restart sshd
✅ 效果:
sftpusers 组使用 SFTPgroupadd sftpusers
usermod -aG sftpusers username
sshd_configvi /etc/ssh/sshd_config
在文件末尾添加:
Match Group sftpusers
ForceCommand /bin/false
systemctl restart sshd
✅ 效果:
internal-sftp + ForceCommandMatch Group sftpusers
ForceCommand internal-sftp
如果你 不希望 SFTP,但允许 SSH,则:
✅ 不要使用 ForceCommand internal-sftp
✅ 而是直接 移除 SFTP 子系统(方案一)
⚠️ OpenSSH 本身 不能做到“允许 SSH 但禁止 SFTP” 的细粒度控制,除非:
/bin/bash 并禁用 scp/sftp 客户端(不推荐)systemctl disable sshd
systemctl stop sshd
⚠️ 会导致服务器无法远程管理
在客户端测试:
sftp user@server_ip
应看到类似:
Connection closed
或
subsystem request failed
| 需求 | 建议方案 |
|---|---|
| 完全禁用 SFTP | 注释 Subsystem sftp |
| 针对某些用户禁用 | Match Group + ForceCommand |
| 禁止所有远程登录 | 关闭 sshd |
如果你能说明:
我可以给你 最精确、安全的配置方案。