为多用户 SFTP 服务器提供 HTTPS 访问

为多用户 SFTP 服务器提供 HTTPS 访问

我有一个在 Ubuntu Server 12.04 LTS 上运行的 SFTP 服务器。连接后,'sftponly' 组中的任何用户都会被 chroot 到他们的主目录中。由于 OpenSSH 要求 ChrootDirectory 由 root 拥有,因此每个用户都有一个名为“upload”的子文件夹,他们有权写入该文件夹。这一切都运行良好,并且用户被限制在他们自己的区域,无论他们是否知道这一点。

我现在想通过 HTTP/HTTPS 为用户提供访问权限,以便用户仅使用 Web 浏览器下载文件。我一直在研究 Apache 的 mod_userdir,但这似乎更适合匿名访问。我希望系统要求用户在从其文件夹下载之前进行身份验证。它还应该只允许他们从其文件夹下载。

例如,用户将访问https://download.example.com/testuser/file.zip并需要使用与通过 SFTP 连接下载文件时相同的凭据进行身份验证。

我一直在寻找解决方案,例如为每个用户创建一个单独的虚拟主机,并在每个主目录中手动创建 htaccess 文件,但它们看起来有点混乱。

非常感谢您的任何建议。

答案1

您需要将 Apache 与 PAM 集成以进行身份​​验证。这可以通过pwauth和轻松完成mod_authnz_external。您可以在此处阅读更多详细信息:

问题是我看不出有任何方法可以将其挂接到模块中userdirpwauth会让你指定requires user <username>,但我看不出如何将两者结合起来。相信我,我已经搜索过了。

我认为最简单的方法是手动为每个用户保留一个条目:

<Directory /users/abed/>
    DocumentRoot /home/abed/public_html/
    AuthType Basic
    AuthName "Restricted Area"
    AuthBasicProvider external
    AuthExternal pwauth
    Require user abed
</Directory>

<Directory /users/britta/>
    DocumentRoot /home/britta/public_html/
    AuthType Basic
    AuthName "Restricted Area"
    AuthBasicProvider external
    AuthExternal pwauth
    Require user britta
</Directory>

等等。您甚至可以编写一些脚本来定期重新生成它。这不是一个难以遵循的模板结构。

相关内容