我在 apache2.4 上设置一个 webdav,我需要我的顶级目录 /webdav
可以自由打开,并且子目录需要/webdav/projects/secretproject
用密码保护。
我现在的样子dav.conf
是这样的
Alias /webdav /var/webdav/
Alias /secretproject /webdav/projects/secretproject/
<Location /webdav/projects/secretproject >
AuthType Basic
AuthName "TEST - TEST"
AuthBasicProvider file
AuthUserFile "/etc/apache2/auth/test.passwd"
<RequireAll>
Require all granted
Require valid-user
</RequireAll>
</Location>
<Location /webdav >
DAV on
Options +Indexes
<LimitExcept GET HEAD OPTIONS PROPFIND>
Deny from all
</LimitExcept>
Require all granted
</Location>
<Directory /var/webdav/ >
Options Indexes
FollowSymLinksAllow from all
</Directory>
我理解权限从最通用/
到/webdav
最具体进行合并/webdav/projects/secretproject
根据这个问题
https://unix.stackexchange.com/questions/404034/restrict-access-to-subdirectory-in-apache
我的权限需要被强制<RequireAll>
执行Require valid-user
,因此子目录被锁定(否则将Require all granted
推翻任何限制)
不幸的是,此配置对子目录没有限制,我想了解原因。有关如何限制子目录的任何建议也很有帮助
答案1
我刚刚测试了这个(apache2 2.4.18)并发现只要我更改Location
为Directory
这样,基本身份验证就可以起作用:
<Directory /var/webdav/projects/secretproject >
…
</Directory>
我认为这是因为 的Directory
指令/var/webdav
覆盖了Location
projects/secretproject 的指令,但我对此并不确定。
此外,您的配置中有一个小拼写错误,正确的应该是:
<Directory /var/webdav/ >
Options Indexes FollowSymLinks
Allow from all
</Directory>
但是由于您的 apache2 正在运行,我认为这只是将其放在 serverfault 上的复制粘贴错误。希望这能有所帮助!
答案2
正如前面的评论所指出的,在auth
没有位置的目录中实现解决了这个问题
Alias /webdav /var/webdav/
Alias /secretproject /webdav/projects/secretproject/
<Directory /webdav/projects/secretproject >
AuthType Basic
AuthName "TEST - TEST"
AuthBasicProvider file
AuthUserFile "/etc/apache2/auth/test.passwd"
<RequireAll>
Require all granted
Require valid-user
</RequireAll>
</Directory>
<Directory /var/webdav/ >
DAV on
Options +Indexes
FollowSymLinks from all
<LimitExcept GET HEAD OPTIONS PROPFIND>
Deny from all
</LimitExcept>
Require all granted
</Directory>
感谢您的帮助