본문 바로가기
OS/CentOS

[WSL2] CentOS Nginx 403 Forbidden 에러 (security.limit_extensions)

by 8ugust 2022. 1. 11.

 서버에 Git을 설치해 Clone 받은 프로젝트를 실행해보니 403 Forbidden 에러가 출력된다. 찾아보니 3가지 원인이 있다고 한다. 오늘은 3가지 원인에 대한 분석을 통해 에러를 수정하는 과정을 담아보았다.

 

 


1. 디렉토리 권한 문제

 ls -al  명령어를 통해 디렉토리 및 파일 권한을 확인할 수 있다.
 ls  는 현재 디렉토리의 파일 명령을 확인하는 명령어이며
 a  (all) 는 숨김파일까지 모두 보여주는 옵션이고
 l  (long)은 디렉토리명을 가로로 나열하는 방식이 아닌, 세로로 자세한 정보를 출력하는 옵션이다.

 

위에 나열된 목록에 대해 우측 content 항목을 예시로 설명해보자면,

  • content 항목은 Directory(폴더)이고
  • 3개 그룹에 대해 r(read), w(write), x(execute) 권한을 가지고 있으며
  • 하위에 4개의 Directory(폴더) 가 존재하고
  • 소유자는 root 계정이며
  • 소유그룹은 root 그룹이다.

라는 뜻이다. 여기서 권한 하단의 7이란 숫자에 대한 설명은 아래를 참고하자.

즉,  chown  명령어를 통해 각 디렉토리 및 파일의 권한을 변경할 수 있으며
명령어를 예시로 들자면 chown 764 /your/directory/or/file/path 처럼 사용하면 된다.

문제는 파일 및 디렉토리를 생성하면 기본으로 644 권한이 주어진다고 한다. 실제로 직접 확인해 봤을때도 644 권한이 기본으로 설정되어 있었고, 위 목록에서 보듯 777 권한을 주어줬음에도 불구하고 Forbidden 문제는 해결되지 않았다.

 

 


2. SELinux 문제

 이 펭귄같은 녀석이 SELinux다. Security Enhanced Linux라는 뜻으로 Linux에 기본적으로 설치되는 보안 아키텍처라고 한다. 보안을 위해 디렉터리에 블럭을 걸어놓는 녀석인데, 별도 설정을 통해 해제하지 않는 한 403 Forbidden에서 벗어날 수 없다.

 setenforce 0

위 명령어를 통해 SELinux의 보안을 잠시 해제할 수 있다. 이 상태로 브라우저 접속 시 403 Forbidden 에러가 나지 않았다면 100% SELinux에 의한 에러이므로 아래의 링크를 통해 문제를 해결하면 된다.

 

CentOS NginX 403 Forbidden error 해결

1. NginX 웹서버의 사용자 계정 확인 $ cat /etc/nginx/nginx.conf | grep user user nginx 음... nginx 로군. 2. 웹서버 루트 실제 경로 확인 /home 아래 호스팅 계정이라 가정 $ vi /etc/nginx/conf.d/vhost.con..

itzone.tistory.com

 

 


3. PHP-FPM 보안 문제

 내 경우는 이 부분이 원인이었다. PHP-FPM은 기본적으로 보안을 위해 PHP 확장자 파일만 열어볼 수 있도록 설정되어 있는데, 화면단의 경우 html · js · css 등의 여러 확장자 파일을 동시에 사용하기 때문에, PHP-FPM 설정에서 해당 확장자 파일에 대한 보안을 허용해야만 볼 수 있다.

vi /etc/php-fpm.d/www.conf

security.limit_extensions 부분을 찾은 뒤 주석을 제거하고
.html .htm .js .css .jpg .jpeg .gif .png .txt .ico 내용을 추가하여 저장한 뒤
systemctl restart php-fpm 명령어로 재시작을 해보면

에러 없이 CSS가 화면에 적용되는 것을 확인할 수 있다.

사실 403 Forbidden 에러가 서버에서 던진 에러이기 때문에, 곧바로 Nginx의 error.log를 확인했다면 'Access to the script '~~~' has been denied (see security.limit_extensions)' 에러를 통해 문제를 해결할 수 있었을텐데... 아직은 디버깅 실력이 많이 모자란 것 같다. 403 Forbidden 에러가 난다고 무작정 CentOS Nginx 403 을 검색했던 탓에 긴 시간을 소비했지만, 덕분에 리눅스마스터 1문제 맞출 수 있는 내용와 SELinux에 대한 지식을 터득했으니 만족한다.

그래도 다음부턴 좀 더 개발자스럽게 디버깅을 잘해봐야겠다..

댓글