|
페이지 인덱싱 막는 법 :
<Directory "E:/APM_Setup/htdocs">
Options FollowSymLinks MultiViews ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>
보통 아파치에서 기본값으로 가지는 디렉토리에 대한 액서스(권한)를 제어 하는 선언을 포함하는 설정파일은 다음과 같습니다.
- httpd.conf (주 서버 설정 파일)
- access.conf (액서스 설정 파일)
- .htaccess
사실 httpd.conf 설정파일만 가지고도 디렉토리별로 권한을 제어 하는 것이 가능하며 Access.conf 나 .htaccess 파일을 이용하지 않는 것이 서버의 성능도 높일 수 있습니다. httpd.conf 파일이 너무 길다고 느낀다면, 액서스를 제어 하는 부분을 Access.conf 에서 따로 선언할 수 있습니다. 또한 httpd.conf 나 access.conf 를 수정하였을 경우에는 서버를 재시작 해야 하지만 .htaccess 파일에서 선언 내용이 바뀌었을 경우에는 실시간으로 적용이 되어 아파치를 재시작 할 필요가 없습니다. 다음은 아파치 주 환경 설정(httpd.conf) 에서 액서스설정파일(access.conf,.htaccess)을 지정하는 것입니다.
액서스 설정 파일 선언 ( AccessConfig )
AccessConfig 선언에 의해서 httpd.conf 파일에 선언된 내용을 적용한 후 액서스를 제어할 환경 설정 파일을 지정할 수 있습니다. 기본값은 access.conf 로 되어 있지만 사용자가 임의의 파일이름/위치 로 바꿀 수 있습니다. 드라이브명으로 시작하지 않는 경우, 설정파일의 위치는 서버루트에 상대적인 경로(path)가 됩니다.
AccessConfig conf/access.conf
UNIX 와 같은 경우는 다음과 같이 써서 액서스 파일을 참조 하지 않도록 지정할 수 도 있지만 win32 용은 해당되지 않습니다.
AccessConfig /dev/null
(아파치 배포버전에는 httpd.conf 에서 주석으로 nul 이라고 적으면 된다고 되어 있지만, nul 이라는 파일을 찾을 수 없다는 에러를 출력합니다.)
액서스 파일 이름 선언 ( AccessFileName )
AccessConfig 선언에 의해 지정된 액서스설정파일을 수정했을 경우는 서버를 재시작 해야만 적용이 되지만 AccessFileName 에 의해서 지정된 액서스파일은 수정하자마자 적용 될 수 있습니다. 기본값으로는 다음과 같이 .htaccess 이며 윈도우즈 에서는 파일이름을 .으로 시작하게 만들기가 어렵습니다. #haccess 와 같이 바꿔줄 수도 있습니다.
AccessFileName .htaccess
액서스파일을 이용할 경우, d:/doc_root/dir1/dir2 라는 디렉토리에 대해서 아파치 서버는 d:/doc_root/.htaccess 파일을 읽어 액서스권한을 적용하고, d:/doc_root/dir1/.htaccess 라는 파일을 찾아 읽어들여 적용하고, 마지막으로 d:/doc_root/dir1/dir2/.htaccess 파일을 찾아 읽어 들이고, 적용하게 됩니다. 이것은 서버 성능을 저하 시킬 수도 있습니다 .이 기능을 사용하지 않으려면,
<Directory /> AllowOverride None </Directory>
과 같이 AllowOverride 선언을 사용해서 .htaccess 파일에 선언된 액서스정보를 참고하지 않도록 할 수 있습니다.
| AllowOverride 의 옵션 ( 부분적으로 참고 가능 ) |
| none |
어떤 액서스 정보도 참고 하지 않음 |
| AuthConfig |
인증 선언에 대한 허용 (AuthName, AuthType, require, AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthUserFile, etc.). |
| FileInfo |
문서 형식을 제어하는 선언의 허용 (DefaultType, ErrorDocument, AddEncoding, AddLanguage, AddType, LanguagePriority, etc.). |
| Indexes |
디렉토리 인덱싱을 제어하는 선언을 허용 (AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, etc.). |
| Limit |
호스트 액서스를 제어하는 선언에 대한 허용 (allow, deny and order). |
| Options |
특별한 디렉토리 기능에 대해서 (Options and XBitHack). |
| All |
모든 액서스 정보를 참고함. |
<Directory> 선언
디렉토리 기능 선언. httpd.conf 와 access.conf 설정파일에서는 <Directory> 와 </Directory> 는 디렉토리의 그룹을 둘러쌓아서 디렉토리의 권한을 제어합니다. 여기서 지정된 디렉토리는 그 디렉토리와 하위 디렉토리에 적용됩니다. .htaccess 파일은 해당 디렉토리에 위치해 있으므로 <Directory> 와 </Directory> 를 이용하여 둘러쌓는 것을 생략합니다. 이 곳에서는 directory context 로 혀용되는 모든 선언을 사용할 수 있습니다. Directory 는 디렉토리의 전체경로(실제디렉토리)를 써주거나 와일드 카드를 사용할 수 있습니다. 와일드 카드 사용에 있어서, '?' 는 하나의 문자와 매치되고 '*' 는 어떤 문자로도 대치될 수 있습니다. Apache 1.3 이상에서는 `[]' 문자열을 사용할 수도 있으며 또한 와일드 카드없이는 `/' 문자에 매치 되지 않습니다. 예를 들면:
<Directory "d:/usr/local/httpd/htdocs"> Options Indexes FollowSymLinks </Directory>
실제경로 "d:/usr/local/httpd/htdocs" 에 디렉토리 목록을 보여주는 옵션을 주는 선언 입니다.
<Directory ~ "^/www/.*/[0-9]{3}">
이것은 /www/ 하위에 있는 디렉토리중 3개의 숫자로 구성된 디렉토리와 일치 합니다.
만약 복수의 디렉토리 섹션에있어서(non-regular expression) 적용되는 순서는 루트(가장 짧은 디렉토리)가 가장 먼저 적용되며 하위디렉토리 에 대한 선언이나 해당디렉토리의 액서스(접근)을 제어하는 파일(기본값은 .htaccess) 에 의해서 다시 적용됩니다. 아래의 예를 가지고 설명을 하자면,
<Directory /> AllowOverride None </Directory>
<Directory /home/*> AllowOverride FileInfo </Directory>
/home/web/dir/doc.html 라는 문서에 대해서: 선언 AllowOverride None 이 적용(disabling .htaccess 파일에 의해서 액서스 제어가 불가). 선언 AllowOverride FileInfo 가 적용 (directory /home/web 에 대해서) . /home/web/.htaccess 에 선언된 파일정보에 대해서만 적용됨
아파치는 기본값으로 - /(루트) , 모든 접근에 대해 허용 하도록 되어 있습니다. 보안상 다음과 같이 바꾸어 주고, 모든 접근을 허용할 디렉토리에서만 Allow from All 을 사용하도록 합니다.
<Directory /> Order Deny,Allow Deny from All </Directory>
<File> 선언 디렉토리 선언과 마찬가지로 <File> 과 </File> 로 묶어서 파일의 권한을 설정합니다. 와일드 카드 사용도 가능합니다.
이 Options 선언은 각각의 디렉토리의 기능을 제어합니다.option 을 None,으로 지정하면, 아무기능도 사용할 수 없습니다. 아래는 옵션으로 주어 질수 있는 값들 이며, +/- 를 사용할 수 있고, 중복해서 사용할 수 도 있습니다.
| All |
MultiViews 를 제외한 모든 옵션이 가능. 기본값입니다. |
| ExecCGI |
CGI scripts 를 실행할 수 있는 권한을 허용합니다. |
| FollowSymLinks |
서버는 해당 디렉토리에서 상징적인 링크를 따라가게 됩니다. Note: 서버가 상징적인 링크를 따라가더라도 <Directory> sections 에 대응하는 경로는 바뀌지 않습니다.. Note: 이 옵션은 <Location> section 에서는 무시 됩니다. |
| Includes |
SSI(Server-side includes)를 허용합니다. |
| IncludesNOEXEC |
SSI(Server-side includes)는 허용하지만 #exec 명령과 CGI 스크립트의 #include 는 허용하지 않습니다. |
| Indexes |
파일이름을 쓰지않고 디렉터리로만 이루어진 URL의 요청에 대해, 그 디렉터리에는 DirectoryIndex (e.g., index.html) 파일이 존재 하지 않는 경우, 서버는 이 디렉터리의 목록을 보여 줍니다.. |
| MultiViews |
Content negotiated MultiViews 를 허용합니다. (확장자가 생략되었을 경우 매치되는 파일 목록 또는 파일을 보여줌) |
| SymLinksIfOwnerMatch |
서버는 단지 같은 사용자가 소유하고 있는 파일이나 디렉터리 내에서만 상직적인 링크를 따라 갑니다. Note: 이 옵션은 <Location> section 에서는 무시 됩니다. |
여러개의 옵션을 디렉토리에 적용할 경우, 상위 디렉터리에서 주어진 옵션은 하위 디렉터리까지 권한이 부여 됩니다. CGI 실행권한을 상위 디렉터리에서 주어졌는데 그 하위 디렉터리에서는 CGI 실행 권한을 주고 싶지 않다면 -ExecCGI 라는 옵션으로 CGI를 실행하지 않도록 할 수 있습니다.
+/- 기호를 사용하지 않은 예입니다.:
<Directory /web/docs> Options Indexes FollowSymLinks </Directory> <Directory /web/docs/spec> Options Includes </Directory>
이런결우 단지 Includes 기능만 /web/docs/spec 디렉터리에서 지정되었습니다. 어째든 두번째 선언되는 옵션은 다음의 예에서 처럼 +/- 를 사용해야 합니다.:
<Directory /web/docs> Options Indexes FollowSymLinks </Directory> <Directory /web/docs/spec> Options +Includes -Indexes </Directory>
이경우 FollowSymLinks 와 Includes 기능이 /web/docs/spec directory 에 주어 졌습니다.. Note: Using -IncludesNOEXEC 나 -Includes 의 사용은 불가능 합니다. SSI(server-side includes)는 이전의 셋팅과는 아무런 상관이 없습니다.
아무런 선언이 없는 경우, 기본값인 All 로 셋팅되어 지게 됩니다.
|