谈论这个功能 http://httpd.apache.org/docs/current/howto/public_html.html
有没有办法(如何?)让 Apache 承担(setuid)每个“~user”的 ID,而不是在 www-data 用户 ID 下执行所有操作?
这里有一个相关的问题: Apache 每个用户权限
在这个问题中,有一个答案实际上建议不要做我所要求的事情:
如果您为每个用户运行一个 apache 实例,并让该 apache 归该用户所有,那么您将授予 apache 写入该用户所有目录的权限。这通常不是一个好主意。
回答者说你不应该这样做,这似乎暗示你可以这样做。所以现在我只想问如何做,因为我有一个非常具体的用例需要它,但为每个用户 ID 运行一个单独的实例太耗资源了。那么,有没有更简单的方法呢?
答案1
你可能想尝试 Apache信息技术有限公司。它的工作方式类似于传统的 Apache prefork 模型,但为每个虚拟主机分配不同的 UID。如果您使用 Apache 2.4,则可以使用 mod_rewrite 使~/
路径使用该特定主目录的 UID,如 ITK MPM 主页所示。
RewriteEngine on
RewriteRule /~([a-z]+)/ - [E=ITKUID:$1]
AssignUserIDExpr %{reqenv:ITKUID}
答案2
是的,您将启用 SuExec。
https://httpd.apache.org/docs/2.4/suexec.html
具体来说,使用 suEXEC。
为方便起见,在此引用:
使用 suEXEC
仅当 CGI 程序的请求针对包含“SuexecUserGroup”指令的虚拟主机或由“mod_userdir”处理时,CGI 程序的请求才会调用 suEXEC 包装器。
虚拟主机:使用 suEXEC 包装器的一种方法是使用“VirtualHost”定义中的“SuexecUserGroup”指令。通过将此指令设置为与主服务器用户 ID 不同的值,所有对 CGI 资源的请求都将作为针对该“”定义的用户和组执行。如果没有为“”指定此指令,则假定为主服务器用户 ID。
用户目录:由“mod_userdir”处理的请求将调用 suEXEC 包装器以在请求的用户目录的用户 ID 下执行 CGI 程序。此功能运行的唯一要求是为用户启用 CGI 执行,并且脚本必须符合上述安全检查的严格要求。另请参阅“--with-suexec-userdir”编译时选项。
你需要确保 ‘--with-suexec-userdir’您的 Apache 构建中已启用编译时选项。