如果您是管理 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
group.
如果这是新设置并且用户不存在,您可以创建一个新的用户帐户通过输入:
sudo useradd -g sftponly -s /bin/false -m -d /home/username username
- The
-g sftponly
选项会将用户添加到 sftponly 组。
- The
-s /bin/false
选项设置用户的登录 shell。通过将登录 shell 设置为/bin/false
用户将无法通过 SSH 登录服务器。
- The
-m -d /home/username
options 告诉 useradd 创建用户主目录。
设置强密码对于新创建的用户:
sudo passwd username
否则,如果您要限制的用户已经存在,将用户添加到 sftponly 组并更改用户的 shell:
sudo usermod -G sftponly -s /bin/false username2
用户主目录必须由 root 所有并具有755 权限
:
sudo chown root: /home/username
sudo 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}
如果 Web 应用程序正在使用用户的public_html
目录作为文档根,这些更改可能会导致权限问题。例如,如果您正在运行 WordPress,则需要创建一个 PHP 池,该池将以拥有文件的用户身份运行,并将 Web 服务器添加到sftponly
group.
配置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
The ChrootDirectory
指令指定 chroot 目录的路径。%h
表示用户主目录。此目录必须由 root 用户拥有,并且任何其他用户或组都不可写入。
修改 SSH 配置文件时要格外小心。错误的配置可能会导致SSH服务无法启动。
完成后,保存文件并重新启动 SSH 服务以应用更改:
sudo systemctl restart ssh
在 CentOS 和 Fedora 中,ssh 服务被命名为sshd
:
sudo systemctl restart sshd
测试配置#
现在您已经配置了 SFTP chroot,您可以尝试使用 chroot 用户的凭据通过 SFTP 登录远程计算机。在大多数情况下,您将使用桌面 SFTP 客户端,例如文件齐拉但在这个例子中,我们将使用sftp 命令
.
使用 sftp 命令打开 SFTP 连接,后跟远程服务器用户名和服务器 IP 地址或域名:
sftp username@192.168.121.30
系统将提示您输入用户密码。连接后,远程服务器将显示一条确认消息,并且sftp>
prompt:
username@192.168.121.30's password:
sftp>
Run the pwd
命令,如下所示,如果一切正常,该命令应该返回/
.
sftp> pwd
Remote working directory: /
您还可以使用以下命令列出远程文件和目录ls
命令,您应该看到我们之前创建的目录:
sftp> ls
public_html uploads
结论#
在本教程中,您学习了如何在 Linux 服务器上设置 SFTP Chroot Jail 环境并限制用户对其主目录的访问。
默认情况下,SSH 侦听端口 22。更改默认 SSH 端口通过降低自动攻击的风险,为您的服务器添加额外的安全层。您可能还想设置一个基于 SSH 密钥的身份验证并无需输入密码即可连接到服务器。
如果您有任何问题或反馈,请随时发表评论。