我需要在 CentOS 7 上创建仅 SFTP 用户。我已经从各种来源阅读了如何执行此操作。该设置只需支持单个用户通过 SFTP 访问单个文件夹。
如果用户的主目录是/home/user并且在sshd_config我有ChrootDirectoryas %h,考虑到 sshd 会将目录更改为/home/userchroot 之后:
ChrootDirectory 指定身份验证后 chroot(2) 的目录路径名。路径名的所有组成部分必须是 root 拥有的目录,任何其他用户或组都不可写入。chroot 后,sshd(8) 将工作目录更改为用户的主目录。
这是如何运作的?它肯定会失败,因为 sshd 会尝试 CD 到/home/user/home/user?
补充问题:是否有最佳实践来决定是否在创建用户时定义的主目录中 chroot 这样的用户,还是将其 chroot 到/homeeg之外/var/sftp/user?在 之外创建 chroot 时/home,用户主目录的用途是什么?还用来读书吗~/.ssh/authorized_keys?
您需要注意对用作目录的其他限制ChrootDirectory:路径名的所有组成部分必须是 root 拥有的目录,任何其他用户或组都不可写入。如果用户需要能够写入 chroot 内自己的主目录,则主目录不得与ChrootDirectory.
历史注释:
OpenSSH 的 chroot 支持最初是一个单独的补丁,即使在它集成到主要 OpenSSH 发行版之后,对用作 ChrootDirectory 的目录的确切要求也随着不同的 OpenSSH 版本而发生了变化。为了应对以前设置中发现的安全漏洞,新版本通常会比旧版本执行更严格的要求。
此外,在 chroot 内部和外部都适用相同的主目录路径的要求显然不是最理想的,并且某些发行版已经应用了补丁来修改行为。不幸的是,过去并非所有此类补丁都包含对手册页和其他相关文档的更新。
但为了满足书面要求,您可以这样做,例如:
mkdir -p /jail/username/home
# First, the chroot directory:
chown root:root /jail/username
chmod 755 /jail/username
# Then, the user's home directory:
chown username: /jail/username/home
chmod 750 /jail/username/home
usermod -d /jail/username/home username
# And here's the magic:
cd /jail/username
ln -s . jail # this would normally be a silly thing to do
ln -s . username # but with chroot it can be useful
Run Code Online (Sandbox Code Playgroud)
现在,我们可以设置ChrootDirectory /jail/%u.
当在 chroot 外部查看时,用户的主目录将为/jail/username/home. 有点偏离正常的命名约定,但没有什么特别的。
在 chroot 内部,相同的主目录路径确实会引用
/jail/username/jail/username/home...但是您看到上面那两个愚蠢的符号链接了吗?取消引用它们,您将得到/jail/username/././home,它最终与 完全相同/jail/username/home。因此,相同的路径最终指向 chroot 内部和外部的相同位置。
chroot 内的用户将看到他们的主目录为== /jail/username/home,并且他们可以正常使用它。他们将能够看到其主目录之上的一层,但只有 root 可以在那里写入。/././home/home/
这也将允许像 syslog 风格的日志记录这样的事情:您可以创建一个 root 拥有的目录/jail/username/dev并告诉在...rsyslog创建一个额外的风格套接字,现在 chrooted 用户可以生成日志消息并让常规 syslog 子系统处理它们。/dev/log/jail/username/dev/log
这绝不是安排 chroot 环境的唯一方法,尽管上述样式的设置使用户的主目录对于 chroot 之外的进程尽可能正常(= 没有符号链接或其他怪异),如果这很重要的话。
如果您想要一个对于被监禁的用户来说最大程度无用的 chroot,您可以这样做:
mkdir -p /jail/username/username
# Prepare the chroot directory
chown root:root /jail /jail/username
chmod 755 /jail /jail/username
# Prepare the user's actual home directory
chown username: /jail/username/username
chmod 750 /jail/username/username
# Make it usable outside the chroot too
ln -s /jail/username/username /username
# And now it can be assigned to the user.
usermod -d /username username
Run Code Online (Sandbox Code Playgroud)
我们再次设置ChrootDirectory /jail/%u.
在 chroot 之外,/username将有一个指向 的符号链接/jail/username/username,因此用户的主目录将有效。
对于 chroot 进程来说,/username这只是一个常规目录,完全可以用作用户的主目录。
是的,实际的路径名有点重复,并且符号链接会使系统的根目录变得混乱,但 chroot 环境中不会有任何无关的内容。
如果chroot 用户唯一需要的是 SFTP,则该问题的公认答案描述了一种更简单的方法。
| 归档时间: |
|
| 查看次数: |
37649 次 |
| 最近记录: |