温馨提示×

Ubuntu SFTP权限怎么设置

小樊
44
2026-09-29 10:30:38
栏目: 智能运维

在 Ubuntu 上配置 SFTP 权限,通常目标有两类:

  1. 限制用户只能通过 SFTP 登录,不能 SSH
  2. 限制用户只能访问自己的目录(Chroot)

下面按最常见的场景一步步说明。


一、创建 SFTP 用户

sudo adduser sftpuser

(按提示设置密码,其他可留空)


二、设置 SFTP 专用目录(推荐)

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

⚠️ 注意:

  • Chroot 目录必须属于 root
  • 用户目录可以属于用户自己

三、修改 SSH 配置(关键)

编辑配置文件:

sudo nano /etc/ssh/sshd_config

1️⃣ 禁用该用户的 SSH 登录(仅 SFTP)

在文件末尾添加:

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

如果你的 Ubuntu 较新(OpenSSH ≥ 7.5),更推荐用 用户组方式:

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

然后:

sudo groupadd sftp
sudo usermod -aG sftp sftpuser

四、目录权限要点(非常重要)

Chroot 目录权限必须满足:

/sftp            → root:root   755
/sftp/sftpuser   → sftpuser:sftpuser   755

示例:

sudo chmod 755 /sftp
sudo chmod 755 /sftp/sftpuser

❌ 错误示例(会导致登录失败):

  • Chroot 目录属于用户
  • 权限是 777

五、重启 SSH 服务

sudo systemctl restart ssh

六、测试 SFTP 登录

sftp sftpuser@服务器IP

或用 FileZilla:

  • 协议:SFTP
  • 主机:服务器 IP
  • 用户名 / 密码

七、常见问题

❓ 登录失败:broken pipe

原因:

  • Chroot 目录权限不对
  • 目录不是 root 拥有

解决:

sudo chown root:root /sftp/sftpuser

❓ 想让用户有上传权限

在用户目录里再建子目录:

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

八、只允许 SFTP、不允许 Shell

确认用户 shell:

grep sftpuser /etc/passwd

如果不是 /bin/false 或 /usr/sbin/nologin:

sudo usermod -s /usr/sbin/nologin sftpuser

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

  • 是 单用户 还是 多用户
  • 是否要 只读 / 只写 / 读写
  • 是否用 密钥登录

我可以给你一份完全可直接用的配置。

0 踩