SFTP(SSH 文件传输协议)是一种安全文件协议,用于通过加密的 SSH 传输会话访问、管理和传输文件。安全第一是系统管理员的经验法则。在某些情况下,我们需要允许远程用户访问我们系统上的文件系统,但您不想允许他们获得 shell。这将为您提供一个安全通道来提供对特定文件和目录的有限访问。
本教程将帮助您在 Debian 11 系统上设置仅 SFTP 访问(无 shell 访问)。它将在您的系统上创建一个 chroot 环境,以将 SFTP 用户限制为只能访问特定目录。此外,它仅允许用户进行 SFTP 访问,而不允许 SSH 访问。
先决条件
正在运行的 Debian 11 Bullseye Linux 系统
您必须拥有具有 shell 访问权限的 sudo 特权帐户
第 1 步 – 创建新用户
首先,创建一个新用户来连接 sftp 服务器。以下命令将创建一个名为的新帐户sftpuser 没有 shell 访问权限。您可以使用您选择或要求的任何名称。
sudo adduser --shell /bin/false sftpuser
步骤 2 – 创建用于 SFTP 访问的目录
您已经为 sftp 创建了一个用户。现在,创建一个目录以配置为 sftp 的 chroot。对于这个例子,我将创建一个/var/sftp 目录。该目录必须具有 root 所有权才能配置为 chroot 目录。因此,我们将在 /var/sftp 下创建一个子目录,对 sftp 帐户具有写权限。
使用以下命令创建目录结构:
sudo mkdir -p /var/sftp/files
接下来,我们必须对目录设置适当的权限,以配置为具有写入权限的 chroot 访问权限。这里 /var/sftp 必须具有 root 所有权和具有适当权限的组。要设置该权限,请键入:
sudo chown root:root /var/sftp
sudo chmod 755 /var/sftp
现在,更改权限"files"
目录以允许对 sftpuser 进行写访问。要设置该权限,请键入:
sudo chown sftpuser:sftpuser /var/sftp/files
一旦 sftpuser 连接到服务器,就会将 /var/sftp 作为根目录。他无法访问其外部的文件系统。此外,用户只能读取/写入“files”目录下的文件。
步骤 3 – 仅为 SFTP 配置 ssh
接下来,您需要配置 SSH 服务器以允许“sftpuser”仅通过 sFTP 连接服务器,而无需 shell 访问。要进行必要的更改,请编辑 SSH 配置文件。
sudo nano /etc/ssh/sshd_config
并在文件末尾添加以下设置。
Match User sftpuser
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
Chroot Configuration for SFTP User 仔细检查所有设置是否正确。然后保存更改并重新启动 SSH 服务以应用更改。
sudo systemctl restart ssh
全部完成后,您的 Debian 系统上就成功创建了仅使用 SFTP 的功能。现在尝试使用新用户的凭据登录远程系统,并检查一切是否正常工作。
第 4 步 – 连接到 SFTP
可以使用命令行或 Filezilla 或 WinSCP 等图形应用程序连接到远程 SFTP 服务器。在本教程中,我将向您展示连接 SFTP 服务器的两种方法。
Linux 用户可以使用 sftp 命令行实用程序连接到远程 sftp 实例。
sftp sftpuser@sftp.tecadmin.net
sftpuser@sftp.tecadmin.net's password:
sftp>
GUI界面或Windows用户可以使用图形化的sftp客户端。例如,使用 Filezilla 客户端连接远程系统上的仅远程 sftp 帐户。
验证没有 shell 访问权限:
由于此帐户配置为仅 SFTP 连接。因此,如果任何用户尝试通过 SSH 连接,身份验证成功后将立即断开连接。用户将收到以下消息:
ssh sftpuser@sftp.tecadmin.net
sftpuser@sftp.tecadmin.net's password:
This service allows sftp connections only.
Connection to sftp.tecadmin.net closed.
结论
在本操作指南中,您学习了如何为 SFTP 用户创建 chroot 监狱环境,而无需对服务器进行 shell 访问。 Chroot 环境通过阻止用户访问定义目录之外的文件来保护文件系统。本教程是使用 Debian 11 Bullseye 系统创建和测试的,但这也适用于其他 Debian 版本。