Я устанавливаю webdav на apache2.4, и мне нужен мой верхний каталог /webdav
быть свободно открытым и для подкаталога, например /webdav/projects/secretproject
быть защищенным паролем.
Мой curremt 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
отменяет любое ограничение)
К сожалению, этот подкаталог не ограничен этой конфигурацией, и я хотел бы понять, почему. Любые предложения о том, как ограничить подкаталог, также полезны.
Как указано в предыдущих комментариях, реализация 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>
Спасибо вам за помощь
Я только что протестировал это (apache2 2.4.18) и обнаружил, что базовая аутентификация работает, как только я меняю Location
к Directory
как это:
<Directory /var/webdav/projects/secretproject >
…
</Directory>
Я думаю, это потому, что Directory
директива для /var/webdav
отменяет Location
директива для проектов / secretproject, но я не уверен в этом.
Кроме того, в этой конфигурации есть небольшая опечатка, она должна правильно читаться:
<Directory /var/webdav/ >
Options Indexes FollowSymLinks
Allow from all
</Directory>
Но поскольку ваш apache2 запущен, я думаю, что это всего лишь ошибка копирования и вставки из-за того, что поместил его здесь на serverfault. Надеюсь это поможет!