본문 바로가기

Operating System Theme/Unix/Linux

[CentOS & Apache] HTTP 403 오류 해소 방법

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

HTTP 403 오류 해소 방법

 

상황: CentOS 7 & Apache 구동 서버에 접속 시 위와 같이 HTTP 403 오류가 발생한다.

로그를 확인해본다.

$ sudo vi /var/log/httpd/error_log

 

Permission denied: ... search permissions are missing on a component of the path의 오류 메시지를 확인할 수 있다. 즉 파일은 존재하긴 하나 외부에서 이 파일을 접근할 권한이 없다는 뜻이다. 이를 해결해보자

 

1. chmod로 해결하기


접근권한(permission)하면 먼저 떠올려야 할 것은 chmod일 것이다. 다음과 같이 각 파일 및 이를 포함하는 디렉터리에 x(실행 가능) 권한이 있어야 할 것이다.

$ sudo ls -al

 

만일 rwx, r-x, -wx, --x와 같이 x가 포함되어 있지 않다면 chmod로 실행 권한을 주면 된다.

$ sudo chmod +x 파일명

 

2. SELinux로 해결하기

그래도 HTTP 403 오류가 뜬다면 SELinux의 설정을 확인한다. SELinux는 일종의 보안 장치로서 해킹과 같은 허가되지 않은 접근을 커널 수준에서 차단하기 위한 장치이다.SELinux가 작동중인 서버에서는 각 파일(디렉터리 포함)에 개별적인 보안 문맥security context을 적용하는데 보안 문맥에는 크게 로컬에서 사용되는 일반 문서 수준의 보안(user_home_t)과 서버를 통해 외부에서 접근 가능한 수준의 보안(httpd_sys_content_t), 외부에서 접근 가능하며 실행이 가능한 수준의 보안 - 즉 서버 스크립트 파일에 적용되는 보안(httpd_sys_script_exec_t)이 있으며 그 외에 다양한 보안 문맥이 있을 수 있으나 여기에서는 생략한다. 각 파일에 적용된 보안 문맥을 확인하기 위해서는 다음과 같이 입력한다.

$ sudo ls -alZ

 

접속하고자 하는 파일에 걸린 보안 문맥이 서버용이 아닌 다른 종류(dosfs_t)이다. FAT 파일 시스템으로 포맷된 볼륨에서 복사된 파일에 대해 적용된 것으로 추정되는데 이를 수정하는 방법은 다음과 같다.

$ sudo chcon -R -t httpd_sys_script_exec_t 파일명


 

-R는 뒤에 지정한 파일명이 디렉터리일 때 그 하위 구조까지 전부 재귀적으로 지정하는 옵션이고, -t는 보안 문맥의 종류를 바꿀 때 사용하는 옵션이다. 이를 실행해본다.

수정 결과, 외부에서 잘 접속이 됨을 확인할 수 있다.