← 문제 라이브러리
Linux 중급 LINUX-006 · 19분

배포 스크립트를 바꾼 뒤 앱이 설정 파일을 permission denied로 못 읽음

배포 속도를 높이려고 배포 스크립트를 고쳐, 앱 계정으로 파일을 올리던 방식을 sudo로 한 번에 복사하는 방식으로 바꿨습니다.

검수된 문제무료오늘의 문제 · 무료
시나리오

배포 속도를 높이려고 배포 스크립트를 고쳐, 앱 계정으로 파일을 올리던 방식을 sudo로 한 번에 복사하는 방식으로 바꿨습니다. 첫 배포 직후 앱이 시작하자마자 종료되고, 로그에는 설정 파일을 읽을 수 없다는 오류가 남습니다. 파일 내용은 이전 배포와 똑같습니다. 보안팀은 SELinux가 막는 것 아니냐고 묻고, 개발자는 설정 파일 경로가 바뀐 것 같다고 합니다. 앱이 뜨지 않아 로드밸런서가 이 서버를 빼 버렸고, 남은 서버 두 대가 트래픽을 모두 받고 있습니다. 같은 스크립트로 다른 서버 두 대에도 곧 배포할 예정입니다.

단서
앱 로그
FATAL open /srv/app/config/app.yml: permission denied
ls -l · 실행 계정
$ ls -l /srv/app/config/
-rw------- 1 root root 2143 Sep 27 14:05 app.yml
-rw------- 1 root root  418 Sep 27 14:05 logging.yml

$ systemctl show -p User app
User=app
배포 스크립트 변경분
-  sudo -u app rsync -a build/config/ /srv/app/config/
+  sudo cp -r build/config/* /srv/app/config/

$ sudo sh -c umask
0077

과제 원인을 좁히고, 서비스를 되살리는 순서(검증 포함)와 재발 방지책을 적어 보세요.

먼저 볼 것
  • 파일 권한(소유자·그룹·모드)과 실행 계정을 함께 보기
  • 누가 어떤 umask로 파일을 만들었는지
점검 체크리스트
  1. ls -l 로 소유자와 모드
  2. systemctl show -p User 로 서비스 실행 계정
  3. sudo -u app cat <파일> 로 실행 계정 입장에서 읽어 보기
  4. ls -Z 와 ausearch 로 SELinux 거부가 있는지(있는지 없는지만)