温馨提示×

SFTP如何与Ubuntu用户绑定

小樊
44
2026-08-01 12:55:47
栏目: 智能运维

SFTP 与 Ubuntu 用户绑定,通常是指:
让某个 Ubuntu 系统用户只能通过 SFTP 登录,并且只能访问指定目录,不能直接 SSH 登录
下面给你一套标准、安全、常用的做法(基于 OpenSSH 的 internal-sftp)。


一、基本原理

  • SFTP 本质是 SSH 子系统
  • 通过 OpenSSH 配置 限制用户:
    • 只能使用 sftp
    • 不能执行 shell
    • 只能访问指定目录(Chroot)

二、创建 SFTP 专用用户

1️⃣ 创建用户(不分配 shell)

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

/usr/sbin/nologin 表示 禁止 SSH 登录


三、准备 SFTP 目录(非常关键)

⚠️ Chroot 目录必须归 root 所有,且其他用户不能写

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

✅ 最终结构:

/sftp/sftpuser/      (root:root, 755)
└── upload/          (sftpuser:sftpuser)

四、配置 SSH(核心步骤)

编辑 SSH 配置:

sudo nano /etc/ssh/sshd_config

1️⃣ 确认 SFTP 子系统存在

Subsystem sftp internal-sftp

2️⃣ 添加 SFTP 用户限制(推荐放文件末尾)

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

✅ 含义:

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

五、重启 SSH 服务

sudo systemctl restart ssh

六、测试 SFTP 登录

sftp sftpuser@服务器IP

✅ 成功后应看到:

sftp>

✅ 只能看到 /sftp/sftpuser 作为根目录


七、常见问题排查

❌ 登录失败(Permission denied)

检查:

  • Chroot 目录 必须是 root 所有
  • 权限不能大于 755
  • 目录路径必须真实存在
ls -ld /sftp/sftpuser

❌ 能登录但无法上传

✅ 上传目录必须是用户可写:

/sftp/sftpuser/upload

八、多个 SFTP 用户(推荐做法)

方法 1:按用户单独配置

Match User user1
    ChrootDirectory /sftp/user1
    ForceCommand internal-sftp

方法 2:按用户组(更优雅)

sudo groupadd sftpusers
sudo usermod -aG sftpusers sftpuser
Match Group sftpusers
    ChrootDirectory /sftp/%u
    ForceCommand internal-sftp

九、安全建议 ✅

  • ❌ 不要给 SFTP 用户 sudo
  • ✅ 禁用 shell
  • ✅ 使用密钥登录(可选)
  • ✅ 定期审计 /var/log/auth.log

十、总结一句话

SFTP 与 Ubuntu 用户绑定 = 创建用户 + Chroot 目录 + sshd_config 限制


如果你需要:

  • 只允许密钥登录
  • Docker / 云服务器场景
  • 同时支持 SSH + SFTP
  • Windows 客户端连接示例

可以直接告诉我你的使用场景,我可以给你定制配置。

0