在 CentOS 上“禁用 SFTP”通常有几种不同层级的做法,取决于你是完全关闭 SSH 里的 SFTP、禁止某些用户使用 SFTP,还是只保留 SSH 登录但去掉 SFTP。
下面按常见场景说明。
SFTP 是 OpenSSH 的一个子系统(subsystem),最直接的方法是注释掉或删除 SFTP 子系统配置。
vi /etc/ssh/sshd_config
找到类似这一行:
Subsystem sftp /usr/libexec/openssh/sftp-server
改成:
# Subsystem sftp /usr/libexec/openssh/sftp-server
或直接删除该行。
systemctl restart sshd
✅ 此后所有用户都无法使用 sftp,但 SSH Shell 登录仍然可用。
如果你希望只让特定用户用 SFTP,其余禁用,可以用 Match 配置。
Subsystem sftp /usr/libexec/openssh/sftp-server
Match User *,!sftpuser
ForceCommand /bin/false
或更精确一点:
Match Group nosftp
ForceCommand /bin/false
然后把不想用 SFTP 的用户加入 nosftp 组。
Match User testuser
ForceCommand /bin/bash
# 或不允许任何命令
# ForceCommand /bin/false
usermod -s /sbin/nologin testuser
⚠ 这样该用户连 SSH 也登不了。
rpm -e openssh-server
❌ 会导致 SSH 也无法使用,不建议。
sftp user@localhost
如果看到类似:
subsystem request failed on channel 0
说明 SFTP 已禁用。
| 需求 | 推荐方式 |
|---|---|
| 完全禁用 SFTP | 注释 Subsystem sftp |
| 只允许管理员 SFTP | Match User |
| 按用户禁用 | Match User + ForceCommand |
如果你能说明是 CentOS 几 + 是否用 chroot + 是否还要保留 scp,我可以给你更精确配置。