温馨提示×

怎样限制debian sftp权限

小樊
38
2026-10-06 13:44:43
栏目: 智能运维

在 Debian 上限制 SFTP 用户权限,最常见、最安全的做法是使用 OpenSSH 内置的 SFTP 子系统 + chroot 限制,让用户只能访问自己的目录,不能登录 shell,也不能访问系统其他部分。

下面按推荐程度从高到低说明。


一、推荐方案:SFTP-only + Chroot(最常用)

1. 创建用户(不能登录 shell)

sudo adduser sftpuser
sudo usermod -s /usr/sbin/nologin sftpuser

2. 创建 SFTP 根目录(必须是 root 拥有)

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

3. 创建可写目录

sudo mkdir /sftp/sftpuser/upload
sudo chown sftpuser:sftpuser /sftp/sftpuser/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
    ChrootDirectory /sftp/%u
    ForceCommand internal-sftp

5. 重启 SSH

sudo systemctl restart ssh

✅ 效果:

  • 只能 SFTP
  • 不能 SSH
  • 只能看到 /sftp/sftpuser
  • 不能访问 /、/home 等

二、使用用户组统一管理(推荐多用户)

sudo groupadd sftp
sudo usermod -aG sftp sftpuser

目录结构:

/sftp/
 ├── user1/
 │    └── upload/
 ├── user2/
 │    └── upload/

sshd_config:

Match Group sftp
    ChrootDirectory /sftp/%u
    ForceCommand internal-sftp

三、限制用户只能“上传”或“下载”

只读(不能上传)

sudo chmod 555 /sftp/sftpuser
sudo chmod 755 /sftp/sftpuser/download

只写(不能下载)

sudo chmod 333 /sftp/sftpuser/upload

四、禁止 SFTP 用户执行命令(额外加固)

Match User sftpuser
    ForceCommand internal-sftp

五、常见问题排查

❌ 登录失败:bad ownership on chroot

原因:

  • Chroot 目录 必须由 root 拥有
  • 不能是可写给普通用户

✅ 正确:

chown root:root /sftp/sftpuser

六、进阶(可选)

  • 使用 SSH 密钥登录
  • 使用 fail2ban 防爆破
  • 使用 ACL 精细控制
  • 使用 rssh / scponly(已不推荐)

如果你需要:

  • 限制 IP
  • 限制 速度
  • 限制 文件类型
  • Docker / 云服务器场景

可以告诉我你的具体使用环境,我可以给你更精确配置。

0 踩