温馨提示×

Linux SFTP如何限制用户

小樊
48
2026-07-31 13:09:55
栏目: 智能运维

在 Linux 上限制 SFTP 用户,常见目标是:只能使用 SFTP、不能 SSH 登录、只能访问指定目录。下面按最常用、最安全的方式给你一个完整指南。


一、最推荐方案:使用 internal-sftp + ChrootDirectory

这是 OpenSSH 官方推荐 的方式,安全、稳定。

场景目标

  • 用户只能通过 SFTP 登录
  • 不能执行 shell 命令
  • 只能访问自己的目录(如 /home/sftpuser

二、创建 SFTP 用户

1️⃣ 创建用户

useradd -m -s /sbin/nologin sftpuser
passwd sftpuser

-s /sbin/nologin:禁止 SSH 登录
也可用 /bin/false


2️⃣ 创建 SFTP 根目录(非常关键)

⚠️ ChrootDirectory 必须由 root 拥有,且其他用户不能写

mkdir -p /home/sftpuser/upload
chown root:root /home/sftpuser
chmod 755 /home/sftpuser

chown sftpuser:sftpuser /home/sftpuser/upload

目录结构:

/home/sftpuser/      (root 拥有,755)
└── upload/          (sftpuser 拥有)

三、配置 SSH(核心)

编辑:

vim /etc/ssh/sshd_config

1️⃣ 确保启用 sftp

确认存在:

Subsystem sftp internal-sftp

2️⃣ 添加 SFTP 用户限制

在文件末尾添加:

Match User sftpuser
    ChrootDirectory /home/sftpuser
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

✅ 说明:

  • ChrootDirectory:限制根目录
  • ForceCommand internal-sftp:禁止 shell
  • 禁止端口转发

3️⃣ 重启 SSH

systemctl restart sshd
# 或
service ssh restart

四、测试 SFTP

sftp sftpuser@服务器IP

✅ 成功示例:

sftp> pwd
Remote working directory: /upload

五、限制多个用户(推荐方式)

方式 1:用户组限制(推荐)

groupadd sftpusers
usermod -aG sftpusers sftpuser

修改 sshd_config:

Match Group sftpusers
    ChrootDirectory /home/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

这样:

  • 所有 sftpusers 组用户自动受限
  • 目录为 /home/用户名

六、常见错误 & 排查

❌ 登录失败:broken pipe / chroot failed

原因:

  • ChrootDirectory 不是 root 拥有
  • ChrootDirectory 权限不是 755
  • 用户有写权限

✅ 正确:

chown root:root /home/sftpuser
chmod 755 /home/sftpuser

❌ 无法上传文件

解决:

  • 在 chroot 内创建可写子目录
  • 子目录归用户所有

七、进阶限制(可选)

1️⃣ 禁止特定 IP

Match User sftpuser
    DenyUsers sftpuser

或结合 sshd_config + 防火墙


2️⃣ 限制 SFTP 访问速度(配合 tc)

SSH 本身不支持限速,需系统级实现。


3️⃣ 日志审计

Subsystem sftp internal-sftp -l INFO

查看:

journalctl -u sshd

八、总结(速查表)

需求 实现方式
禁止 SSH /sbin/nologin
限制目录 ChrootDirectory
强制 SFTP ForceCommand internal-sftp
多用户 Match Group
安全 目录权限必须 root

如果你愿意,我可以:

  • ✅ 给你 CentOS / Ubuntu 专用配置
  • ✅ 出 Docker / 云服务器场景
  • ✅ 做 只读 / 只写 / 多用户隔离方案

直接告诉我你的系统版本和使用场景即可。

0