SFTP(SSH 文件传输协议)是一种安全文件协议,用于通过加密的 SSH 传输会话访问、管理和传输文件。 安全第一是系统管理员的经验法则。 在某些情况下,我们需要允许远程用户访问我们系统上的文件系统,但您不想让他们获得 shell。 这将为您提供一个安全通道,以提供对特定文件和目录的有限访问。
本教程将帮助您在 Debian 11 系统上设置仅 SFTP 访问(无 shell 访问)。 它将在您的系统上创建一个 chroot 环境,以将 SFTP 用户限制在特定目录中。 此外,它将只允许 SFTP 访问,而不能对用户进行 SSH 访问。
先决条件
- 正在运行的 Debian 11 Bullseye Linux 系统
- 你必须有 sudo 具有 shell 访问权限的特权帐户
步骤 1 – 创建新用户
首先,新建一个用户连接sftp服务器。 以下命令将创建一个名为的新帐户 用户 没有外壳访问。 您可以使用您选择或要求的任何名称。
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 必须具有具有适当权限的根所有权和组。 要设置该权限,请键入:
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 配置 sshd
接下来,您需要配置 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
仔细检查所有设置是否正确。 然后保存更改并重新启动 SSH 服务以应用更改。
sudo systemctl restart ssh
一切都完成了,在您的 Debian 系统上成功创建了仅使用 SFTP。 现在尝试使用新用户的凭据登录远程系统,并检查是否一切正常。
第 4 步 – 连接到 SFTP
可以使用命令行或 Filezilla 或 WinSCP 等图形应用程序连接到远程 SFTP 服务器。 在本教程中,我将向您展示连接 SFTP 服务器的两种方法。
Linux 用户可以使用 sftp 命令行实用程序连接到远程 sftp 实例。
sftp [email protected]
[email protected]'s password: sftp>
GUI 界面或 Windows 用户可以使用图形 sftp 客户端。 例如,使用 Filezilla 客户端连接远程系统上的远程 sftp 帐户。