@senspond
>
리눅스 서버운영을 하다보면 nginx 설정을 하고 웹페이지로 접속을 했을때 403 오류를 만나게 되는 경우가 있습니다. 그럴때 어떻게 조치를 해야하는지 정리해본 글입니다.
리눅스 서버운영을 하다보면 nginx 설정을 하고 웹페이지로 접속을 했을때 403 오류를 만나게 되는 경우가 있습니다. 그럴때 어떻게 조치를 해야하는지 정리해본 글입니다.
sudo tail -f /var/log/nginx/error.log
에러 로그를 확인해봅니다.
"...." is forbidden (13: Permission denied), 와 같은 문구가 있을것입니다.
SELinux - 리눅스 시스템에 설치되는 보안 아키텍쳐
다음과 같은 명령어로 상태를 확인해 봅니다.
sudo sestatus
SELinux가 활성화 되어있다면, 잠시 비활성화를 해주고 nginx 서비스를 재시작해봅니다.
sudo setenforce 0
sudo service nginx restart
만약에 SELinux 보안 컨텍스트로 인한 문제로 발생한 것이라면 403 오류가 뜨지 않고 해결이 될 것입니다.
이 경우 디렉토리에 대한 SELinux 보안 컨텍스트를 수정해주고 다시 SELinux 를 활성화 해주면 됩니다.
Nginx이지만 보안 컨텍스트 이름은 Apache 웹서버에서 설정하는 것과 동일합니다. Apache 웹 서버의 프로세스 명이 httpd 였죠. httpd_sys_content_t, httpd_sys_rw_content_t 와 같은 이름을 사용합니다.
sudo chcon [-R] [-t] httpd_sys_content_t [<path>]
- [-R | --recursive] 하위요소(디렉토리, 파일)도 같이 변경하는 옵션
- [-t | --type=TYPE] SELinux context 타입을 설정하는 옵션
httpd_sys_content_t : 웹서버에서 접근해서 읽기만 필요할 때
httpd_sys_rw_content_t : 웹서버를 통해 읽기뿐만 아니라 쓰기가 필요한 경우
- [<path>] 적용할 경로
해당 디렉토리에 SELinux 보안컨텍스트가 잘 변경되었는지 확인해봅니다.
ls -lZ
SELinux 를 비활성화 하였는데도 똑같은 오류가 발생되고 있다면, 다른 곳에 원인이 있다고 판단합니다.
nginx 프로세스에서 해당 디렉토리에 접근 할 수 없는 경우인지 확인해보고, 접근 할 수 있도록 권한설정을 해주면 됩니다.
cat /etc/nginx/nginx.conf | grep user
ps -ef | grep nginx
구버전에서는 www-data, 최근에는 nginx 라는 이름으로 기본적으로 사용될 것입니다.
nginx.conf 파일을 열여서 user root; 로 하여 해결할 수도 있지만, 그러면 프로세스가 파일 시스템의 모든 권한을 사용하게 되므로 보안상 위험합니다. nginx 로 사용하거나 별도의 사용자 계정으로 사용하는 것이 좋습니다.
ls -al
nginx에서 접근하려는 해당 디렉토리에서 권한을 확인해봅니다.
# 소유권 변경
chown [소유자]:[소유자그룹] [경로]
# 권한 변경
chmode [퍼미션] [경로]
nginx 프로세스 소유자가 해당 디렉토리에 접근할 수 있도록 소유권과 적절한 읽기쓰기 권한을 지정해줍니다.
일반적으로 사용되는 권한은 다음과 같습니다.
디렉토리 : 751
파일 : 644
진단을 위해 SELinux 를 잠시 비활성화 하였으니, SELinux 를 다시 활성화 하고 nginx 를 재시작해줍니다.
sudo setenforce 1
sudo service nginx restart
이상으로 nginx 서버 운영시 403 오류를 만나게 되는 경우 해결방법을 정리해봤습니다.
안녕하세요. Red, Green, Blue 가 만나 새로운 세상을 만들어 나가겠다는 이상을 가진 개발자의 개인공간입니다.
현재글에서 작성자가 발행한 같은 카테고리내 이전, 다음 글들을 보여줍니다
@senspond
>