温馨提示×

Ubuntu SFTP目录怎样限制

小樊
47
2026-09-29 10:35:40
栏目: 智能运维

在 Ubuntu 上限制 SFTP 用户只能访问指定目录(不能 SSH 登录、不能越权),常用且安全的做法是使用 OpenSSH 的 internal-sftp + chroot。下面按“最常用方案”给你讲。


一、核心思路

  • 创建专用 SFTP 用户
  • 禁止该用户 SSH 登录
  • 使用 ChrootDirectory 将其“锁”在某个目录
  • 该目录及上级目录必须 root 拥有、其他用户不可写

二、操作步骤(推荐)

1️⃣ 创建 SFTP 用户

sudo adduser sftpuser

(密码自己设)

禁止 SSH 登录(可选但推荐):

sudo usermod -s /usr/sbin/nologin sftpuser

2️⃣ 创建 SFTP 根目录

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

⚠️ 重点:

  • /sftp
  • /sftp/sftpuser

都必须是 root:root,755


3️⃣ 给用户一个可写目录

chroot 目录本身不能写,所以要建子目录:

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

用户登录后只能看到 upload


4️⃣ 配置 SSH(关键)

编辑:

sudo nano /etc/ssh/sshd_config

注释或删除:

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

添加:

Subsystem sftp internal-sftp

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

如果是多个用户,可用:

Match Group sftp

5️⃣ 重启 SSH

sudo systemctl restart ssh

三、测试 SFTP

sftp sftpuser@服务器IP

登录后:

pwd
# 显示 /upload

✅ 无法访问 /home、/ 等


四、常见问题

❌ 登录失败 / 立刻断开

检查:

sudo ls -ld /sftp /sftp/sftpuser

必须是:

drwxr-xr-x root root

❌ 写不了文件

确认:

/sftp/sftpuser 不能写
/sftp/sftpuser/upload 可写

五、进阶(可选)

  • 多用户 → 用 Match Group sftp
  • 只读用户 → chmod 555
  • 日志审计 → ForceCommand internal-sftp -l INFO
  • 结合防火墙 / fail2ban

如果你愿意,可以告诉我:

  • 是 单用户还是多用户
  • 是否需要 读写分离
  • 是否用 密钥登录

我可以直接给你一份「可复制的配置」。

0 踩