SDB:带有 Chroot 的 SFTP 服务器
通用
自 OpenSSH 的 4.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”设置了“匹配规则块”。
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 创建单独用户而没有本地登录的情况下。
- X11Forwarding和AllowTcpForwarding都设置为no,以防止用户转发端口或启动远程 X 应用程序。
因此,现在配置已设置为受限制的用户只能通过 SFTP 登录,只能访问设置的目录,并且不能将已建立的连接用于其他任何用途。 保存文件并退出编辑器。 不要忘记使用以下命令重新加载 SSHD 配置:
准备目录
如果 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 行之前
参见
外部链接
- SSH 文件传输协议
- FTP 客户端软件协议支持比较(其中大多数现在都带有 SFTP 支持)