Debian 创建一个纯 SFTP 用户环境

前言

在某些场景下,我们希望给某些用户提供 SFTP 文件上传/下载权限,而不允许他们使用 SSH 登录系统。本文将介绍如何在 Debian 系统上创建一个纯 SFTP 用户环境,只允许使用 SFTP,禁止 SSH shell 访问。


一、前提条件

  • 已安装并启用了 OpenSSH 服务。
  • 拥有一台 Debian 服务器的 root 权限或 sudo 权限。

二、创建 SFTP 用户组和用户

1
2
3
4
5
6
7
8
# 创建 SFTP 用户组
sudo groupadd sftpusers

# 创建一个用户,仅允许使用 SFTP,禁用 shell
sudo useradd -m -d /home/sftpuser -s /usr/sbin/nologin -g sftpusers sftpuser

# 设置密码(用于 SFTP 登录)
sudo passwd sftpuser

或者

1
2
# 创建一个用户,仅允许使用 SFTP,禁用 shell
sudo adduser --shell /usr/sbin/nologin --no-create-home sftpuser

如果你只是为了创建账号,不需要填写这些信息,直接按回车(Enter)跳过即可,例如:

1
2
3
4
5
Full Name []:        ← 直接按回车
Room Number []: ← 再按回车
Work Phone []: ← 再按回车
...
Is the information correct? [Y/n]

输入 Y 或直接回车就完成了。


三、配置用户目录权限

OpenSSH 要求 SFTP 的根目录不能被用户写入,因此需要设置一个只读根目录,并在其下创建一个可写子目录:

1
2
3
4
5
6
7
# 设置根目录权限(必须是 root 拥有)
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser

# 创建上传目录并赋予用户权限
sudo mkdir /home/sftpuser/uploads
sudo chown sftpuser:sftpusers /home/sftpuser/uploads

四、配置 OpenSSH 的 SFTP 限制

编辑 SSH 配置文件:

1
sudo nano /etc/ssh/sshd_config

在文件末尾添加以下内容:

1
2
3
4
5
Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no

说明:

  • ChrootDirectory %h:将用户限制在自己的主目录。
  • ForceCommand internal-sftp:强制使用 SFTP。
  • 禁用端口转发和 X11 转发以增强安全性。

五、重启 SSH 服务

1
sudo systemctl restart ssh

六、安全建议

  • 每个用户独立目录 /home/用户名/uploads
  • 建议结合 fail2ban 或防火墙防止暴力破解。
  • 可进一步使用证书认证替代密码。

结语

通过以上步骤,我们成功在 Debian 系统中创建了一个安全、隔离、无法登录 Shell 的 SFTP 用户环境,适合用于文件托管、自动上传等场景。相比直接开放 SSH,这种方式不仅更安全,还能精细控制用户权限。
在实际使用中,建议定期审查 SFTP 用户权限、访问日志,并结合防火墙和审计工具提升系统整体安全性。


⚠️ 免责声明:本文仅供个人学习与技术研究使用。