Ограничить доступ к подкаталогу в apahe, оставив родителя открытым
Я устанавливаю webdav на apache2.4, и мне нужно для моего верхнего каталога /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
отменит любое ограничение)
К сожалению, подкаталог не ограничен этой конфигурацией, и я хотел бы понять, почему. Любые предложения о том, как ограничить подкаталог, также полезны
2 ответа
Я только что проверил это (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. Надеюсь это поможет!
Как указано в предыдущих комментариях, реализация 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>
Спасибо вам за помощь