SDB:带有 Chroot 的 SFTP 服务器

跳转到:导航搜索
使用 SFTP ChrootDirectory,可以轻松地将用户限制到任何目录,包括他们的主目录,如果他们应该只能通过 sftp 传输文件。


通用

OpenSSH4.8p1 版本发布以来(因此适用于所有当前的 openSUSE 发行版),SSH 配置/etc/ssh/sshd_config包含新引入的 ChrootDirectory 选项。 这种方式可以轻松地用 SFTP 替换基本的 FTP 服务,而无需配置加密或在通过 NAT 路由器操作时烦恼 FTP 主动和被动模式。 这也比使用 rsh、仅 scp 或其他补丁等软件包更简单,因为它不需要设置和维护(即安全更新)chroot 环境。

前提条件

  • 您了解 openSSH 的基础知识
  • 您必须有一个正在运行的 SSHD(SSH 守护进程服务)。 如果没有,请参阅 配置 openSSH

并且您必须熟悉以下基础知识

  • 从命令行工作
  • 编辑文本文件
  • 获取 root 权限(使用 su、sudo 或以 root 身份登录)
  • 熟悉 Yast2 模块:“用户和组”

配置 SSHD

编辑/etc/ssh/sshd_config使用您喜欢的编辑器作为 root。

SFTP 子系统

为了使 ChrootDirectory 起作用,您必须使用 SSHD 内部 SFTP 服务器。 找到以下行,注释掉它并添加新的选项

# override default of no subsystems
#Subsystem  sftp    /usr/lib64/ssh/sftp-server
Subsystem   sftp    internal-sftp

匹配规则块

可以使用“匹配规则块”为特定用户或组设置特定选项。“匹配规则块”始终位于配置文件的底部。 在此行下设置的所有选项都将适用于此块,直到指定下一个“匹配规则块”。 在此示例中,为组“sftponly”设置了“匹配规则块”。

如果正在使用AllowUsersAllowGroup策略,您还必须将“sftponly”组或其用户添加到其中一个选项之后。
Match group sftponly
   ForceCommand internal-sftp
   ChrootDirectory /home/%u 
   X11Forwarding no
   AllowTcpForwarding no
  • ForceCommand选项可确保受限制的用户只能使用 SSHD 进行 SFTP,因此他们没有打开常规 SSH 会话的可能性。 ForceCommand 选项必须始终是第一个! 不要让互联网上的其他示例误导您。 如果在调用 chroot() 之前未运行“internal-sftp”,则 chroot() 将失败,因为“internal-sftp”正在执行所有脏活来使之成为可能。 如果 chroot() 失败,用户将被踢出。
  • ChrootDirectory选项为该用户设置新的根目录。 可以使用 %u 作为用户名替换,%h 可以用于主目录路径。 强烈建议使用 %u,尤其是在要为 SFTP 创建单独用户而没有本地登录的情况下。
  • X11ForwardingAllowTcpForwarding都设置为no,以防止用户转发端口或启动远程 X 应用程序。

因此,现在配置已设置为受限制的用户只能通过 SFTP 登录,只能访问设置的目录,并且不能将已建立的连接用于其他任何用途。 保存文件并退出编辑器。 不要忘记使用以下命令重新加载 SSHD 配置:

$rcsshd reload

准备目录

如果 Chroot 目录上的权限未正确设置,则操作将失败。 这是 ChrootDirectory 命令的安全预防措施。 您 Chroot 的目录必须由 root 拥有。 组必须设置为您的“sftponly”组。 权限必须设置为 750。 意思是

  • Root 可以读写
  • sftponly 组的成员只能读取
  • 世界无法读取或写入
  • (互联网上的一些指南说,chroot 到 / 的所有父目录也需要这些权限。 这对我们来说不是真的)

将创建一个用于 Chroot 的新目录,并将在以下示例中设置权限。 作为 root 执行

$mkdir /sftp
$mkdir /sftp/chroot
$chown root:sftponly /sftp/chroot
$chmod 750 /sftp/chroot
$ls -l /sftp
drwxr-x--- 2 root sftponly 4096 2010-07-03 22:09 chroot

如果ls -l的输出与上述类似,则表示您的权限正常。

准备用户

现在,您可以使用以下命令将要限制的用户添加到“sftponly”组:Yast2 > 安全和用户 > 用户和组管理。 如果您正在为 SFTP 服务器的用途创建单独的用户,建议您还将他们的 shell 更改为 /bin/false。 防止他们登录到您的系统。 当 chroot 调用被执行并正确执行后,SSHD 将尝试将用户的目录更改为相对于 Chroot 目录的 /home/user。 如果此文件夹不存在,用户将保留在根目录中。 如果您想更改此行为,则必须将用户的家目录更改为“/”。 缺点是,默认方式下将无法使用

您现在应该能够使用 sftponly 用户登录到您的计算机,并且无法查看您的实际计算机的根目录。 (尝试ls /,这应该只为您提供 Chroot 目录的内容。)

在使用 pam_google_authenticator.so 时,您可以在 /etc/pam.d/sshd 中排除您的组,如下所示:

auth [success=1 default=ignore] pam_succeed_if.so user ingroup sftponly

在 google auth pam 行之前


参见


外部链接