温馨提示×

如何禁止linux sftp写文件

小樊
79
2026-09-05 03:23:53
栏目: 智能运维

在 Linux 上“禁止 SFTP 写文件”通常有多种实现方式,取决于你是完全禁止写、只允许读,还是对特定用户/目录限制。下面按常见场景说明。


一、最常用:使用 internal-sftp + 只读权限(推荐)

1. 修改 sshd_config

sudo vim /etc/ssh/sshd_config

确保有以下配置(或新增):

Subsystem sftp internal-sftp

2. 对指定用户限制为只读 SFTP

Match User sftpuser
    ChrootDirectory /sftp
    ForceCommand internal-sftp -R

说明:

  • -R 参数:只读 SFTP(禁止写、删除、重命名)
  • ChrootDirectory:用户根目录(必须是 root 拥有,且 755)

3. 目录权限设置

sudo chown root:root /sftp
sudo chmod 755 /sftp

用户子目录(如需):

sudo mkdir /sftp/upload
sudo chown sftpuser:sftpuser /sftp/upload
sudo chmod 555 /sftp/upload

4. 重启 ssh

sudo systemctl restart sshd

✅ 效果:该用户可通过 SFTP 登录,但不能上传、修改、删除文件


二、只允许某些目录只读(更细粒度)

如果不使用 -R,而是控制目录权限:

chmod 555 /sftp/read-only
chmod 755 /sftp/writeable

SFTP 本身不突破 Linux 文件权限。


三、使用 ACL 禁止写(针对已有用户)

setfacl -R -m u:sftpuser:r-x /data
setfacl -R -m u:sftpuser:-w- /data  # 显式禁止写

四、完全禁止 SFTP(只允许 SSH)

Match User normaluser
    ForceCommand /bin/bash

或直接禁止 SFTP:

Subsystem sftp /bin/false

⚠️ 这会影响所有用户。


五、使用 rssh / scponly(旧方案,不推荐)

yum install rssh

配置 /etc/rssh.conf 关闭 sftp。


六、常见坑提醒

  1. ChrootDirectory 必须 root 拥有
  2. 不能给用户写权限又想只读
  3. -R 是 OpenSSH 6+ 支持
  4. SFTP 不等于 FTP,受 Linux 权限严格控制

总结(快速选择)

需求 方案
某用户 SFTP 只读 ForceCommand internal-sftp -R
所有用户禁止写 目录权限 555
完全禁止 SFTP Subsystem sftp /bin/false
精细控制 ACL

如果你能说明:

  • 是 所有用户还是特定用户
  • 是否使用 Chroot
  • 系统版本(CentOS / Ubuntu)

我可以给你一份可直接用的配置模板。

0 踩