我有一个在 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
。您可以在此处阅读更多详细信息:
问题是我看不出有任何方法可以将其挂接到模块中userdir
。pwauth
会让你指定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>
等等。您甚至可以编写一些脚本来定期重新生成它。这不是一个难以遵循的模板结构。