외장 톰캣 사용시, 파일 생성 권한 문제(feat. UMASK)

김유정·2024년 9월 9일
0
post-thumbnail

문제 상황

  • 서버 환경

서버 이관을 하게 되면서 새로운 서버에 톰캣 세팅을 마치고 애플리케이션 테스트를 해봤다. 외부 사용자에게 권한이 주어져야 이미지를 보여줄 수 있는데, 아래와 같이 파일은 640, 폴더는 750으로 만들어졌다. 새로 생성되는 모든 파일과 폴더가 해당 값으로 만들어지는 걸 보니 어디엔가 디폴트값으로 설정이 되어있을 것이라 추정했다.

신규 파일의 권한은 어떻게 결정이 되는가?

Linux/Unix 계열에서 모든 파일과 폴더에는 소유권과 권한이 존재한다. 이 때 권한은 UMASK라는 명령어를 통해 제한된다. UMASK를 통해 제한하고 싶은 범위를 지정할 수 있다.

UMASK

UMASK는 권한 코드처럼 3자리로 설정할 수 있는데, 권한 코드와 반대로 제한하고 싶은 범위를 지정해주면 된다.

근데, 나느 UMASK 보다는 권한 코드에 더 익숙하다보니 모든 권한을 줬을 때의 권한 코드에서 UMASK를 빼고 생각하는 게 더 편하다.

예를 들어, 022 라고 하면, 폴더와 파일이 신규로 생성되었을 때 주어지는 권한은 아래와 같다.

  • 폴더: 777 - 022 = 755
  • 파일: 666 - 022 = 644

UMASK 명령어

  • 현재 마스크 값 확인
    UMASK
  • 특정 사용자에 대한 마스크 값 확인(중괄호는 제거.)
    UMASK {사용자 이름}

기존 서버와 비교

기존 서버와 비교했을 때, 외부 사용자에 대한 권한만 달랐다. 각 서버에서 폴더와 파일에 주어지는 권한을 바탕으로 UMASK도 계산해봤다.

  • 기존 서버
    • 폴더: 755
    • 파일: 644
    • UMASK: 022
  • 이관 서버
    • 폴더: 750
    • 파일: 640
    • UMASK: 027

문제 해결

처음에는 이관한 서버에서 UMASK를 확인해봤을 때 내 예상과 다르게 022 여서 당황스러웠다. 그런데, 외장 톰캣을 사용하는 경우에는 CATALINA.sh에서 0027을 디폴트 마스크 값으로 사용하고 있었다는 걸 알게 됐다(범인이 너였어....🙉)

이걸 확인하고나서 tomcat 프로세스를 확인해보니 아니나 다를까 UMASK가 0027로 되어있었다.

내장 톰캣에서는 권한을 어떻게 설정할까?

내장 톰캣에서는 따로 UMASK를 설정하는 CATALINA.sh 가 없다보니 OS나 JVM 설정에 의존한다고 한다. 내가 설정했던 리눅스에서는 기본적으로 /etc/profile에 있는 내용을 바탕으로 사용자별 UMASK 값이 세팅이 되었다.

if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi

일반 사용자(UID >199)이면서 자신의 이름과 동일한 기본 그룹에 속해있는 경우, 그룹과의 파일 공유를 쉽게 하도록 umask 002를 설정하고,
시스템 사용자이거나 기본 그룹이 다른 경우, 더 제한적으로 umask 022로 설정하는 것을 확인할 수 있었다.

if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi

참고

0개의 댓글