如果您是管理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。将登录外壳设置为/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/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池,该池将以拥有这些文件的用户身份运行,并将站点erver添加到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命令打开SFTP连接,后跟远程服务器用户名和服务器IP地址或域名:
sftp username@192.168.121.30
系统将提示您输入用户密码。连接后,远程服务器将显示确认消息和sftp>
提示:
username@192.168.121.30's password:
sftp>
运行pwd
命令,如下所示,如果一切正常,该命令应返回/
。
sftp> pwd
Remote working directory: /
您还可以使用ls
命令列出远程文件和目录,并且应该看到我们先前创建的目录:
sftp> ls
public_html uploads
结论
在本教程中,您学习了如何在Linux服务器上设置SFTP Chroot Jail环境以及如何限制用户对其主目录的访问。
默认情况下,SSH侦听端口22。更改默认SSH端口可通过降低自动攻击的风险为服务器增加一层安全保护。您可能还需要设置基于 SSH密钥的身份验证,然后不输入密码即可连接到服务器。
如果您有任何问题或反馈,请随时发表评论。