如何创建具有指定目录权限的 SFTP 用户

如何创建具有指定目录权限的 SFTP 用户

我已经完成了以下教程:如何在 Ubuntu 20.04 中创建具有指定目录权限的 SFTP 用户

创建新的 Sftp 用户:

# useradd -m -d /home/example.com sftp_user
# passwd sftp_user

设置目录权限:

# chmod 755 /home/example.com/
# chown root:root /home/example.com

限制目录访问:

# vim /etc/ssh/sshd_config
subsystem sftp internal-sftp
Match User sftp_user
ChrootDirectory %h
AllowTCPForwarding no
X11Forwarding no
PasswordAuthentication yes
ForceCommand internal-sftp

现在我的问题是用户看不到自己的主文件夹(/home/example.com)。如果我将此文件夹的权限更改为sftp_user,则尝试登录时会出现断开连接错误。我需要更改什么?

答案1

用户看不到自己的主文件夹(/home/example.com

是也不是。该指令ChrootDirectory %h使真实内容/home/example.com出现/在用户面前。用户看到此内容/,因此他可以看到操作系统认为是其主目录的内容;但他看不到它/home/example.com。由于您设置的所有权和权限,用户无法写入目录。不过,这些是正确的:

ChrootDirectory

指定认证后目录的路径名chroot(2)。会话启动时sshd(8)检查路径名的所有组件是否都是根目录,且其他任何用户或组都无法写入。

(来源:man 5 sshd_config

但是之后:

chroot 之后,sshd(8)将工作目录更改为用户的主目录。

(同上)

在你的情况下,服务器尝试将工作目录更改为/home/example.com chroot,即/已经对应于真实的/home/example.com。在 chroot 之外,这将是/home/example.com/home/example.com

现在最简单的解决方法是创建具有合理权限的精确目录。在服务器上执行以下操作:

# as root
mkdir -p /home/example.com/home/example.com
chown sftp_user: /home/example.com/home/example.com

从现在开始,用户将可以看到/home/example.com并使用它,但在服务器上它将是/home/example.com/home/example.com

这看起来可能过于复杂,但总的来说是有意义的。一般来说,您不必使用 sole %has ChrootDirectory。如果您不将用户限制为 sftp,则需要/dev在用户视为其 的位置放置一些东西(shell、基本节点)/;和/或您可能希望几个用户共享一个公共 chroot。在这种情况下,这ChrootDirectory /chroot_jail比 更有意义ChrootDirectory %h。那么您需要/chroot_jail/home/example.com而不是这个奇怪的/home/example.com/home/example.com。我们的解决方案使用home/example.cominside ,/home/example.com/因为您使用了ChrootDirectory %h


哟狗,我知道你喜欢home/example.com,所以我把home/example.com你的放进去/home/example.com/,这样你就可以在访问你的文件时访问你的文件。

相关内容