Apache | 액세스(Access) 권한 | 액세스 권한 설정 (Require)
액세스(Access) 권한 설정에 대해 설명한다.
액세스 권한 설정(Require)
Apache에서 사용되는 모든 파일을 대상으로 접근 제한을 설정할 수 있다. 접근 제한 구역 컨테이너 등을 사용하여 디렉터리 단위와 파일 단위로 설정할 수 있다.
※ 섹션 컨테이너에 대해서는 “접근 허용 범위 설정 (섹션 컨테이너)“를 참조한다.
예를 들어 다음과 같이 작성한다.
<Directory "${SRVROOT}/htdocs">
Require all granted
Require not ip 10.252.46.165
</Directory>
액세스 제한은 Require로 작성을 한다. all를 사용하여 모두 허용(granted) 하거나 모두 거부(denied)할 수 있다. 그리고 host, ip 를 사용하여 특정 호스트나 IP 주소에 대해 허용 및 거부할 수 있다.
형식 | 의미 |
---|---|
Require all granted | 모든 액세스 허용 |
Require all denied | 모든 액세스 거부 |
Require ip IP-주소 | 해당 IP 주소 허용 |
Require not ip IP-주소 | 해당 IP 주소 거부 |
Require host 호스트 | 해당 호스트 허용 |
Require not host 호스트 | 해당 호스트 거부 |
all
“all"을 지정하면 모든 액세스가 적용된다. “Require all granted"이면 모든 액세스가 허용된다. “Require all denied"이면 모든 액세스가 거부된다.
IP 주소
IP 주소를 지정하는 경우 해당 IP 주소만 클라이언트에서 접근할 수 있다. “Require ip 192.168.1.1"이면 IP 주소 “192.168.1.1"에서의 접근만 허용된다.
IP 주소를 작성하는 방법은 다음과 같다.
192.168.1.2
192.168.1
192.168.1.0/255.255.255.0
192.168.1.0/24
1번째는 개별 IP 주소를 지정한다. 2번째로 작성하는 경우는 “192.168.1.0/24"에 해당한다. 세 번째와 네 번째는 넷 마스크를 사용한 작성 방식으로 “192.168.1.0 ~ 192.168.1.255"주소가 대상이 된다. (※ IP 주소에 대한 설명은 생략하겠다.)
호스트
호스트 또는 도메인로 지정할 수 있다. 접근한 IP 주소로부터 호스트를 가져온다. 호스트과 대상에 지정된 호스트나 도메인이 뒷부분이 일치하는 항목이 대상이 된다.
Require host devkuma.com
예를 들어, 위와 같이 작성한 경우에는 사용자가 접근한 IP 주소로 구한 호스트의 뒷부분이 “devkuma.com"와 일치하면 허용된다. 일치하는 예로는 “host1.devkuma.com” 라든가 “www.sub.devkuma.com” 등과 같이 뒤부분이 일치하는 것이다.
설정의 우선 순위
<Directory>
를 사용한 디렉터리에 대한 액세스 제한 설정하면 지정된 디렉터리 및 모든 하위 디렉터리가 대상이 된다. 예를 들어 하위 디렉터리에 대해 다른 액세스 제한 설정한 경우에는 하위 디렉터리에 대한 설정에 의해 덮어 쓰여 진다.
그럼 기본 설정이 어떻게 되어 있는지를 “httpd.conf"파일에서 살펴 보자. 액세스 제한된 일부분만 발췌하면 다음과 같다.
<Directory />
AllowOverride none
Require all denied
</Directory>
<Directory "${SRVROOT}/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Files ".ht*">
Require all denied
</Files>
<Directory "${SRVROOT}/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
먼저 루트 디렉터리 “/“에 대해 모든 액세스를 거부하도록 설정되어 있다. 앞에서 설명했듯이 디렉터리에 대한 권한 설정은 모든 하위 디렉터리도 포함되어 있기에 루트 디렉터리에 대한이 설정은 Apache에 포함된 모든 파일에 대한 액세스가 거부로 설정된다.
다음 도큐먼트 루트인 “${SRVROOT}/htdocs” 디렉터리에 모든 액세스가 허용으로 설정되어 있다. 도큐먼트 루트의 디렉터리 및 하위 디렉터리는 외부에 공개되기에 액세스를 허용해 두어야 한다.
그리고 먼저 작성한 대로 하위 디렉터리에 대한 설정에 의해 덮어 쓰여져서 루트 디렉터리에 설정된 “모두 거부” 설정은 도큐먼트 루트의 하위 디렉터리에 대해 “모든 권한"에 덮어 쓰여 진다.
또한 “cgi-bin"디렉터리도 모든 액세스가 허용되고 있다. 이 디렉터리는 CGI 등이 위치하는 디렉터리이다.
Files를 사용하여 “.ht*“로 와이드카드에 해당되는 모든 파일에 대한 모든 액세스가 거부되어 있다. 이는 위치되어 있는 디렉터리에 관계없이 “.htaccess"라고 파일은 외부에서 접근할 수 없도록하기 위한 것이다. “.htaccess” 액세스 제한을 작성한 특별한 파일로별도로 다른 페이지에서 자세히 살펴 보겠다.
참조
- https://httpd.apache.org/docs/2.4/upgrading.html
- https://httpd.apache.org/docs/2.4/howto/access.html