限制对 Apache 中子目录的访问

限制对 Apache 中子目录的访问

我有一个非常简单的问题。然而,我已经花了一整天的时间挖掘所有手册来寻找答案。

我想要的是将 Apache 配置为允许任何人读取 /var/www,但仅限我的团队访问 /var/www/private。我正在寻找2.4版本的新解决方案。因此不使用已弃用的指令,例如Allow、和。我对 /etc/apache2/sites-available/* 文件有写权限,但对 /etc/apache2/apache2.conf 只有读权限。DenyOrderSatisfy

到目前为止我尝试过的是: /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,就完成了。

相关内容