umask로 Unix와 Linux 신규 파일 권한 설계하기

Unix와 Linux에서 umask가 새 파일과 디렉토리 권한에 적용되는 방식, 설정 방법, 공유와 보안을 위한 선택 기준을 정리합니다.

2026-08-14 · 최초 발행 2026-01-12

새 파일의 권한은 umask에서 시작된다

Unix와 Linux에서 새 파일과 디렉토리가 만들어질 때의 기본 권한은 umask가 결정한다. 이름은 User File-Creation Mode Mask의 약자이며, 부여할 권한이 아니라 제거할 권한을 지정하는 방식이다.

파일은 일반적으로 666(rw-rw-rw-), 디렉토리는 777(rwxrwxrwx)을 출발점으로 삼는다. 여기에 umask를 적용해 최종 권한을 구한다. 이 설정은 셸 환경과 프로세스별로 적용된다.

권한 마스크가 계산되는 방식

권한을 설명할 때는 기본 권한에서 umask를 빼는 형태로 볼 수 있다. 실제 동작은 umask의 보수(complement)와 기본 권한을 비트 AND 연산하는 방식이다.

파일에는 기본적으로 실행 권한이 없고, 디렉토리는 내부로 진입하기 위해 실행 권한이 필요하다.

최종 권한 = 기본 권한 - umask
umask: 0 2 2
       │ │ │
       │ │ └─ Others (기타)
       │ └─── Group (그룹)
       └───── Owner (소유자)

umask 022를 적용하면 파일과 디렉토리의 결과는 다음과 같다.

파일:

666 (기본)
- 022 (umask)
-----
644 (rw-r--r--)

디렉토리:

777 (기본)
- 022 (umask)
-----
755 (rwxr-xr-x)

umask 077은 소유자만 접근하도록 만든다.

파일:

666 (기본)
- 077 (umask)
-----
600 (rw-------)

디렉토리:

777 (기본)
- 077 (umask)
-----
700 (rwx------)

그룹 협업을 염두에 둔 umask 002의 결과는 다음과 같다.

파일:

666 (기본)
- 002 (umask)
-----
664 (rw-rw-r--)

디렉토리:

777 (기본)
- 002 (umask)
-----
775 (rwxrwxr-x)

현재 설정을 확인하고 적용 범위를 정하기

현재 셸의 umask는 8진수 또는 심볼릭 형식으로 확인할 수 있다.

umask           # 8진수 표시 (예: 0022)
umask -S        # 심볼릭 표시 (예: u=rwx,g=rx,o=rx)

출력은 다음과 같은 형태다.

$ umask
0022

$ umask -S
u=rwx,g=rx,o=rx

현재 세션에만 적용할 값은 직접 설정한다.

umask 022       # 일반 설정
umask 077       # 엄격한 보안
umask 002       # 그룹 공유

이 방식은 현재 셸 세션에만 적용되며, 새 터미널은 기본값을 사용한다.

사용자 단위로 유지하려면 셸 초기화 파일에 설정을 넣는다.

# ~/.bashrc 또는 ~/.bash_profile 편집
echo "umask 022" >> ~/.bashrc

# 적용
source ~/.bashrc

시스템 전체 설정은 /etc/profile 또는 /etc/bashrc에서 관리할 수 있다.

# /etc/profile 또는 /etc/bashrc 편집
sudo vi /etc/profile

# 추가
umask 022

사용자 그룹에 따라 다르게 적용하는 설정도 가능하다.

# /etc/profile 내에서 조건부 설정
if [ $(id -u) -ge 1000 ]; then
    umask 002   # 일반 사용자
else
    umask 022   # 시스템 사용자
fi

공개 범위와 협업 방식에 맞춘 값

umask 파일 권한 디렉토리 권한 적용 시나리오
022 644 (rw-r--r--) 755 (rwxr-xr-x) 일반 사용자 (기본)
077 600 (rw-------) 700 (rwx------) 보안 중시 (개인 데이터)
002 664 (rw-rw-r--) 775 (rwxrwxr-x) 그룹 협업 (공유 환경)
000 666 (rw-rw-rw-) 777 (rwxrwxrwx) 제한 없음 (권장하지 않음)

umask 022에서는 소유자가 파일을 읽고 쓸 수 있으며 디렉토리에서는 실행할 수 있다. 그룹과 기타 사용자는 읽기만 가능하다. 일반 사용자 기본값, 대부분의 Linux 배포판 기본값, 웹 파일 접근 제어에 쓰인다.

umask 077은 파일 600(rw-------), 디렉토리 700(rwx------)을 만든다. 그룹과 기타 사용자의 접근을 차단하므로 개인 데이터, 비밀번호 파일, 보안이 중요한 환경에 맞는다. 일부 시스템에서는 root 사용자의 기본값으로 쓰인다.

umask 002는 소유자와 그룹에 읽기·쓰기를 허용하고 기타 사용자에게는 읽기만 허용한다. 같은 그룹 구성원 간 파일 공유가 필요한 팀 협업 환경과 개발 서버에서 사용할 수 있다.

일반 사용자는 022 또는 027을 선택할 수 있으며, 027에서는 그룹도 읽기만 가능하다. 관리자는 시스템 파일 보호를 위해 022 또는 077을, 개발 팀은 그룹 협업을 위해 002를 사용할 수 있다.

공유 디렉토리와 서버 프로세스에서의 적용

개인 개발 환경에서는 다른 사용자가 소스 코드를 읽을 수 있도록 022를 둘 수 있다.

umask 022
# 소스 코드 다른 사용자도 읽기 가능

팀 프로젝트에서는 같은 그룹의 개발자가 파일을 수정할 수 있도록 002를 적용한다.

umask 002
# 같은 그룹 개발자들이 파일 수정 가능

웹 서버 프로세스가 웹 파일을 읽어야 하는 환경에서는 022를 사용할 수 있다.

umask 022
# 웹 파일: 644, 디렉토리: 755
# 웹 서버 프로세스가 읽을 수 있음

데이터베이스 파일처럼 소유자만 접근해야 하는 경우에는 077을 적용한다.

umask 077
# 데이터 파일 소유자만 접근

그룹 공유 디렉토리에서는 SGID와 함께 사용할 수 있다.

# 그룹 공유
umask 002
mkdir /shared
chmod 2775 /shared   # SGID 설정
# 파일 생성 시 그룹 자동 상속

공용 디렉토리에서는 Sticky bit를 이용해 파일 소유자만 삭제할 수 있게 한다.

chmod +t /tmp
# 소유자만 파일 삭제 가능

umask 000은 모든 사용자에게 읽기와 쓰기를 허용하므로 민감한 파일이 노출될 위험이 있다. 또한 umask 000을 적용해도 파일은 666이므로 실행 권한이 부여되지는 않는다.

생성 권한과 기존 권한 변경을 구분하기

umask는 새 파일이 생성될 때의 기본 권한을 다루고, chmod는 이미 존재하는 파일의 권한을 바꾼다.

chmod 644 file.txt       # 직접 권한 설정
chmod u+x script.sh      # 실행 권한 추가

사용자별 또는 그룹별로 더 세밀한 권한을 관리해야 한다면 ACL(Access Control List)을 사용한다.

setfacl -m u:username:rw file.txt   # 특정 사용자 권한
getfacl file.txt                    # ACL 조회

ACL은 umask보다 우선하며, 세밀한 권한 제어가 필요할 때 사용한다.

umask파일 권한LinuxUnix보안