기본 문법
umask [-p] [-S] [마스크]
umask 는 프로세스가 새로 만드는 파일과 디렉터리의 기본 권한을 결정하는 마스크 값을 조회하거나 설정하는 셸 내장 명령입니다. 리눅스는 파일을 만들 때 기본값 666(rw-rw-rw-), 디렉터리를 만들 때 777(rwxrwxrwx)에서 umask 에 지정된 비트를 제거하는 방식으로 최종 권한을 정합니다. 예를 들어 umask 가 022 이면 파일은 644, 디렉터리는 755 가 됩니다.
여러 사용자가 함께 쓰는 서버에서 새로 만든 파일이 다른 사용자에게 읽히지 않도록 기본 권한 정책을 정할 때 사용합니다. 자주 쓰는 값은 022(그룹·기타 사용자 쓰기 금지), 027(기타 사용자 접근 차단), 077(소유자만 접근)입니다. 값을 영구 적용하려면 사용자별로는 ~/.bashrc 나 ~/.bash_profile 에 기록합니다. /etc/profile, /etc/bashrc 같은 시스템 파일은 모든 사용자와 서비스에 영향을 주므로, 수정 전 원본을 백업하고 변경 범위를 확인한 뒤 신중히 다뤄야 합니다.
리눅스마스터·RHCSA·LPIC 시험에서는 umask 값과 실제 생성 권한을 계산하는 문제, 특정 사용자에게만 기본 권한 정책을 적용하는 문제로 자주 출제됩니다. 설정 파일에 넣은 값이 로그인 셸에서 반영되는지 확인하는 과정까지 함께 묻는 경우가 많습니다.
자주 쓰는 옵션
| 옵션 | 의미 | 예 |
|---|---|---|
(인자 없음) | 현재 umask 값을 8진수로 출력 | umask |
-S | 현재 umask 를 rwx 기호 형식(허용되는 권한)으로 출력 | umask -S |
-p | 그대로 다시 실행할 수 있는 형태(umask 0022)로 출력 | umask -p |
8진수 마스크 | 제외할 권한 비트를 8진수로 지정 | umask 027 |
기호 마스크 | 허용할 권한을 chmod 형식으로 지정(제외할 비트가 아님에 주의) | umask u=rwx,g=rx,o= |
실무 예시
현재 umask 값 확인
$ umask
0022
현재 셸에 적용된 umask 값을 4자리 8진수로 출력합니다. 앞의 0 은 특수 권한 자리입니다.
기호 형식으로 확인
$ umask -S
u=rwx,g=rx,o=rx
제외할 비트 대신 실제로 허용되는 권한을 rwx 기호로 보여 주므로 계산 없이 결과를 확인할 수 있습니다. 출력 u=rwx,g=rx,o=rx 는 8진수 022 에 해당합니다.
umask 022 에서 파일·디렉터리 생성 권한 확인
준비: mkdir -p /tmp/demo; rm -rf /tmp/demo/t022
$ cd /tmp/demo && umask 022 && mkdir t022 && touch t022/f.txt && ls -ld t022 t022/f.txt
drwxr-xr-x. 2 root root 19 Sep 16 12:05 t022
-rw-r--r--. 1 root root 0 Sep 16 12:05 t022/f.txt
파일은 666 에서 022 비트를 제거한 644, 디렉터리는 777 에서 022 비트를 제거한 755 로 만들어집니다. 권한 문자열 끝의 점(.)은 SELinux 보안 컨텍스트가 있음을 뜻하며, 디렉터리 크기(19)는 파일 시스템에 따라 달라집니다.
umask 027 적용 결과 비교
준비: mkdir -p /tmp/demo; rm -rf /tmp/demo/t027
$ cd /tmp/demo && umask 027 && mkdir t027 && touch t027/report.txt && umask && ls -ld t027 t027/report.txt
0027
drwxr-x---. 2 root root 24 Sep 16 12:05 t027
-rw-r-----. 1 root root 0 Sep 16 12:05 t027/report.txt
027 을 적용하면 디렉터리는 750, 파일은 640 이 되어 기타 사용자(other)에게 아무 권한도 부여되지 않습니다. 연결 문제 #223 과 같은 조건입니다.
설정 파일에 기록해 새 셸에 적용
준비: mkdir -p /tmp/demo/home; printf '# demo bashrc\n' > /tmp/demo/home/.bashrc
$ echo 'umask 027' >> /tmp/demo/home/.bashrc && bash -c 'source /tmp/demo/home/.bashrc; umask'
0027
~/.bashrc 에 umask 줄을 추가한 뒤 새 셸에서 값이 반영되는지 확인하는 방식입니다. 실제 적용 시에는 해당 사용자의 홈 디렉터리(예: /home/ops/.bashrc)에 같은 줄을 추가하고, 기존 내용이 지워지지 않도록 덮어쓰기(>)가 아닌 추가(>>)를 사용합니다.
주의할 점
- umask 는 셸 내장 명령이라 실행한 셸과 그 셸에서 시작한 프로세스에만 적용됩니다. 영구 적용하려면 ~/.bashrc 등 설정 파일에 기록해야 합니다.
- 기호 형식(u=rwx,g=rx,o=)은 제외할 비트가 아니라 '허용할 권한'을 뜻하므로 8진수 표기와 의미가 반대입니다.
- umask 는 산술 뺄셈이 아니라 비트 제거입니다. 파일은 기본 666 에서 시작하므로 실행 권한(x)은 umask 값과 무관하게 자동으로 붙지 않습니다.
- 이미 존재하는 파일의 권한은 바뀌지 않습니다. 기존 파일은 chmod 로 따로 조정해야 합니다.
- /etc/profile, /etc/bashrc 를 수정하면 모든 사용자와 로그인 셸에 영향을 줍니다. 변경 전 원본을 백업하고, 가능하면 사용자별 설정 파일이나 /etc/profile.d/ 아래의 별도 스크립트를 사용하는 편이 안전합니다.
- cron, systemd 서비스 등 로그인 셸을 거치지 않는 환경에서는 ~/.bashrc 의 umask 가 적용되지 않습니다.
이 명령어로 풀 수 있는 실습 문제
브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.
관련 명령어
마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.
