아주 간단한 질문이 있습니다. 그러나 나는 답을 찾기 위해 하루 종일 모든 매뉴얼을 뒤지는 데 시간을 보냈습니다.
내가 원하는 것은 누구나 /var/www를 읽을 수 있도록 허용하고 내 팀만 /var/www/private에 액세스할 수 있도록 Apache를 구성하는 것입니다. 버전 2.4에 대한 새로운 솔루션을 찾고 있습니다. 따라서 및 와 같은 더 이상 사용되지 않는 지시문은 Allow
사용되지 않습니다. /etc/apache2/sites-available/* 파일에 대한 쓰기 권한이 있지만 /etc/apache2/apache2.conf에 대한 읽기 권한만 있습니다.Deny
Order
Satisfy
지금까지 시도한 것은 다음과 같습니다. /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를 다시 시작하면 완료됩니다.