首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >创建只能用SFTP协议的用户

创建只能用SFTP协议的用户

作者头像
YaoQi
发布2026-05-20 13:09:42
发布2026-05-20 13:09:42
1290
举报

SFTP - SSH File Transfer Protocol(SSH 文件传输协议)

他虽然也用 ssh 的 22 端口,但确是一套独立的协议,和 scp 命令完全不同:

  1. SFTP是一个独立的子系统。客户端和服务器之间通过标准的 SFTP 协议指令(open, read, write, close等)来交互。
  2. SCP工作方式非常原始。它实际上是在远程服务器上暗中启动一个隐藏的 Shell 进程,执行类似 cp 的命令,并通过管道传输数据。

当然和 FTP,FTPS 更完全不同。FTP是20/21端口,主动被动模式的那个。FTPS 就是使用了域名证书的FTP。他俩的关系就和HTTP和HTTPS一样。

配置了普通ssh用户,既可以使用SFTP功能,但不安全,他也有机会去执行其他命令。若只想要一个传输文件的账号,我们需要做些限制。

第一步:创建用户

代码语言:javascript
复制
# 1. 创建专用SFTP用户组
sudo groupadd sftpusers

# 2. 创建用户,将其加入SFTP组,并禁用Shell
# -d: 指定用户家目录(Chroot根目录)
# -s: 指定Shell为/sbin/nologin,禁止SSH登录
# -g: 指定主组为sftpusers
sudo useradd -d /data/sftp/sftpuser -s /sbin/nologin -g sftpusers sftpuser
# 3. 设置用户密码
sudo passwd sftpuser

第二步:创建相关路径

代码语言:javascript
复制
# 1. 创建Chroot根目录(用户将被限制在此目录内)
sudo mkdir -p /data/sftp
# 2. 设置目录属主为root,权限为755(用户可读可进入,不可写)
sudo chown root:root /data/sftp
sudo chmod 755 /data/sftp
# 3. 在Chroot根目录下创建用户家路径
sudo mkdir /data/sftp/sftpuser
# 4. 将子目录的属主设置为用户,赋予其读写权限
sudo chown sftpuser:sftpusers /data/sftp/sftpuser
sudo chmod 750 /data/sftp/sftpuser

第三步:配置sftp用户

编辑 /etc/ssh/sshd_config,大概在最后的位置写入

代码语言:javascript
复制
Subsystem sftp internal-sftp
Match User sftpuser
    # 将用户限制在其家目录
    ChrootDirectory /data/sftp/
    # 强制使用内部SFTP,禁用Shell
    ForceCommand internal-sftp
    # 允许的登陆方式
    PubkeyAuthentication yes
    PasswordAuthentication yes
    # 禁用不必要的转发功能,增强安全性
    PermitTTY no
    PermitTunnel no
    AllowAgentForwarding no
    AllowTcpForwarding no
    X11Forwarding no

重启sshd服务: systemctl reload sshd

这样,用户就被锁在了特定路径中,没有执行其他命令的权限,不能ssh登录了。

使用 sftp 命令试下:

代码语言:javascript
复制
sftp sftpuser@x.x.x.x

配置 ssh key 登陆

和普通配置免密登陆是一样的(使用ssh-keygen 生成私钥公钥对,本文略), 注意上文 sshd_config 配置中PubkeyAuthentication 配为yes

代码语言:javascript
复制
# 1. 进入该用户的家目录
cd /data/sftp/sftpuser
# 2. 创建 .ssh 目录,并设置严格权限(必须是 700)
mkdir .ssh
chown sftpuser:sftpusers .ssh
chmod 700 .ssh
# 创建文件
touch /data/sftp/sftpuser/.ssh/authorized_keys
# 设置严格权限(必须是 600)并修改属主
chmod 600 /data/sftp/sftpuser/.ssh/authorized_keys
chown sftpuser:sftpusers /data/sftp/sftpuser/.ssh/authorized_keys

将你本地电脑上的公钥(通常是 ~/.ssh/id_rsa.pubid_ed25519.pub)内容,写入到服务器上的 authorized_keys 文件中。

使用如下命令登录:

代码语言:javascript
复制
sftp sftpuser@172.16.1.69
# 或
sftp -i ~/.ssh/id_ed25519 sftpuser@172.16.1.69

当然,如果你想有更强大的管理功能,也可以直接使用之前介绍过的《SFTPGo 托管文件传输 (MFT) 平台

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 漫跑的小兔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档