使用chroot限制SFTP用户到主目录

本文介绍如何在Linux中使用Chroot环境将SFTP用户限制在其主目录或特定目录内,确保服务器安全。通过创建特定组和修改SSH配置,用户只能访问授权的文件夹。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在本教程中,我们将讨论如何将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点:

  1. ChrootDirectory 叶子目录的父级文件夹权限,属主和属组必须是 root ,叶子目录的父级文件夹的权限分配为chmod 755 parentDir;
  2. 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 用户访问指定目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值