반응형
1. 개요
회사에서 redhat 7 계열의 리눅스를 사용하고 있었다. 2024.06.30일부터 red hat 7은 지원이 종료되어, redhat 8을 사용하기로 했다.
Nginx 서비스를 systemctl로 시작하면 permission denied 에러가 나면서 서비스 구동이 안됐다.
2. 원인
/etc/nginx/nginx.conf에서 log 경로를 /data2/nginx/log로 수정하고 싶었다.
# error_log /var/log/nginx/error.log notice;
error_log /data2/nginx/log/error.log notice;
수정한 뒤 systemctl start nginx를 위에서 언급한 permission denied 가 발생하면서 구동이 안된다.
red hat 7에서 겪어본 적이 없는 에러였다.
원인을 찾아보니 red hat 8부터 SELinux 보안 정책이 변경되어서 발생하는 문제였다. 보안 정책이 변경됨에 따라 비표준 경로를 사용하는 서비스에서 SELinux 컨텍스트 문제로 인해 예상치 못한 접근 거부가 발생할 수 있다고 한다..
그럼 해결해보자. 총 3가지의 해결 방안을 정리해보겠다.
3. 해결방법 1 (표준 경로 사용)
간단하다. Nginx 기본 표준 경로를 사용하면 된다.
error_log /var/log/nginx/error.log notice;
# error_log /data2/nginx/log/error.log notice;
4. 해결방법 2 (SELinux 비활성화)
SELinux 모드가 enforoing 모드로 설정 되어 있다. 모드를 permissive 모드로 변경하면 접근을 차단하지 않고, 로그만 남길 것이다.
$ sudo setenforce 0 # current mode를 permissive mode로 변경
$ sudo setenforce 1 # current mode를 enforoing mode로 변경
$ sestatus # SELinux 상태 확인
5. 해결방법 3 (SELinux 정책 수정)
SELinux 정책을 수정하여 비표준 경로에서 접근을 허용하도록 설정할 수 있다.
$ sudo semanage fcontext -a -e /var/log/nginx /data2/nginx/log # SELinux의 파일 컨텍스트 설정 추가
$ sudo semanage fcontext -l -C # 적용된 파일 컨텍스트 규칙 확인
$ sudo restorecon -Rv /data2/nginx/log # 컨텍스트 설정을 해당 dir에 반영
성공 !!
위 3가지 방법 중에 상황에 맞춰서 적용하면 될 것 같다.
참고사이트
반응형
'DevOps > Linux' 카테고리의 다른 글
[Linux] yum repository 에러 해결 (1) | 2024.07.26 |
---|---|
[Linux] SFTP로 파일 전송하기 (0) | 2024.01.02 |
[Linux] 프로세스 모니터링을 위한 supervisor 적용 과정 (0) | 2023.12.28 |
[Linux] nohub과 &(앰퍼샌드) 사용법과 이해 (0) | 2023.09.16 |
[Linux] 리눅스에서 JAVA 애플리케이션 실행하기 (0) | 2023.09.16 |