Linux Tomcat Permission 변경 (umask)

Tomcat에서 생성되는 파일의 기본 권한을 설정하는 방법입니다. umask를 조정하여 보안을 강화하거나 다른 사용자/그룹의 접근을 제어할 수 있습니다.

언제 사용하나요?

  • Tomcat 로그 파일 권한 제어
  • 업로드 파일 권한 설정
  • 보안 강화를 위한 제한적 권한
  • 그룹 사용자 접근 허용

umask 이해

# umask는 파일 생성 시 제거할 권한 지정
# 기본 권한 - umask = 실제 권한

# 파일 기본: 666 (rw-rw-rw-)
# 디렉토리 기본: 777 (rwxrwxrwx)

umask 022  # 파일: 644, 디렉토리: 755
umask 027  # 파일: 640, 디렉토리: 750
umask 077  # 파일: 600, 디렉토리: 700

# 권한 계산
# 666 - 022 = 644 (rw-r--r--)
# 777 - 022 = 755 (rwxr-xr-x)

catalina.sh에서 설정

# $CATALINA_HOME/bin/catalina.sh 편집
vi $CATALINA_HOME/bin/catalina.sh

# 파일 상단에 umask 추가
#!/bin/sh
umask 0027

# 또는 setenv.sh 사용 (권장)
# $CATALINA_HOME/bin/setenv.sh 생성
vi $CATALINA_HOME/bin/setenv.sh

#!/bin/sh
umask 0027

# 실행 권한 부여
chmod +x $CATALINA_HOME/bin/setenv.sh

시스템 서비스로 설정

# systemd 서비스 파일
# /etc/systemd/system/tomcat.service

[Service]
UMask=0027
...

# 또는 환경 파일
# /etc/sysconfig/tomcat
UMASK="0027"

# 서비스 재시작
sudo systemctl daemon-reload
sudo systemctl restart tomcat

Tomcat 디렉토리 권한 설정

# 기본 디렉토리 구조
$CATALINA_HOME/
├── bin/     (755) 실행 파일
├── conf/    (700) 설정 파일 (보안 중요)
├── lib/     (755) 라이브러리
├── logs/    (750) 로그 파일
├── temp/    (750) 임시 파일
├── webapps/ (755) 웹 애플리케이션
└── work/    (750) 컴파일된 JSP

# 권한 일괄 설정
cd $CATALINA_HOME
chmod 700 conf
chmod 750 logs temp work
chmod 755 bin lib webapps

# 소유자 설정
chown -R tomcat:tomcat $CATALINA_HOME

conf 디렉토리 보안

# server.xml, tomcat-users.xml 등 민감 파일
chmod 600 $CATALINA_HOME/conf/server.xml
chmod 600 $CATALINA_HOME/conf/tomcat-users.xml
chmod 600 $CATALINA_HOME/conf/context.xml

# 또는 디렉토리 전체
chmod 700 $CATALINA_HOME/conf
chmod 600 $CATALINA_HOME/conf/*

로그 파일 권한

# 로그 파일 기본 권한 변경
# logging.properties에서 직접 지정 불가
# umask로 제어

# 기존 로그 파일 권한 변경
chmod 640 $CATALINA_HOME/logs/*.log
chmod 640 $CATALINA_HOME/logs/*.txt

# logrotate 설정에서도 권한 지정
# /etc/logrotate.d/tomcat
/var/log/tomcat/*.log {
    create 0640 tomcat tomcat
    ...
}

업로드 파일 권한

// Java 코드에서 파일 권한 설정
import java.nio.file.*;
import java.nio.file.attribute.*;

// 파일 생성 후 권한 설정
Path path = Paths.get("/upload/file.txt");
Files.createFile(path);

// POSIX 권한 설정 (Linux)
Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rw-r-----");
Files.setPosixFilePermissions(path, perms);

// 또는 생성 시 권한 지정
FileAttribute<Set<PosixFilePermission>> attr = 
    PosixFilePermissions.asFileAttribute(perms);
Files.createFile(path, attr);

확인 방법

# 현재 umask 확인
umask

# Tomcat 프로세스의 umask 확인
cat /proc/$(pgrep -f catalina)/status | grep Umask

# 파일 권한 확인
ls -la $CATALINA_HOME/logs/

권장 설정

환경umask용도
개발0022일반적인 접근
운영0027그룹만 읽기
보안 강화0077소유자만 접근

주의사항

  • 너무 제한적인 권한은 애플리케이션 오류 유발
  • 웹서버(Apache/Nginx)와 연동 시 권한 확인
  • 설정 변경 후 Tomcat 재시작 필요