温馨提示×

怎样ubuntu限制sftp目录

小樊
56
2026-10-05 06:31:06
栏目: 智能运维

在 Ubuntu 上限制 SFTP 用户只能访问指定目录(即 chroot SFTP),通常使用 OpenSSH 自带的 internal-sftp + ChrootDirectory 来实现,不需要额外安装 FTP 服务。

下面是一套标准、可用、安全的做法。


一、创建 SFTP 用户和组

sudo groupadd sftpusers
sudo useradd -m -g sftpusers -s /usr/sbin/nologin sftpuser
sudo passwd sftpuser

说明:

  • /usr/sbin/nologin:禁止 SSH 登录,仅允许 SFTP
  • sftpusers:用于统一管理的 SFTP 用户组

二、创建并授权 SFTP 根目录

假设限制目录为 /sftp/sftpuser

sudo mkdir -p /sftp/sftpuser
sudo chown root:root /sftp/sftpuser
sudo chmod 755 /sftp/sftpuser

⚠️ 重要规则:

  • Chroot 目录 必须归属 root
  • 权限不能大于 755

三、创建可写子目录(用户实际写文件的地方)

sudo mkdir /sftp/sftpuser/upload
sudo chown sftpuser:sftpusers /sftp/sftpuser/upload

用户登录后只能看到 upload 目录并可写入。


四、配置 SSH(关键)

编辑 SSH 配置:

sudo nano /etc/ssh/sshd_config

1️⃣ 注释或确认原 Subsystem

# Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

2️⃣ 添加 SFTP 限制配置

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

%u 会自动替换为用户名(如 sftpuser)


五、重启 SSH 服务

sudo systemctl restart ssh

六、测试 SFTP 登录

sftp sftpuser@localhost

登录后:

  • 根目录是 /
  • 实际对应服务器 /sftp/sftpuser
  • 只能访问 upload

七、常见问题排查

❌ 登录失败:bad ownership or modes for chroot

原因:

  • Chroot 目录不是 root:root
  • 权限不是 755

✅ 解决:

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

❌ 能登录但无法写文件

原因:

  • Chroot 根目录不可写(正常)
  • 没创建子目录或权限不对

✅ 解决:

  • 使用 upload 子目录

八、可选增强(进阶)

  • 限制磁盘配额(quota)
  • 多用户共用一个目录
  • 使用密钥登录代替密码
  • 日志审计 SFTP 操作

如果你需要 多用户共享目录 / 只读 SFTP / 密钥登录 / Docker 环境,可以继续问我。

0 踩