如何设置SFTP Chroot监狱

如果您是管理Linux服务器的系统管理员,则可能需要向某些用户授予SFTP访问权限,才能将文件上传到其主目录。 默认情况下,可以通过SSH,SFTP和SCP登录到系统的用户可以浏览整个文件系统,包括其他用户的目录。 如果这些用户是受信任的,那么这可能不是问题,但是如果您不希望已登录的用户在系统中导航,则需要限制用户对其主目录的访问。 这增加了额外的安全层,尤其是在具有多个用户的系统上。

在本教程中,我们将说明如何设置SFTP Chroot Jail环境,该环境将限制用户进入其主目录。 用户将仅具有SFTP访问,SSH访问将被禁用。 这些说明适用于任何现代Linux发行版,包括Ubuntu,CentOS,Debian和Fedora。

创建一个SFTP组

与其为每个用户分别配置OpenSSH服务器,我们将创建一个新组并将所有chroot用户添加到该组中。

运行以下命令 groupadd 命令创建 sftponly 用户组:

sudo groupadd sftponly

您可以根据需要命名组。

将用户添加到SFTP组#

下一步是将您要限制的用户添加到 sftponly 组。

如果这是一个新设置,并且该用户不存在,则可以通过键入以下内容来创建新的用户帐户:

sudo useradd -g sftponly -s /bin/false -m -d /home/username username
  • -g sftponly 选项会将用户添加到sftponly组。
  • -s /bin/false 选项设置用户的登录shell。 通过将登录shell设置为 /bin/false 用户将无法通过SSH登录服务器。
  • -m -d /home/username 选项告诉useradd创建用户主目录。

为新创建的用户设置一个强密码:

sudo passwd username

否则,如果您要限制的用户已经存在,则将该用户添加到 sftponly 分组并更改用户的外壳:

sudo usermod -G sftponly -s /bin/false username2

用户主目录必须由root拥有,并具有 755 权限:

sudo chown root: /home/usernamesudo chmod 755 /home/username

由于用户的主目录归root用户所有,因此这些用户将无法在其主目录中创建文件和目录。 如果用户家中没有目录,则需要创建用户将对其具有完全访问权限的新目录。 例如,您可以创建以下目录:

sudo mkdir /home/username/{public_html,uploads}sudo chmod 755 /home/username/{public_html,uploads}sudo chown username:sftponly /home/username/{public_html,uploads}

如果网络应用程序正在使用用户的 public_html 目录作为文档根目录,这些更改可能会导致权限问题。 例如,如果您运行的是WordPress,则需要创建一个PHP池,该池将以拥有文件的用户身份运行,并将网络服务器添加到 sftponly 组。

配置SSH#

SFTP是SSH的子系统,并支持所有SSH身份验证机制。

打开SSH配置文件 /etc/ssh/sshd_config 使用您的文本编辑器:

sudo nano /etc/ssh/sshd_config

搜索以开头的行 Subsystem sftp,通常在文件末尾。 如果该行以哈希开头 # 删除哈希 # 并将其修改为如下所示:

/ etc / ssh / sshd_config

Subsystem sftp internal-sftp

在文件末尾,以下设置块:

/ etc / ssh / sshd_config

Match Group sftponly
  ChrootDirectory %h
  ForceCommand internal-sftp
  AllowTcpForwarding no
  X11Forwarding no

ChrootDirectory 伪指令指定chroot目录的路径。 %h 表示用户主目录。 该目录必须由root用户拥有,并且不能由任何其他用户或组写入。

修改SSH配置文件时要格外小心。 错误的配置可能会导致SSH服务无法启动。

完成后,保存文件并重新启动SSH服务以应用更改:

sudo systemctl restart ssh

在CentOS和Fedora中,ssh服务被命名为 sshd

sudo systemctl restart sshd

测试配置

现在,您已经配置了SFTP chroot,您可以尝试使用chroot用户的凭据通过SFTP登录到远程计算机。 在大多数情况下,您将使用台式机SFTP客户端(例如FileZilla),但在此示例中,我们将使用sftp命令。

使用sftp命令以及远程服务器用户名以及服务器IP地址或域名来打开SFTP连接:

sftp [email protected]

系统将提示您输入用户密码。 连接后,远程服务器将显示一条确认消息,并且 sftp> 提示:

[email protected]'s password:
sftp>

跑过 pwd 命令,如下所示,如果一切正常,命令应返回 /

sftp> pwd
Remote working directory: /

您也可以使用以下命令列出远程文件和目录 ls 命令,您应该看到我们先前创建的目录:

sftp> ls
public_html  uploads  

结论#

在本教程中,您学习了如何在Linux服务器上设置SFTP Chroot Jail环境,以及如何限制用户对其主目录的访问。

默认情况下,SSH侦听端口22。更改默认SSH端口可降低自动攻击的风险,从而为服务器增加一层额外的安全保护。 您可能还需要设置基于SSH密钥的身份验证并连接到服务器,而无需输入密码。

如果您有任何疑问或反馈,请随时发表评论。

ssh sftp安全

Sidebar