温馨提示×

Ubuntu SFTP如何添加用户

小樊
39
2026-08-28 01:58:04
栏目: 智能运维

在 Ubuntu 上添加 SFTP 用户 并限制其只能使用 SFTP(不能 SSH 登录),常见做法是创建用户 + 设置家目录权限 + 使用 internal-sftp。下面给你一套标准、安全的做法


一、创建 SFTP 用户

1️⃣ 创建用户(不允许 SSH 登录)

sudo adduser sftpuser

如果只想用于 SFTP,可禁止 shell 登录:

sudo usermod -s /usr/sbin/nologin sftpuser

或:

sudo usermod -s /bin/false sftpuser

二、创建 SFTP 专用目录

⚠️ SFTP 的根目录必须是 root 拥有,且其他用户不能写

1️⃣ 创建目录结构

sudo mkdir -p /sftp/sftpuser/upload

2️⃣ 设置权限(非常关键)

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

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

✅ 正确权限结构:

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

三、配置 SSH(最重要)

编辑 SSH 配置:

sudo nano /etc/ssh/sshd_config

1️⃣ 确认或添加以下内容

Subsystem sftp internal-sftp

2️⃣ 在文件末尾添加 SFTP 用户限制

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

如果有多个用户,也可用 Match Group sftpusers


四、重启 SSH 服务

sudo systemctl restart ssh

五、测试 SFTP 登录

在本地或另一台机器:

sftp sftpuser@服务器IP

✅ 成功后:

  • 只能看到 /sftp/sftpuser
  • 不能访问系统其他目录
  • 不能 SSH 登录

六、常见问题排查

❌ 登录失败:broken pipe / connection closed

99% 是权限问题

  • ChrootDirectory 不能是用户可写
  • 必须是 root:root

查看日志:

sudo tail -f /var/log/auth.log

七、可选:创建 SFTP 用户组(推荐)

sudo groupadd sftpusers
sudo usermod -aG sftpusers sftpuser

sshd_config 中:

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

八、安全建议 ✅

  • 禁用 SSH shell
  • 使用密钥认证(可选)
  • 定期更新 OpenSSH
  • 不要给 root 目录权限

如果你愿意,我可以帮你:

  • ✅ 写一个 一键脚本
  • ✅ 配置 多用户 SFTP
  • ✅ 限制 只能访问指定目录
  • ✅ 配置 SFTP + chroot + 公钥登录

你现在用的是 Ubuntu 哪个版本

0