我有一个非常简单的问题。然而,我已经花了一整天的时间挖掘所有手册来寻找答案。
我想要的是将 Apache 配置为允许任何人读取 /var/www,但仅限我的团队访问 /var/www/private。我正在寻找2.4版本的新解决方案。因此不使用已弃用的指令,例如Allow
、和。我对 /etc/apache2/sites-available/* 文件有写权限,但对 /etc/apache2/apache2.conf 只有读权限。Deny
Order
Satisfy
到目前为止我尝试过的是: /etc/apache2/apache2.conf 的内容:
<Directory />
Require all denied
</Directory>
<Directory /var/www>
Require all granted
</Directory>
/etc/apache2/sites-available/000-default.conf 的内容:
<Directory /var/www/private>
Require group team
</Directory>
但通过此配置,每个人都可以访问 /var/www/private。我可以理解这一点,因为 Apache 将 /var/www/private 的所有环境合并为如下所示:
Require all denied # inherited from /
Require all granted # inherited from /var/www
Require group team # inherited from /var/www/private
并且由于Require
外部指令<RequireAll>
or相当于位于块中,<RequireAny>
因此合并视图如下:<RequireNone>
<RequireAny>
<RequireAny>
Require all denied # inherited from /
Require all granted # inherited from /var/www
Require group team # inherited from /var/www/private
</RequireAny>
这清楚地表明了为什么 /var/www/private 对所有人开放(第二条语句始终匹配)。
因此,我的问题是:“您能否以某种方式覆盖Require all granted
子目录中父目录中的 ,或者您能否将默认<RequireAny>
行为更改为<RequireAll>
?”
答案1
默认的 Apache 设置已经/var/www
满足您的要求。您可以通过添加缺少的配置来限制对您建议的/var/www/private
使用的访问Require group team
,如下所示。
Require 指令默认为 RequireAny,因此通常可以省略它,除非您需要更改它,如下面的配置所示。
.groups
在适合您系统的位置创建如下文件:
# group: memberOne memberTwo memberThree etc
team: richard david jane bill
然后生成.password
用户和散列密码的文件:
$ htpasswd -c /path/to/file/.passwords richard
对每个需要访问权限的组成员运行相同的命令,但忽略-c
(创建)标志,否则您将使用新的空白密码文件覆盖密码文件。
.passwords
按如下方式配置您的 Apache 指令,设置您在上面创建的和文件的正确路径.groups
。
<Location /private>
Options Indexes
AuthType basic
AuthName "login info required"
AuthUserFile path/to/file/.passwords
AuthGroupFile path/to/file/.groups
<RequireAll>
Require all granted
Require group team
</RequireAll>
</Location>
重新启动 Apache,就完成了。