[ apache ] 403 - Forbidden error의 해결 > knowledge

본문 바로가기

사이트 내 전체검색

knowledge

[ apache ] 403 - Forbidden error의 해결

작성일 18-10-01 02:49

페이지 정보

작성자 웹지기 조회 18,715회 댓글 0건

본문

리눅스에 아파치 웹서버를 설치하면 자주 등장하는 것이 403 Forbidden 에러다. (Apache 403 Forbidden error)  403 Forbidden 에러는 해당 파일이나 디렉터리에 접근 권한이 없는 경우 것으로 보안과 관련된 오류다. 디렉터리나 파일 권한, 그리고, 웹서버의 설정을 봐도 왜 403 에러가 나는 지 쉽게 알 수 없는 경우가 있다.

b1ab5adf3f70b25df0c326b687afb1a6_1538329849_9785.jpg
 

403 Forbidden error는 원인이 여러가지이고 찾기가 쉽지 않아 매번 한참 해메다가 겨우 해결하곤 한다. 그 해결 방법을 정리해 본다.

 

1. httpd.conf 의 권한 설정

실수인지 어쩐지는 모르지만 아래와 같이 <Directory> 설정 지시 부분에 "Deny from all"이란 내용이 있는 경우가 있다. 당연히 모든 접근을 제한한다는 것이니 403 Forbidden 이 발생하겠지.

<Directory /home/...>

     .

     .

     .

    Order deny, allow

    Deny from all

</Directory>

 

아래와 같이 "Allow from all"로 표시하면 모든 접근이 정상적으로 이뤄질 것이며,

<Directory /home/...>

     .

     .

     .

    Order allow, deny

    Allow from all

</Directory>

 

특정한 IP 만 접근을 제한한다면 아래와 같이 특정한 IP를 deny 시키면 된다.

<Directory /home/...>

     .

     .

     .

    Order deny,allow

    deny from 125.165.169.111 114.124.12.

    allow from all

</Directory>

 

 

 

2. 디렉터리 퍼미션(Directory Permission)

httpd.conf 의 설정에 문제가 없다면, 디렉터리 퍼미션을 확인해 보자.

웹브라우저로 홈페이지를 본다는 것은 웹서버가 실행되는 계정(nobody 또는 apache 등)으로 해당 디렉터리를 읽는는 것이다.

즉, 웹서버가 실행되는 계정으로 해당 디렉터리에 접근이 되지 않으면 당연히 403 Forbidden 이 발생하겠지.

# chmod o+x /home/...

or

# chmod 711 /home/...

# ls -al /home/...

drwx--x--x 21 abcd     abcd     4096 Mar 24 10:44 /home/...


디렉터리를 위와 같이 했는데도 같은 문제가 있다면 하위 디렉터리 및 파일들을 살펴보자.

웹루트 디렉터리를 위와 같이 설정하듯이 하위 디렉터리나 파일도 웹서버가 실행되는 계정으로 읽을 수 있어야 문제가 발생하지 않는다.

 

참고로 특정디렉터리의 하위 모든 파일 및 디렉터리의 권한을 변경하는 방법은...

* 모든 디렉터리의 권한을 711로 변경

# find /home/... -type d -exec chmod 711 {} \;


* 모든 파일의 권한을 644로 변경

# find /home/... -type f -exec chmod 644 {} \;

이것은 간편하긴 하나, 검색할 디렉터리(/home/...) 를 잘못 지정하면 낭패를 볼 수 있으므로 주의해야 한다. "/" 에서 실행했다가는... ^^;;

  

3. SELinux와 아파치 HTTP의 디렉토리 접근 설정

SELinux는 리눅스의 보안을 담당하는 프로그램이다. 최근에 나온 리눅스에는 대부분 SELinux가 구동되고 있다고 생각해도 된다. 이전에는 단순히 chmod를 통한 owner+group+others의 권한 만 제한하면 되었지만 SELinux는 그 이상의 접근 제어를 하게 되므로 잘 모르면 당황하게 된다.

 잘 모르면 SELinux 설정에서 SELINUX=disabled 하여 구동을 중지할 수 있지만 그만큼 보안에 취약해지므로 권장하지는 않는다.

SELinux 설정 파일 : /etc/selinux/config

 

Shell에서 'ls -Z'를 해 보면 아래와 같이 파일이나 디렉터리의 보안 환경을 볼 수 있다.

# ls -Z /home/... 

drwx--x--x  abcd   abcd   user_u:object_r:user_home_dir_t  abcd

drwx--x--x  efgh    efgh    user_u:object_r:httpd_sys_content_t efgh

보안 환경에서 세번째 요소가 중요한 부분이다. HTTP 웹서버는 httpd_sys_content_t 타입 만 파일과 디렉토리 읽는 것을 허용한다. 위에서 보면 'abcd'는 user_home_dir_t로 되어 있기 때문에 웹서버에서 접근을 하면 403 Forbidden을 표시하고, 'efgh'는 httpd_sys_content_t로 되어 있기 때문에 접근이 가능하다.

 

이를 변경하는 방법은...

* 하나의 파일이나 디렉터리를 변경할 경우

# chcon -t httpd_sys_content_t /home/...


* chmod와 같이 하위 파일이나 디렉터리를 모두 변경할 경우

# chcon -R -h -t httpd_sys_content_t /home/...

-R : 하위 모든 파일과 디렉터리의 보안사항을 변경한다.

-h : 심볼릭링크를 따르지 않도록 한다.

 

위와 같이 했는데도 문제가 지속되면 쪼금 어렵다는 것~^ 

관련 포스트

- Apache 302 error 원인과 해결방법


추천0

비추천 0

댓글목록

등록된 댓글이 없습니다.

전체 89건 1 페이지

이미지 목록

게시물 검색
Copyright © 즐거운 코딩 생활 ( funyphp ). All rights reserved.
PC 버전으로 보기