文章目录
在本教程中,我们将讨论如何将SFTP用户限制为他们的主目录或特定目录。这意味着用户只能访问其各自的主目录,而不能访问整个文件系统。
限制用户的主目录至关重要,尤其是在共享服务器环境中,这样,未经授权的用户就不会偷窥其他用户的文件和文件夹。
重要说明:还请注意,本文的目的是仅提供SFTP访问,而不提供SSH登录,通过遵循本文将拥有执行文件传输的权限,但不允许进行远程SSH会话。
建议阅读: 使用Chrooted Jail限制SSH用户访问某些目录
1. 将用户限制到主目录
在本节中,我们将创建一个名为sftpgroup的新组,并为用户帐户分配正确的所有权和权限。有两种选择将用户限制在主目录或特定目录中,我们将在本文中同时看到两种方式。
1.1 创建或修改用户和组
让我们将现有用户限制为例如tecmint他/她的主目录/home/tecmint。为此,您需要使用groupadd命令创建一个新的sftpgroup组,如下所示:
#groupadd sftpgroup
接下来,将用户“ tecmint”分配给sftpgroup组。
#usermod -G sftpgroup tecmint
例如,您也可以使用useradd命令创建一个新用户,senthil并将该用户分配给sftpusers组。
#adduser sendhil -g sftpgroup -s /sbin/nologin
#passwd tecmint
1.2 修改SSH配置文件
打开并将以下行添加到/etc/ssh/sshd_config配置文件。
Subsystem sftp internal-sftp
Match Group sftpgroup
ChrootDirectory /home
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
保存并退出文件,重新启动sshd服务以使新更改生效。
# systemctl restart sshd
OR
# service sshd restart
如果将多个用户chroot到同一个目录,则应更改每个用户的主目录的权限,以防止所有用户浏览其他用户的主目录。
# chmod 700 /home/tecmint or chmod 755 /home/tecmint
1.3 验证SSH和SFTP用户登录
现在,是时候从本地系统检查登录信息了。尝试从本地系统SSH远程系统。
#SSH tecmint@192.168.1.150
这里,
- tecmint –远程系统的用户名。
- 192.168.1.150 –远程系统的IP地址。
输出:
tecmint@192.168.1.150's password:
Could not chdir to home directory /home/tecmint: No such file or directory
This service allows sftp connections only.
Connection to 192.168.1.150 closed.
然后,使用SFTP访问远程系统。
# sftp tecmint@192.168.1.150
输出:
tecmint@192.168.1.150's password:
Connected to 192.168.1.150.
sftp>
让我们检查当前的工作目录:
# sftp pwd
Remote working directory: /
# sftp ls
tecmint
2. 将用户限制到特定目录
在前面的示例中,我们将现有用户限制为主目录。现在,我们将看到如何将新用户限制为自定义目录。
2.1 创建组和新用户
创建一个新组sftpgroup。
#groupadd sftpgroup
接下来,为SFTP组创建目录,并为root用户分配权限。
#mkdir -p /sftpusers/chroot
#chown root:root /sftpusers/chroot/
管理员root属主和属组拥有查看成员目录的所有权,要确保叶子目录的父级文件目录的拥有者都是 root:root。
接下来,为每个用户创建新目录,他们将拥有对这些目录的完全访问权限。例如,我们将tecmint使用以下一系列命令创建具有正确组权限的用户及其新主目录。
# adduser tecmint -g sftpgroup -s /sbin/nologin
# passwd tecmint
# mkdir /sftpusers/chroot/tecmint
# chown tecmint:sftpgroup /sftpusers/chroot/tecmint/
# chmod 700 /sftpusers/chroot/tecmint/ or chmod 755 /home/tecmint/tecmint/
sftpgroup 属组包含 tecmint 用户,这样可以方便多个用户绑定到属组访问同一目录,如果是不同用户访问不同目录就要单独设置。这样 tecmint 用户拥有 tecmint 文件夹的所有权。
2.2 配置SSH以进行SFTP访问
在文件末尾修改或添加以下行:
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match Group sftpgroup
ChrootDirectory /sftpusers/chroot/
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
注意:问题来了,一般大家出现问题是在ChrootDirectory directory上,这个地方的目录不能直接配置到叶子目录,需要配置到他的上一级;
目录权限设置要遵循2点:
- ChrootDirectory 叶子目录的父级文件夹权限,属主和属组必须是 root ,叶子目录的父级文件夹的权限分配为chmod 755 parentDir;
- ChrootDirectory 设置上级文件夹权限,只有属主能拥有写权限,最大设置只能是755
保存并退出文件。重新启动sshd服务以使保存的更改生效。
# systemctl restart sshd
OR
# service sshd restart
就这样,您可以使用上面“验证SSH和SFTP登录”中提供的步骤登录到远程SSH和SFTP服务器进行检查。
请注意,此方法将禁用外壳程序访问,即您无法使用SSH访问远程系统的外壳程序会话。您只能通过SFTP访问远程系统,并与本地和远程系统进行文件传输。
3. 结论
现在您知道了如何在Linux中使用Chroot环境限制用户的主目录。如果您觉得这很有用,请在您的社交网络上分享此文章,并在下面的评论部分中告诉我们,是否还有其他方法可以限制用户的主目录。
4. 参考
How to Restrict SFTP Users to Home Directories Using chroot Jail
使用 chroot 监狱限制 SSH 用户访问指定目录