在 Linux 上“禁止 SFTP 写文件”通常有多种实现方式,取决于你是完全禁止写、只允许读,还是对特定用户/目录限制。下面按常见场景说明。
sudo vim /etc/ssh/sshd_config
确保有以下配置(或新增):
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /sftp
ForceCommand internal-sftp -R
说明:
-R 参数:只读 SFTP(禁止写、删除、重命名)ChrootDirectory:用户根目录(必须是 root 拥有,且 755)sudo chown root:root /sftp
sudo chmod 755 /sftp
用户子目录(如需):
sudo mkdir /sftp/upload
sudo chown sftpuser:sftpuser /sftp/upload
sudo chmod 555 /sftp/upload
sudo systemctl restart sshd
✅ 效果:该用户可通过 SFTP 登录,但不能上传、修改、删除文件
如果不使用 -R,而是控制目录权限:
chmod 555 /sftp/read-only
chmod 755 /sftp/writeable
SFTP 本身不突破 Linux 文件权限。
setfacl -R -m u:sftpuser:r-x /data
setfacl -R -m u:sftpuser:-w- /data # 显式禁止写
Match User normaluser
ForceCommand /bin/bash
或直接禁止 SFTP:
Subsystem sftp /bin/false
⚠️ 这会影响所有用户。
yum install rssh
配置 /etc/rssh.conf 关闭 sftp。
-R 是 OpenSSH 6+ 支持| 需求 | 方案 |
|---|---|
| 某用户 SFTP 只读 | ForceCommand internal-sftp -R |
| 所有用户禁止写 | 目录权限 555 |
| 完全禁止 SFTP | Subsystem sftp /bin/false |
| 精细控制 | ACL |
如果你能说明:
我可以给你一份可直接用的配置模板。