服务器SFTP配置教程:从创建用户到连接验证

SFTP 是在 SSH 加密通道上传输文件的协议,服务器只要运行了 SSH 服务,通常就具备 SFTP 能力,不需要额外装软件。
下面这套流程适合希望在 Linux 服务器上给某个用户开放文件上传下载、同时把他限制在指定目录内的场景。
操作前请确认你有 root 或 sudo 权限,并且已经能通过 SSH 登录服务器。

先想清楚要限制到哪一层目录

SFTP 配置里最容易出错的地方是目录权限。
如果打算用 ChrootDirectory 把用户锁在某个目录里,这个目录本身必须属于 root,并且其他用户不能有写权限,否则 SSH 会拒绝登录。

常见的做法是:

  • 给 SFTP 单独建一个用户组,例如 sftpgroup
  • 给用户指定一个家目录,例如 /data/sftp/user1
  • 家目录归 root 所有,权限设为 755
  • 在家目录下再建一个可写子目录,例如 upload,归该 SFTP 用户所有

这样用户登录后落在自己的家目录,只能进入 upload 等子目录写入,无法跳出这个范围。

创建用户和目录

以下命令以 CentOS、Ubuntu、Debian 等常见发行版为例,路径可按需替换。

# 创建 SFTP 用户组
groupadd sftpgroup

# 创建用户,禁止其通过 SSH 登录 shell,仅用于 SFTP
useradd -g sftpgroup -d /data/sftp/user1 -s /sbin/nologin user1

# 设置登录密码
passwd user1

接着创建目录并调整归属:

mkdir -p /data/sftp/user1/upload
chown root:root /data/sftp/user1
chmod 755 /data/sftp/user1
chown user1:sftpgroup /data/sftp/user1/upload
chmod 755 /data/sftp/user1/upload

这里的关键是:家目录归 root,可写目录归用户。
如果家目录被用户自己拥有,chroot 会失败。

修改 sshd_config 开启 SFTP 子系统

编辑 SSH 配置文件:

vi /etc/ssh/sshd_config

先确认或添加全局的 SFTP 子系统配置。
多数系统默认已有这一行,不要重复添加:

Subsystem sftp internal-sftp

然后在文件末尾追加针对用户组的匹配规则:

Match Group sftpgroup
    ChrootDirectory /data/sftp/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no
    PasswordAuthentication yes

说明几个配置项的作用:

  • ChrootDirectory /data/sftp/%u:%u 会自动替换成用户名,把用户限制在自己的家目录
  • ForceCommand internal-sftp:强制该用户只能使用 SFTP,不能执行普通命令
  • AllowTcpForwarding no 和 X11Forwarding no:关闭端口转发和图形转发,减少风险
  • PasswordAuthentication yes:允许密码登录,如果你只用密钥登录,可以按实际情况调整

保存后检查语法并重启 SSH 服务:

sshd -t
systemctl restart sshd

sshd -t 没有输出通常表示配置语法正确。
重启前建议保留一个已登录的 SSH 会话,避免配置写错后无法远程登录。

用客户端连接验证结果

在本地电脑上用 SFTP 客户端连接,命令行方式如下:

sftp user1@服务器IP

连接成功后执行 pwd,应该显示 /,这代表用户被限制在自己的家目录中。
再执行 ls,应能看到 upload 目录。
进入并尝试上传文件:

cd upload
put 本地文件路径
ls

如果文件出现在列表里,说明读写都正常。
图形客户端如 FileZilla、WinSCP 也可以用相同的主机、端口、用户名和密码连接,协议选择 SFTP。

常见报错和避坑说明

连接失败时,优先查看服务器日志:

tail -f /var/log/secure    # CentOS/RHEL 系
tail -f /var/log/auth.log  # Debian/Ubuntu 系

几种高频情况:

  • 提示 Write failed: Broken pipe 或直接断开:多半是 ChrootDirectory 指向的目录权限不对,确认它归 root 且没有 group/other 写权限
  • 登录后无法上传:可写目录的属主或权限不对,确认 upload 目录归该用户所有
  • 连接被拒绝:检查 SSH 服务是否重启成功、防火墙是否放行 22 端口
  • 用户仍能登录 shell:确认 -s /sbin/nologin 已设置,且 ForceCommand internal-sftp 生效

另外,修改 sshd_config 前建议先备份原文件,例如 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak,出问题时能快速回滚。

几个常见疑问

SFTP 和 FTP 有什么区别? SFTP 走 SSH 加密通道,默认端口 22,传输内容加密;
传统 FTP 明文传输,需要额外配置。
安全性上 SFTP 更省心。

能不能让多个用户共用同一个目录? 可以,但要小心权限。
多用户共享时通常需要设置组权限或使用 ACL,否则容易出现互相覆盖或无法写入的问题。

为什么用户登录后看不到自己上传的文件? 检查是否进错了目录。
chroot 后用户看到的根目录其实是服务器上的家目录,上传前先用 pwd 确认当前位置。

一定要用 internal-sftp 吗? 较新版本的 OpenSSH 推荐用 internal-sftp,它不依赖外部程序,配置更简单。
旧写法 sftp-server 也还能用,但新环境优先选前者。

整体流程就是建用户、配权限、改 SSH、测连接四步。
每一步做完都验证一下结果,比一次性改完再排查要省事得多。
如果你的服务器同时跑着网站或数据库,改 sshd_config 时格外留意不要影响到现有 SSH 登录方式。

分享到:
上一篇
服务器 Samba 共享配置:从安装到权限验证的实操步骤
下一篇
服务器MinIO对象存储:零基础单机部署与验证教程
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意