강좌
클라우드/리눅스에 관한 강좌입니다.
자격증 분류

리눅스마스터1급 : 아파치(Apache) 환경 설정1편

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터1: 아파치(Apache) 환경 설정1

 

 

 

아파치 웹서버는 수 많은 버전업을 해 오면서 아주 많은 기능이 포함되었고, 높은 성능을 내고 있으며, 안정성 및 보안성이 높아졌다.

 

 

 

이러한 많은 기능을 설정파일을 사용하여 설정할 수 있으며, 많은 기능을 제공하는 만큼 설정파일이 복잡해지고 많아졌다.

 

 

 

이러한 설정파일에 대해 자세히 알아보자.

 

아파치 설정파일인 httpd.conf 파일의 수많은 지시자들을 설정하고 변경함으로써 우리는 아파치의 성능과 안정성, 그리고 보안을 구현할 수 있다.

 

 

 

리눅스에는 수많은 설정파일들이 있다.

 

 

 

그런 설정파일들을 끝없이 연구하고 의미를 해석하여 실제 적용함으로써 우리는 리눅스라는 서버를 최상의 상태로 운용할 수 있게 된다.

 

 

 

아파치 설정파일을 통하여 우리는 아파치웹서버를 최상의 상태로 운용하는 것이 궁극적인 목적이라고 할 수 있다.

 

 

 

 

설정 방법에 대해 알아 보기 전에 apachectl명령어에 configtest라는 옵션으로 실행하면 아파치 설정파일 httpd.conf의 문법을 검사하는 방법에 대해 알아보자. 설정파일 설정 후에 바로 웹서버를 재 시작 하게되면 설정 실수로 운영중인 서비스에 장애가 발생될 수 있다.

 

 

 

설정파일을 수정했다면 적용하기전에 검증이 필요하다.

 

 

 

 

httpd.conf파일의 설정에 이상이 없을 경우에는 다음과 같이 "Syntax OK"라는 메시지를 뿌려준다.

 

 

 

 

 

 

 

 

[root@SULinux-64Bit apache]# /usr/local/apache/bin/apachectl configtest

Syntax OK

 

 

 

 

 

 

 

하지만 httpd.conf파일에 문제가 있는 경우에는 다음과 같이 문제가 되는 부분을 알려주기도 한다.

 

 

 

 

 

 

 

 

[root@SULinux-64Bit apache]# /usr/local/apache/bin/apachectl configtest

Syntax error on line 30 of /usr/local/apache/conf/httpd.conf:

Invalid command 'SrverRoot', perhaps misspelled or defined by a module not included in the server configuration

 

 

 

 

 

 

 

위의 예는 httpd.conf파일의 30행의 설정에서 잘못된 부분이 있음을 알려주고 있다.

 

 

 

그리고 무엇이 잘못된 것인가를 알려주고있다.

 

 

 

위 결과는 30행의 설정 내용중 “SrverRoot”라는 지시자는 알 수 없다는 내용이다.

 

 

 

이와 같이 아파치가 정상적인 방법으로 실행되지 않을 때 apachectl유틸리티를 이용하여 이와같이 원인파악을 할 수도 있다.

 

 

 

 

 

앞서 잠깐 설명하였듯이 아파치 설정파일은 1개가 아니다.

 

 

 

httpd.conf파일을 비롯하여 /usr/local/apache/conf/extra/디렉토리에 용도별로 여러개의 설정파일이 존재한다.

 

 

 

여기서 아파치 설정파일에 대한 히스토리를 잠깐 얘기하기로 하자. 초기 아파치웹서버의 설정파일은 3개였다.

 

 

 

srm.conf, access.conf, httpd.conf가 그것이었다.

 

 

 

물론 용도별로 설정내용이 각각 나뉘어져있었다.

 

 

 

그 이후에 httpd.conf파일로 하나의 설정파일로 합쳐졌다.

 

 

 

꽤 오랫동안 httpd.conf파일 하나로 설정되다가 아파치웹서버가 2.2버전으로 업그레이드되면서 현재에는 다음과 같이 메인 설정파일인 httpd.conf이외에 extra디렉토리에 모두 11개의 용도별 설정파일이 존재하게되었다.

 

 

 

 

 

 

 

 

[root@SULinux-64Bit apache]# ls -l /usr/local/apache/conf/

합계 112

drwxr-xr-x 2 root root 4096 54 06:38 extra

-rw-r--r-- 1 root root 13659 56 11:16 httpd.conf

-rw-r--r-- 1 root root 13659 56 11:16 httpd.conf.bak

-rw-r--r-- 1 root root 12958 54 06:38 magic

-rw-r--r-- 1 root root 53011 54 06:38 mime.types

drwxr-xr-x 3 root root 4096 54 06:38 original

 

 

 

 

 

 

 

 

 

[root@SULinux-64Bit apache]# ls -l /usr/local/apache/conf/extra/

합계 56

-rw-r--r-- 1 root root 2843 54 06:38 httpd-autoindex.conf

-rw-r--r-- 1 root root 1713 54 06:38 httpd-dav.conf

-rw-r--r-- 1 root root 2344 54 06:38 httpd-default.conf

-rw-r--r-- 1 root root 1103 54 06:38 httpd-info.conf

-rw-r--r-- 1 root root 5078 54 06:38 httpd-languages.conf

-rw-r--r-- 1 root root 916 54 06:38 httpd-manual.conf

-rw-r--r-- 1 root root 3789 54 06:38 httpd-mpm.conf

-rw-r--r-- 1 root root 2183 54 06:38 httpd-multilang-errordoc.conf

-rw-r--r-- 1 root root 11049 54 06:38 httpd-ssl.conf

-rw-r--r-- 1 root root 817 54 06:38 httpd-userdir.conf

-rw-r--r-- 1 root root 1491 54 06:38 httpd-vhosts.conf

 

 

 

 

 

앞서 간략하게 설명한 내용이기는 하지만 다음 용도별 설정파일들의 내용을 확인하기 바란다.

 

 

 

 

아파치의 주설정파일(httpd.conf)ServerRoot, ServerName, DocumentRoot와 같은 메인설정들을 정의하고있다.

 

 

 

그리고 파일의 마지막부분에는 extra디렉토리에 존재하는 11개의 설정파일들을 개별적으로 include하여 선택적으로 로딩할 수 있도록 되어있다.

 

 

 

개별적으로 로딩하는 11개의 용도별 설정파일들을 include하는 내용을 보면 다음과 같다.

 

 

 

 

 

 

 

 

# Server-pool management (MPM specific)

# 아파치웹서버의 MPM specific에 대한 설정파일

#Include conf/extra/httpd-mpm.conf

 

# Multi-language error messages

# 콘텐츠협상을 통한 에러문서(Error Document) 설정파일

#Include conf/extra/httpd-multilang-errordoc.conf

 

# Fancy directory listings

# 디렉토리의 내용을 어떻게 로딩할 것인가에 관한 아파치설정파일

#Include conf/extra/httpd-autoindex.conf

 

# Language settings

# 다른 언어들을 어떻게 표현할 것인가에 대한 아파치 설정파일

#Include conf/extra/httpd-languages.conf

 

# User home directories

# 사용자 홈디렉토리에 관한 설정파일

#Include conf/extra/httpd-userdir.conf

 

# Real-time info on requests and configuration

# 아파치실행모니터링과 실행상태정보를 설정하는 아파치설정파일

#Include conf/extra/httpd-info.conf

 

# Virtual hosts

# 아파치 가상호스트에 대한 설정파일

#Include conf/extra/httpd-vhosts.conf

 

# Local access to the Apache HTTP Server Manual

# 아파치웹서버의 매뉴얼제공에 대한 설정파일

#Include conf/extra/httpd-manual.conf

 

# Distributed authoring and versioning (WebDAV)

# WebDAV에 관한 아파치 설정파일

#Include conf/extra/httpd-dav.conf

 

# Various default settings

# 아파치웹서버의 기본설정사항들이 설정되어있는 설정파일

#Include conf/extra/httpd-default.conf

 

# Secure (SSL/TLS) connections

# SSL지원을 위한 아파치 설정파일

#Include conf/extra/httpd-ssl.conf

 

 

 

 

 

 

 

위의 내용을 보는 바와같이 필요한 개별 설정파일의 설정부분에서 주석(#)을 제거하면 적용 되도록 설정되어있다.

 

 

 

 

이제부터 위의 설정파일들에 존재하는 내용들에 대해 설명할 것이다.

 

 

 

이 설정파일을 잘 다루는 것이 바로 아파치웹서버 관리를 잘하는 것이라는 말과 상통한다.

 

 

 

이들 설정파일은 관리자가 설정하기 위해 존재하는 파일이다.

 

 

 

그리고 설정파일의 내용을 수정/편집하면서 설정 한다는 것은 아파치웹서버에 서로 다른 값들이 적용된다 라는 의미이고 다른 값들이 적용된다 라는 것은 최상의 상태로 운용하기 위한 최상의 값으로 적용한다 라는 의미이므로 결론적으로 아파치웹서버를 최상의 상태로 관리하기 위한 방법이 바로 설정파일을 최적의 값으로 설정한다 라는 것이다.

 

 

 

 

 

따라서 지금부터 설명하는 아파치 설정파일의 설정내용들을 잘 봐 두었다가 필요한 곳에 유용하게 사용하기 바란다.

 

 

 

 

 

설정파일(httpd.conf)

 

 

 

 

 

 

ServerRoot "/usr/local/apache"

 

 

 

 

 

 

 

아파치서버의 홈디렉토리를 지정하며 절대경로로 지정한다.

 

 

 

아파치 설치시에 나오는 아파치의 홈디렉토리를 지정하지 않아도 디폴트(default)/usr/local/apache로 자동 지정하여 설치하게 된다.

 

 

 

이후로 나오는 대부분의 경로(PATH)들은 이 경로를 루트로 한 상대경로로 지정이 된다.

 

 

 

 

 

 

 

 

#Listen 12.34.56.78:80

Listen 80

 

 

 

 

 

 

시스템의 기본값 이외에 다른 IP Address와 포트에 대해서도 연결할 수 있도록 해 준다.

 

 

 

주로 환경설정파일(httpd.conf) 맨뒤에 나오는 가상호스트(Virtual Host)부분에서 기본 80번이외에 다른 포트를 이용하여 가상호스트를 설정하고자 할 때에 필요하다.

 

 

 

 

 

 

 

 

 

# LoadModule foo_module modules/mod_foo.so

LoadModule php5_module modules/libphp5.so

 

 

 

 

 

 

아파치를 DSO(Dynamic Shared Object)방식으로 설치한 다음 필요한 모듈을 아파치에 로드하는 지시자이다.

 

 

 

위에서 로드한 모듈은 “libphp5.so”로서 직접 로딩되는 파일들의 위치는 다음과 같다.

 

 

 

 

 

 

 

 

[root@SULinux-64Bit apache]# ls -l /usr/local/apache/modules/

합계 22648

-rw-r--r-- 1 root root 9170 54 06:33 httpd.exp

-rwxr-xr-x 1 root root 23149676 56 11:16 libphp5.so

 

 

 

 

 

 

 

 

즉 위의 LoadModule이라는 설정에 의해 아파치 실행중에 각각 필요한 모듈들이 로딩되어 사용된다.

 

 

 

그리고 사용이 종료되었을 경우에는 모듈파일은 unloading되어 메모리에서 사라진다.

 

 

 

즉 필요한 모듈파일들을 필요할 때마다 로딩하였다가 해제하는 방식의 동적로딩을 하기 위한 설정이다.

 

 

 

 

만약 아파치를 정적(static)으로 설치하였다면 이 지시자는 필요하지 않다.

 

 

 

정적으로 설치된 모듈들을 확인하는 방법은 “/usr/local/apache/bin/httpd -l”을 실행하여 확인할 수 있다.

 

 

 

즉 정적으로 설치된 아파치의 경우에는 필요한 모듈들은 아파치의 실행과 함께 아파치가 종료될 때까지 필요하든 아니든 항상 메모리에 로딩되어있다.

 

 

 

이 방식은 예전 아파치의 모듈사용방식으로서 정적방식이라고 한다.

 

 

 

 

 

 

 

 

<IfModule !mpm_netware_module>

<IfModule !mpm_winnt_module>

#

# If you wish httpd to run as a different user or group, you must run

# httpd as root initially and it will switch.

#

# User/Group: The name (or #number) of the user/group to run httpd as.

# It is usually good practice to create a dedicated user and group for

# running httpd, as with most system services.

#

User daemon

Group daemon

 

</IfModule>

</IfModule>

 

 

 

 

 

위의 UserGroup이라는 설정 지시자는 홈페이지 서비스를 직접 담당하는 아파치 자식 프로세스들의 실행소유자와 소유그룹을 각각 어떤 계정으로 할 것인가를 결정하는 것이다.

 

 

 

다음 아파치가 실행되어있는 프로세스를 ps로 확인한 예를 보자.

 

 

 

 

 

[root@SULinux-64Bit conf]# ps -ef |grep httpd

root 6786 1 0 11:31 ? 00:00:00 /usr/local/apache/bin/httpd -k restart

daemon 6788 6786 0 11:31 ? 00:00:00 /usr/local/apache/bin/httpd -k restart

daemon 6789 6786 0 11:31 ? 00:00:00 /usr/local/apache/bin/httpd -k restart

daemon 6790 6786 0 11:31 ? 00:00:00 /usr/local/apache/bin/httpd -k restart

daemon 6791 6786 0 11:31 ? 00:00:00 /usr/local/apache/bin/httpd -k restart

daemon 6792 6786 0 11:31 ? 00:00:00 /usr/local/apache/bin/httpd -k restart

root 6876 16587 0 12:24 pts/0 00:00:00 grep httpd

 

 

 

 

 

 

 

위의 예에서 daemon 소유로 되어있는 프로세스들 즉 PID6788, 6789, 6790, 6791, 6792인 프로세스들의 소유를 각각 어떤 계정소유로 할 것인가를 결정하는 지시자이다.

 

 

 

그리고 위의 모든 아파치자식프로세스들의 PPID 즉 부모프로세스는 위의 경우 root소유로 되어있는 PID6786인 프로세스이다.

 

 

 

PID6786인 프로세스에 의해 위의 모든 아파치자식프로세스들을 fork시켜서 생성한 것이며 초기에는 5개만 생성하였지만 상황에 따라서 아파치자식프로세스들을 더 생성하기도 하고 줄이기도 한다.

 

 

 

이 역할을 하는 것이 6786PID를 가진 프로세스의 역할이다.

 

 

 

 

아파치 자식 프로세스에 대하여 좀 더 구체적으로 설명하면 다음과 같다.

 

 

 

아파치 웹데몬이 구동될 때에 생성되는 아파치 자식프로세스(child process)usergroup(여기서 지정한 UserGroup)으로 생성이 된다.

 

 

 

기본값으로 daemon이라는 사용자와 daemon이라는 그룹명으로 아파치 자식 프로세스는 실행된다.

 

 

 

, 많은 서버관리자들이 nobody로 설정을 해 두고 있으며, 만약 시스템에 nobody계정이 없다면 새로 생성(useradd)을 하면 될 것이다.

 

 

 

, root로 설정하는 일은 절대로 있어서는 안된다.

 

 

 

만약 이 값이 root로 설정된다면 아파치웹서버의 모든 자식프로세스들이 root소유로 실행되며 이것은 곧 웹서비스 자체가 root권한으로 실행됨을 의미한다.

 

 

 

 

 

 

 

 

# ServerAdmin: Your address, where problems with the server should be

# e-mailed. This address appears on some server-generated pages, such

# as error documents. e.g. admin@your-domain.com

#

ServerAdmin you@example.com

 

 

 

 

 

 

 

여기서 지정하는 email address는 웹문서 로딩시 에러등의 경우에 에러페이지에 보여질 아파치웹서버 관리자의 전자우편 주소이다.

 

 

 

일반적으로 웹서버관리자의 email address로 설정한다.

 

 

 

 

 

 

 

 

 

# ServerName gives the name and port that the server uses to identify itself.

# This can often be determined automatically, but we recommend you specify

# it explicitly to prevent problems during startup.

#

# If your host doesn't have a registered DNS name, enter its IP address here.

#

#ServerName www.example.com:80

 

 

 

 

 

 

 

 

클라이언트에게 보여주는 호스트이름을 지정한다.

 

 

 

www를 쓰지 않는 호스트에서 www를 쓰는 것처럼 보이게 할 수 있다.

 

 

 

예를들어 test.sulinux.netwww.sulinux.net으로 지정해서 쓸 수 있다.

 

 

 

만약 현재 사용하는 도메인이 없다면 여기에 IP Address를 설정하여 사용할 수도 있다.

 

 

 

 

 

 

 

 

 

# DocumentRoot: The directory out of which you will serve your

# documents. By default, all requests are taken from this directory, but

# symbolic links and aliases may be used to point to other locations.

#

DocumentRoot "/usr/local/apache/htdocs"

 

 

 

 

 

 

 

아파치웹서버의 웹문서가 있는 경로를 지정한다.

 

 

 

만약 설치한 아파치웹서버의 도메인이 www.linux.net이라면 "http://www.linux.net/index.html"index.html이 로딩되는 절대경로는 "/usr/local/apache/htdocs/index.html"이 된다.

 

 

 

 

 

Alias를 사용하여 다른 위치를 지정할 수도 있다.

 

 

 

만약 가상호스트 설정을 하였다면 이 설정은 무시된다.

 

 

 

 

 

 

 

 

 

<Directory />

Options FollowSymLinks

AllowOverride None

Order deny,allow

Deny from all

</Directory>

 

 

 

 

 

 

 

<Directory> ~ </Directory>지시자는 지정한 디렉토리이하의 모든 웹문서들에 대한 제어를 어떤방식으로 할 것인가를 결정하는 아주 중요한 지시자이다.

 

 

 

<Directory> ~ </Directory> 지시자는 여러개 존재할 수 있으며 직접 만들어 사용할 수도 있다.

 

 

 

, 특정 디렉토리 이하의 적용설정을 하려면 <Directory>로 시작하여 </Directory>로 끝이나야 한다.

 

 

 

이에 대한 설명을 좀 구체적으로 해보겠다.

 

 

 

부디 정확하게 이해하길 바란다.

 

 

 

 

먼저 이 지시자에는 크게 두가지의 항목이 있다.

 

 

 

하나는 Options항목이며 두번째는 AllowOverride항목이다.

 

 

 

이 두가지 항목의 성격을 간단히 요약하면 다음과 같다.

 

 

 

 

먼저 Options에 대한 설명부터 해보겠다.

 

 

 

 

[Options] 항목

Options에서는 지정한 디렉토리이하에 모든 파일과 디렉토리들에 적용할 접근제어를 설정한다.

 

 

 

즉 디렉토리목록을 보여줄 것인가? CGI를 허용할 것인가? SSI를 허용할 것인가? 등의 설정을 여기서 하게된다.

 

 

 

<Directory>에서 지정되는 값에 대한 옵션(Options)설정은 다음과 같은 의미를 가지고있다.

 

 

 

예를들어 아파치설치후에 perl로 된 CGI등에서 에러가 발생하는 대부분의 원인이 이 부분에서 설정하는 ExecCGI설정 때문인 경우가 많다.

 

 

 

 

항목

설명

None

모든허용을 하지 않는다.

 

 

 

None설정으로 이외의 다른 설정들은 모두 무시한다.

 

 

 

All

MultiViews를 제외한 모든 옵션설정을 허용한다.

 

 

 

 

Indexes

웹서버의 디렉토리접근시에 DirectoryIndex에서 지정한 파일(index.html 또는 index.htm파일등)이 존재하지 않을 경우에 디렉토리내의 파일목록리스트를 웹브라우즈로 보여준다.

 

 

 

웹서버 보안을 위해 사용하지 않는 것이 좋다.

 

 

 

참고로 Indexes옵션이 없고 DirectoryIndex지시자에 지정된 파일이 존재하지 않는 디렉토리를 웹브라우즈에서 요청했을 때에는 “Forbidden. You don’t have permission to access 디렉토리명on this Server”라는 메시지를 보여주게 된다.

 

 

 

보안상 권하지 않는다.

 

 

 

따라서 가능한 이 값은 설정하지 않는 것이 좋다.

 

 

 

 

Includes

SSI사용을 허용하는 설정이다.

 

 

 

, mod_include.c라는 모듈이 아파치웹서버에 로딩되어 있어야 한다.

 

 

 

거의 대부분은 기본설정으로 로딩되어있다.

 

 

 

이 모듈이 로딩되어있는가를 확인해 보시려면 “/usr/local/apache/bin/httpd -l”를 실행해 보면 된다.

 

 

 

 

IncludesNOEXEC

SSI사용은 허용되지만 #exec사용과 #include는 허용되지 않는다.

 

 

 

SSI를 사용하면서 시스템에 위험한 SSI의 실행태그는 허용하지 않겠다는 설정이다.

 

 

 

FollowSymlinks

심볼릭 링크를 허용한다.

 

 

 

이 옵션을 지정하면 웹브라우즈에서 링크파일의 경로까지도 확인할 수 있게 된다.

 

 

 

보안상 이 값은 설정하지 않는 것이 좋다.

 

 

 

ExecCGI

perl등과 같은 CGI실행을 허용하기 위한 설정이다.

 

 

 

원래 아파치에서 CGI사용은 ScriptAlias로 지정된 위치에서 사용하는 것이 기본이다.

 

 

 

하지만 ScriptAlias가 지정되지 않은 디렉토리에 이 옵션이 지정되어있다면 지정된 디렉토리내에서는 CGI사용이 허용된다.

 

 

 

물론 이 경우에도 “AddHandler cgi-script”지시자에서 정의한 확장자만 유효하다.

 

 

 

참고로 perl등의 CGI실행이 안될 경우에는 ExecCGI값이 설정 되었있나를 확인해 봐야 한다.

 

 

 

이 설정이 않되어있다면 해당디렉토리내에서는 CGI의 실행이 허용되지 않기 때문이다.

 

 

 

 

MultiViews

웹브라우즈의 요청에 따라 적절한 페이지로 보여준다.

 

 

 

웹브라우즈의 종류나 웹문서의 종류에 따라서 가장 적합한 페이지를 보여줄 수 있도록하는 설정이다.

 

 

 

 

 

[AllowOverride] 항목AllowOverride는 어떻게 접근을 허락할 것인가에 대한 설정이다.

 

 

 

특정 디렉토리에 대한 방문자들의 접근방식을 어떤방식으로 인증하여 허용할 것인가의 문제라고 할 수 있다.

 

 

 

Override라는 단어를 사전에서 찾아보면 "짓밟다”, “덮어쓰다의 의미로 나와 있다.

 

 

 

따라서 AllowOverride라는 의미는 현재 설정이 앞부분에서 설정하였던 내용보다 우선 적용된다라는 의미로 해석된다.

 

 

 

따라서 AllowOverride에서 설정하는 값들은 중복해서 설정될 수 있으며 그때마다 가장 최근에 설정된 값이 항상 우선 적용된다는 것을 반드시 기억해야 한다.

 

 

 

 

항목

설명

None

이값이 설정되면 AccessFileName에 지정된 파일을 액세스 인증파일로 인식하지 않는다.

 

 

 

AccessFileName의 값이 대부분 .htaccess이므로 이를 무시하게 된다는 의미가 된다.

 

 

 

즉 이 파일을 무시하기 때문에 새로운 접근인증방식을 Override하지 않는다.

 

 

 

대부분 보안이나 중요한 디렉토리에서 사용할 수 있는 것으로 아주 제한적인 접근만을 허용하고자 할 때에 사용하는 값이다.

 

 

 

All

이전의 인증방식에 대하여 새로운 접근인증방식을 우선적용하도록 Override를 허용한다.

 

 

 

AuthConfig

AccessFileName지시자에 명시한 파일(거의 대부분은 .htaccess)에 대하여 AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, require등과 같은 클라이언트 인증지시자의 사용을 허용한다.

 

 

 

htpasswd유틸리티를 이용하여 특정디렉토리의 접근은 AccessFileName에 명시한 파일(대부분은 .htaccess )로 제어하고자 할 때에 (이를 디렉토리 인증설정이라고함) 해당 디렉토리내에 이 값을 주로 사용한다.

 

 

 

FileInfo

AccessFileName지시자에 명시한 파일(거의 대부분은 .htaccess)에 대하여 AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument, LanguagePriority등과 같은 문서유형을 제어하는 지시자 사용을 허용한다.

 

 

 

Indexes

AccessFileName지시자에 명시한 파일(대부분 .htaccess파일)에 대하여 AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName등과 같은 디렉토리 Indexing을 제어하는 지시자 사용을 허용한다.

 

 

 

Limit

AccessFileName지시자에 명시한 파일(대부분 .htaccess파일)에 대하여 allow, deny, 그리고 order등과 같은 호스트접근을 제어하는 지시자 사용을 허용한다.

 

 

 

Options

AccessFileName지시자에 명시한 파일(대부분은 .htaccess파일)에 대하여 Options 그리고 XBitHack등과 같은 특정 디렉토리옵션을 제어하는 지시자 사용을 허용한다.

 

 

 

 

 

 

“Order allow, deny”는 접근제어의 순서를 명시하는 것이며, 뒤에 나오는 “deny”우선한다.

 

 

 

모든 접근을 막고 지시자에 의해 허용하겠다는 의미이다.

 

 

 

 

 

“Deny from all"은 모든 접근으로 부터 거부 한다는 의미이다.

 

 

 

결론적으로 위 설정은 모든 디렉토리에 대해 접근을 거부하겠다는 의미이다.

 

 

 

 

 

 

 

 

 

<Directory "/usr/local/apache/htdocs">

Options Indexes FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

 

 

 

 

 

 

위 설정은 앞에서 설명하였던 <Directory> ~ </Directory>지시자에 또다른 예이다.

 

 

 

“/usr/local/apache/htdocs” 디렉토리에 대하여 <Directory> ~ </Directory>내에 지정된 값들을 모두 적용하겠다라는 설정이다.

 

 

 

이를 좀 더 구체적을 설명하면 다음과 같다.

 

 

 

 

/usr/local/apache/htdocs디렉토리이하의 모든 웹문서와 디렉토리들에 대하여 Options 항목값으로 IndexesFollowSymLinks를 사용하였다.

 

 

 

따라서 Indexes값이 설정되었기 때문에 /usr/local/apache/htdocs디렉토리이하에서는 디렉토리까지만 지정하였을 때에 그 디렉토리내의 파일리스트(목록)을 웹브라우즈로 보여준다.

 

 

 

그리고 FollowSymLinks값이 설정되었기 때문에 /usr/local/apache/htdocs디렉토리이하에 존재하는 링크파일들의 링크가 그대로 웹브라우즈에서 사용된다.

 

 

 

 

그리고 /usr/local/apache/htdocs 디렉토리 이하의 모든 웹문서와 디렉토리들에 대하여 AllowOverride값으로 None이 사용되었기 때문에 AccessFileName에 지정한 .htaccess파일을 인식하지 않는다.

 

 

 

따라서 .htaccess를 이용하여 특정디렉토리인증을 사용할 수 없다는 의미가 된다.

 

 

 

그리고 “Order allow, deny”로 인하여 /usr/local/ apache/htdocs디렉토리내의 웹문서들에 대하여 allow를 먼저 적용하고 그 뒤에 deny를 적용하게 되며 “Allow from all”에 의해 일단 모든 곳에서의 접근을 허용하게 된다.

 

 

 

만약 “Allow from all”뒤에 “Deny from 192.168.1.0”등과 같은 설정이 있다면 192.168.1.0네트워크내의 사용자들에 대해서만은 /usr/local/apache/htdocs디렉토리내의 접근은 허용되지 않게 된다.

 

 

 

 

 

 

 

 

<IfModule dir_module>

DirectoryIndex index.html index.htm index.php index.cgi

</IfModule>

 

 

 

 

 

웹사이트의 초기페이지 문서로 어떤 파일을 사용할 것인가를 결정하는 지시자이다.

 

 

 

웹브라우즈에서 홈페이지주소(http://www.sulinux.net)를 로딩하였거나 또는 특정 디렉토리 위치만을 주소창에 지정했을 경우(예를들어 http://www.sulinux.net)에 그 디렉토리에서 자동적으로 찾아서 보여줄 웹문서(index.html 또는 index.htm 또는 index.php, 또는 index.cgi)파일의 순서를 지정한 것이다.

 

 

 

즉 디렉토리 이름만을 지정하더라도 여기서 지정한 index.html을 찾아서 웹브라우즈에 로딩해준다.

 

 

 

여러개의 파일을 지정할 수 있으며, 이런 경우에는 순서대로 찾아서 보여준다.

 

 

 

예를들어 "DirectoryIndex index.html index.htm index.php index.cgi"로 지정했다면 먼저 "index.html"을 찾아서 있다면 이 파일을 로딩하고, "index.html"이 없다면 "index.htm"을 찾아서 로딩해 준다.

 

 

 

그리고 이 파일도 존재하지 않는다면 index.php를 찾아서 로딩하고 이 파일도 없다면 index.cgi 파일을 찾아서 로딩한다.

 

 

 

그리고 최종적으로 이 지시자는 지정한 모든 파일이 존재하지 않는다면 Options 지시자에 Indexes 또는 All이 지정되어 있을 경우에 디렉토리내의 파일리스트(목록)을 보여준다.

 

 

 

그러나 Options지시자에 Indexes또는 All이 지정되어 있지 않을 경우에 “Not Found”라는 애러문서를 로딩한다.

 

 

 

 

 

 

 

 

 

<FilesMatch "^\.ht">

Order allow,deny

Deny from all

Satisfy All

</FilesMatch>

 

 

 

 

 

 

 

“.htaccess"와 같은 “.ht”로 시작하는 파일의 내용을 웹브라우즈에서 어떻게 보여줄 것인지 또는 보여주지 않을 것인지를 결정하는 지시자이다.

 

 

 

“.ht”로 시작하는 파일에는 주로 웹 접근 권한등에 대해 설정되어 있다.

 

 

 

따라서 이 파일의 내용을 웹상에서 읽을 수 있어야 사용자도 있을 것이고 봐서는 안되는 사용자도 있을 것이다.

 

 

 

보안상의 이유로 이 옵션은 설정해두는 것이 좋다.

 

 

 

<FilesMatch> ~ </FilesMatch>지시자는 이파일 외에도 특정 파일의 패턴에 해당하는 파일들의 로딩을 막기위하여 주로 사용된다.

 

 

 

잘 활용하면 특정 문자로 시작하는 파일이나 특정 문자열로 끝나는 파일들을 웹문서로 보여주지 않으려고 할 때에 아주 유용한 도구가 된다.

 

 

 

즉 웹서버의 보안을 위해 충분히 활용가치가 있는 지시자이다.

 

 

 

 

 

한가지 유용한 사실은 여기서 설정된 “.ht”로 시작하는 파일들 뿐만 아니라 다른 문자열로 시작하는 파일들에 대해서도 이와 같은 접근허용에 관한 설정을 별도로 할 수 있다는 것이다.

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,039 명
  • 현재 강좌수 :  35,848 개
  • 현재 접속자 :  90 명