Ограничить доступ к подкаталогу в 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>

Спасибо вам за помощь

Другие вопросы по тегам