SELinux Enforcing 모드로 인한systemd 서비스 등록 Permission denied

2025. 4. 22. 14:30·Troubleshooting

systemd 서비스를 등록하는 도중, 서비스가 계속해서 실패하는 문제가 발생하였다. journalctl 명령어를 통해 로그를 확인한 결과, ExecStart 경로에 등록된 실행 파일에 대해 "Permission denied" 오류가 발생하는 것을 확인할 수 있었다.

 

journalctl -xeu ***.service

4월 22 11:17:39 localhost.localdomain systemd[9513]: ***.service: Failed at step EXEC spawning /home/****/****/bin/****: Permission denied
Subject: Process /home/****/****/bin/**** could not be executed
Defined-By: systemd
Support: <https://wiki.rockylinux.org/rocky/support>
 
The process /home/****/****/bin/**** could not be executed and failed.
 
The error number returned by this process is ERRNO.

4월 22 11:17:39 localhost.localdomain systemd[1]: ***.service: Control process exited, code=exited, status=203/EXEC
Subject: Unit process exited
Defined-By: systemd
Support: <https://wiki.rockylinux.org/rocky/support> 
An ExecStart= process belonging to unit ***.service has exited. 
The process' exit code is 'exited' and its exit status is 203.

4월 22 11:17:39 localhost.localdomain systemd[1]: ***.service: Failed with result 'exit-code'.

 

실제 ExecStart 경로에 등록된 실행 파일을 ls -l 명령어를 통해 확인한 결과, 권한은 755로 충분했으며, 소유자 및 그룹도 문제 없었다. 또한 systemd 서비스 파일에서 지정한 경로 및 사용자 설정도 정확하였다. 그럼에도 불구하고 systemd를 통해 서비스를 실행하면 status=203/EXEC 오류와 함께 실행이 차단되었기 때문에 단순한 권한 이슈보다는 시스템 보안 정책에 의한 차단 가능성이 의심되었다.

 

해당 내용을 찾아보니, 사용 중에 있는 OS인 Rocky Linux 9.5는 SELinux가 기본적으로 Enforcing 모드로 설정되어 있으며, /home 하위의 사용자 정의 바이너리에 대해서는 실행을 제한하는 정책을 포함하고 있었다.

 

SELinux 상태 확인

 

getenforce 명령어로 SELinux 상태를 확인한 결과, SELinux가 Enforcing 모드로 설정되어 있었고, 이는 /home 디렉토리 하위의 사용자 정의 바이너리에 대해 실행을 제한하는 정책을 포함하고 있음을 알 수 있었다.

[****@localhost etc]$ getenforce 
Enforcing

 

SELinux를 일시적 비활성화

sudo setenforce 0 --> Permissive 모드로 변경

 

서비스 재시작

sudo systemctl restart *** 

 

결과 (서비스 정상 실행)

[****@localhost etc]$ sudo systemctl status *** 
[sudo] ****의 암호: 
● ***.service - *** Database Service
     Loaded: loaded (/etc/systemd/system/***.service; static)
     Active: active (running) since Tue 2025-04-22 12:44:46 KST; 1h 16min ago
    Process: 10559 ExecStart=/home/****/****/bin/**** service start (code=exited, status=0/SUCCESS)
      Tasks: 49 (limit: 4297)

 

SELinux의 Enforcing 모드가 원인이였던 이슈이며, 이를 Permissive 모드로 변경한 후 문제를 해결할 수 있었다. 하지만 SELinux의 설정을 변경하는 것은 보안상 위험할 수 있으므로, 정책 변경 전에 반드시 OS 엔지니어와 충분히 상의해야 한다.

'Troubleshooting' 카테고리의 다른 글

THP(Transparent HugePages) 사용 시 Swap이 발생하는 원인  (0) 2025.05.12
org.springframework.beans.factory.BeanCreationException:에러와 @PostConstruct  (0) 2025.03.16
Caused by: org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL  (0) 2024.09.29
SQLGrammarException  (1) 2024.09.26
Could not retrieve host: mirrorlist.centos.org; Unknown error  (1) 2024.08.27
'Troubleshooting' 카테고리의 다른 글
  • THP(Transparent HugePages) 사용 시 Swap이 발생하는 원인
  • org.springframework.beans.factory.BeanCreationException:에러와 @PostConstruct
  • Caused by: org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL
  • SQLGrammarException
진공청소ㄱl
진공청소ㄱl
  • 진공청소ㄱl
    진공청소ㄱl
    진공청소ㄱl
  • 전체
    오늘
    어제
    • 분류 전체보기 (68)
      • Spring (26)
      • Databases (11)
      • Linux (16)
      • Troubleshooting (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
진공청소ㄱl
SELinux Enforcing 모드로 인한systemd 서비스 등록 Permission denied
상단으로

티스토리툴바