본문 바로가기
컴퓨터/리눅스

403 Forbidden

by adnoctum 2011. 1. 3.

   서버를 돌리다 보면 다음과 같은 에러를 만나게 된다.

Forbidden

You don't have permission to access / on this server.


Apache/2.2.3 (CentOS) Server at bioism.kaist.ac.kr Port 80




구글링을 해보면 위와 같은 에러가 나는 몇 가지 상황을 알 수 있다.
1. 아파치 설정 중 document web root 로 되어 있는 디렉토리의 권한이 제대로 되어 있지 않은 경우.
2. 아파치 설정 중 File Access 설정이 잘못 되어 있는 경우.
3. 지정 파일이 없는 경우.
4. DocumentIndex 가 잘못 되어 있는 경우.


알림: 웹서버를 관리하는 사람이 아닌 경우, 자신이 들어 가고 싶은 페이지가 위와 같이 나온다면 할 수 있는 일이 거의 없습니다. 서버 관리자가 잘못한 것이거든요. 만약 서버 관리자에게 연락을 할 수 있는 경우가 아니라면 천상 관리자가 문제를 고쳐줄 때까지 마냥 기다리는 일밖에 할 수 있는 일이 없습니다. (단순 이용자가 검색하여 들어오는 경우 때문에 추가함)


일단 가장 흔한 경우는 1 번으로 보인다. apache 는 /etc/httpd/conf/httpd.conf 파일에, 어느 경로를 웹의 홈 디렉토리로 설정한지 지정하게 된다. 일반적으로 다음과 같은 형태를 띈다.

#
# 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 "/var/www/html"
</etc/httpd/conf/httpd.conf 의 일부>

바로 저기서 설정한 경로에 apache 가 읽거나 쓰는 권한을 갖고 있어야 한다. 위는 default 상태인데, /var/www/html 경로에 apache 가 쓰고 읽을 수 있는 권한을 갖고 있어야 한다. 즉, http 데몬은 apache 라는 사용자 권한으로 돌리게 되는데, 따라서 저 경로를 apache 라는 사용자가 접근할 수 있는 권한이 주어져야 하는 것이다. 또한 directory 일 경우 x 모드가 설정되어 있어야 그 경로로 이동할 수 있게 된다. 즉, 일반 파일일 경우 x 는 executible 즉 실행 파일이나 실행 스크립트를 의미하는데 이것이 directory 인 경우에는 그 directory 로 이동할 수 있는 것을 의미한다. 나의 경우 위 에러가 발생한 원인이 이것 때문이었는데, 권한을 살펴 보자.

일단 index.html 은 다음과 같다.

큰 문제는 없어 보인다. 그렇다면 상위 html 경로는 어떤지 보자.


역시 apache 가 소유자로 되어 있고 모든 권한이 주어져 있으므로 문제가 없다. 다음으로 www 를 보자.


역시 apache가 소유자고, 모든 권한이 있다. 다음으로 var 를 보자.


아, 여기가 문제였다. 소유자는 root 로 되어 있고 group 은 super 로 되어 있다. 따라서 var 의 경우 apache 가 읽기만 할 수 있다(r--). 그런데 이게 앞에서 말한대로 x 모드가 없으면 디렉토리의 경우 '접근'이 안되므로 apache 가 var 안쪽에 있는 경로 안으로 들어갈 수 없게 된다. 따라서 이것을 apache 한테 소유권을 넘겨 주면 문제는 해결된다.

즉, DocumentRoot 로 설정되어 있는 경로, 예를 들면 /var/www/html, 로 가는 모든 단계에 있어 apache 가 적절한 권한을 갖고 있어야 하는 것이다.

나머지 경우에 대한 설명은 차차 추가하자. 사실 좀 귀찮다 >.<""