umask(user mask)는 POSIX 환경에서 사용할 수 있는 명령어이자 함수로서 현재 프로세스가 생성할 파일과 디렉토리의 퍼미션을 정합니다. 이 값은 자신의 자식 프로세스에게도 계승됩니다.
이 명령어에서는 퍼미션과 마찬가지로 8진수를 사용합니다. 파일일 경우 666, 디렉토리일 경우 777에서 umask를 뺀 값이 현재 프로세스가 생성하는 파일과 디렉토리의 퍼미션이 됩니다. 예를 들어 파일을 생성할 때 기본으로 적용되는 퍼미션을 664(rw-rw-r--)으로 하고 싶다면 umask 명령어의 인자로 002를 사용해야 합니다.
1. 퍼미션 확인
/tmp로 가서 파일을 만들고 확인해봅니다.
# cd /tmp인자 없이 umask 명령어를 사용하면 현재 umask를 볼 수 있습니다.
# touch firstfile
# ls -l firstfile
-rw-rw-r-- 1 mirashi mirashi 0 7월 5 11:05 firstfile
# umask
0002
2. umask 변경
아래는 umask를 022로 변경하고 확인하는 모습입니다.
# umask 022
# touch secondfile
# ls -al secondfile
-rw-r--r-- 1 mirashi mirashi 0 7월 5 11:08 secondfile
3. 프로세스와 데몬에 umask 설정
기본적으로 이를 이루는 방법은 데몬을 시작하는 스크립트 파일이나 시작에 포함된 파일에 umask 명령어를 집어넣는 것입니다. 예를 들어 아파치의 경우 /etc/init.d/apache2(데비안)이나 그보다 더 권장되는 /etc/apache2/envvars(데비안) 안에 넣어 해결할 수 있습니다.
4. 시스템 전체의 디폴트 umask 설정
단일 계정의 umask를 변경하는 가장 쉬운 방법은 umask 명령어를 해당 계정의 홈디렉토리에 있는 .bashrc 파일이나 그와 같은 역할을 하는 파일(세션을 시작할 때 쉘이 읽는 파일)에 넣는 것입니다.
모든 계정의 umask를 변경하려면 시스템 설정을 변경해야 하며 그 방법은 배포판에 따라 다릅니다.
데비안 계열
pam_umask라는 이름의 PAM 모듈을 사용합니다. /etc/pam.d/common-session 파일과 /etc/pam.d/common-session-noninteractive 파일을 생성/수정하여 아래 줄을 추가합니다.
session optional pam_umask.so umask=0002
레드햇 계열
/etc/bashrc 파일에서 정의합니다.
# By default, we want umask to get set. This sets it for non-login shell.UID가 199를 넘고 그룹명이 계정명과 같은 계정은 002, 그 외에는 022가 디폴트입니다.
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 022
fi