Назад | Перейти на главную страницу

ограничить доступ к подкаталогу в apache, оставив родительский открытый

Я устанавливаю 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. Надеюсь это поможет!