有没有办法允许 apache2 登录用户动态访问特定目录?

有没有办法允许 apache2 登录用户动态访问特定目录?

令人惊讶的是,这是一个非常难以解决的问题。

我想允许我的 Linux 用户登录 Apache2 并仅访问他们自己的目录。我已设法让 Linux 用户使用 PAM 向 Apache2 进行身份验证,效果很好。

然而,允许访问他们自己的目录已被证明是一个真正的挑战。

Apache2 以普通用户身份运行的方式可防止使用单独的文件权限,因为登录的用户以普通 Apache2 用户身份运行。

出于安全考虑,我不想以 root 身份运行 Apache2,也不想编写执行 setuid(登录用户)的模块。

有没有办法允许 apache2 登录用户动态访问特定目录?

谢谢你,凯撒。

答案1

听起来你正在寻找的是 apache 的suexec功能。正如那里所述:

suEXEC 功能使 Apache 用户能够以不同于调用 Web 服务器的用户 ID 的用户 ID 来运行 CGI 和 SSI 程序。通常,当 CGI 或 SSI 程序执行时,它会以运行 Web 服务器的同一用户身份运行。

如果使用得当,此功能可以大大降低允许用户开发和运行私有 CGI 或 SSI 程序所带来的安全风险。但是,如果 suEXEC 配置不当,则可能导致许多问题,并可能给您的计算机安全带来新的漏洞。如果您不熟悉管理setuidroot 程序及其带来的安全问题,我们强烈建议您不要考虑使用 suEXEC。

您可以添加如下行

SuexecUserGroup script_user script_user

到您的 apache 配置中 — 最好是逐个添加VirtualHost。然后在 suexec 配置中指定可以运行的目录,例如/etc/apache2/suexec/www-data。然后重新启动 apache 并尝试一下。

Digital Ocean 有一个教程如果你在 Ubuntu 上执行此操作,这可能会有所帮助。

答案2

仅使用 Apache 实际上不可能实现这一点;甚至 mod_dav 也没有此功能,而它在那里会非常有用。

suEXEC 不会将 UID 设置为 apache 进行身份验证的 UID(例如,HTTP 身份验证),目标 UID 在服务器或虚拟主机配置中是固定的。

正如您所提到的,您需要一个安全的 setuid CGI,它将权限下放给经过身份验证的 uid,并读取 Web 应用程序的文件和目录。CGI 必须以 root 身份运行,然后以经过身份验证的用户身份 setgid 和 setuid,我相信这会作为 REMOTE_USER 环境变量传递给 apache CGI。正确更改 UID 涉及许多问题。

我建议使用已经支持这种行为的其他协议,例如 SFTP。

答案3

对此进行关闭。我找到了可以设置 setuid 的 mpm_itk 模块。但是 mpm_itk 使用预配置的用户 ID 或正则表达式。没有办法指定使用经过身份验证的用户。

我一直在收集 mpm_itk 代码来编写我自己的模块。

相关内容