Apache의 하위 디렉터리에 대한 액세스 제한

Apache의 하위 디렉터리에 대한 액세스 제한

아주 간단한 질문이 있습니다. 그러나 나는 답을 찾기 위해 하루 종일 모든 매뉴얼을 뒤지는 데 시간을 보냈습니다.

내가 원하는 것은 누구나 /var/www를 읽을 수 있도록 허용하고 내 팀만 /var/www/private에 액세스할 수 있도록 Apache를 구성하는 것입니다. 버전 2.4에 대한 새로운 솔루션을 찾고 있습니다. 따라서 및 와 같은 더 이상 사용되지 않는 지시문은 Allow사용되지 않습니다. /etc/apache2/sites-available/* 파일에 대한 쓰기 권한이 있지만 /etc/apache2/apache2.conf에 대한 읽기 권한만 있습니다.DenyOrderSatisfy

지금까지 시도한 것은 다음과 같습니다. /etc/apache2/apache2.conf의 내용:

<Directory />
    Require all denied
</Directory>
<Directory /var/www>
    Require all granted
</Directory>

/etc/apache2/sites-available/000-default.conf의 내용:

<Directory /var/www/private>
    Require group team
</Directory>

하지만 이 구성을 사용하면 모든 사람이 /var/www/private에 액세스할 수 있습니다. Apache가 /var/www/private의 모든 환경을 다음과 같이 병합하기 때문에 이것을 이해할 수 있습니다.

Require all denied  # inherited from /
Require all granted # inherited from /var/www
Require group team  # inherited from /var/www/private

그리고 Require외부 명령 <RequireAll>또는은 블록에 위치하는 것과 동일하므로 <RequireAny>병합된 보기는 다음과 같습니다.<RequireNone><RequireAny>

<RequireAny>
    Require all denied  # inherited from /
    Require all granted # inherited from /var/www
    Require group team  # inherited from /var/www/private
</RequireAny>

이는 /var/www/private이 모든 사람에게 공개되는 이유를 명확하게 보여줍니다(두 번째 설명은 항상 일치합니다).

Require all granted그래서 제 질문은 " 하위 디렉터리의 상위 디렉터리에 있는 디렉터리를 어떻게든 무시할 수 있습니까? 아니면 기본 <RequireAny>동작을 해당 디렉터리로 변경할 수 있습니까 <RequireAll>?" 입니다.

답변1

기본 Apache 설정은 이미 /var/www요구 사항을 충족합니다. 아래와 같이 누락된 구성을 추가하여 제안된 /var/www/private사용법 에 대한 액세스를 제한할 수 있습니다 .Require group team

Require 지시문의 기본값은 RequireAny이므로 아래 구성과 같이 일반적으로 변경할 필요가 없는 한 생략할 수 있습니다.

.groups시스템의 적절한 위치에 다음 파일을 만듭니다.

# group: memberOne memberTwo memberThree etc
team: richard david jane bill

.password그런 다음 사용자 및 해시된 비밀번호 파일을 생성합니다 .

$ htpasswd -c /path/to/file/.passwords richard

액세스가 필요한 각 그룹 구성원에 대해 동일한 명령을 실행하되 -c(생성) 플래그를 생략하십시오. 그렇지 않으면 비밀번호 파일을 새 빈 비밀번호 파일로 덮어쓰게 됩니다.

.passwords위에서 생성한 및 파일에 대한 올바른 경로를 설정하여 다음과 같이 Apache 지시어를 구성합니다 .groups.

<Location /private>
Options Indexes
  AuthType basic
  AuthName "login info required"
  AuthUserFile path/to/file/.passwords
  AuthGroupFile path/to/file/.groups
<RequireAll>
  Require all granted
  Require group team
</RequireAll>
</Location>

Apache를 다시 시작하면 완료됩니다.

관련 정보