리눅스에서 파일이나 디렉터리를 새로 만들 때, 기본적으로 어떤 권한이 자동으로 붙느냐

리눅스의 권한은 소유자, 그룹, 기타 사용자 세 범주로 나뉘고, 각각 읽기(r), 쓰기(w), 실행(x) 권한을 가진다. 숫자로 표현하면 읽기는 4, 쓰기는 2, 실행은 1이다. 그래서 6이면 읽기와 쓰기, 7이면 읽기·쓰기·실행을 모두 가진다는 뜻이다. 예를 들어 rw-rw-rwx는 소유자는 읽기·쓰기, 그룹도 읽기·쓰기, 다른 사용자는 읽기·쓰기·실행이 가능하다는 의미다.

문제는 파일을 만들 때마다 이런 권한을 일일이 지정하는 것이 번거롭다는 점이다. 그래서 리눅스에는 “기본 권한 규칙”이 있고, 그 규칙을 정하는 값이 umask다. umask는 새 파일이나 디렉터리를 만들 때 원래 줄 수 있는 최대 권한에서 무엇을 빼버릴지를 정의한다.

기본적으로 파일은 최대 권한이 666이다. 파일은 실행 권한을 기본으로 주지 않기 때문이다. 디렉터리는 최대 권한이 777이다. 디렉터리는 들어가고 실행되어야 하므로 실행 권한이 포함된다. 여기서 umask 값을 빼서 실제 권한이 결정된다.

예를 들어 umask가 022라고 하자. 이 값은 소유자, 그룹, 기타 사용자 순서로 적용된다. 계산은 단순히 “빼기”다. 파일의 경우 666에서 022를 빼면 644가 된다. 이 644는 소유자는 읽기와 쓰기가 가능하고, 그룹과 다른 사용자는 읽기만 가능하다는 뜻이다. 디렉터리를 만들면 777에서 022를 빼서 755가 된다. 그래서 소유자는 모든 권한을 가지고, 그룹과 다른 사용자는 읽기와 실행만 가능해진다.

중요한 점은 umask가 “허용할 권한”이 아니라 “금지할 권한”이라는 것이다. umask 값이 2라는 것은 “쓰기 권한을 제거하라”는 의미이고, 1이라면 “실행 권한을 제거하라”는 의미다. 그래서 umask 숫자가 커질수록 기본 권한은 더 제한적으로 된다.

umask 값은 umask 명령을 실행하면 바로 확인할 수 있다. 대부분의 일반 사용자 계정은 022를 기본값으로 사용한다. 이 설정은 “내가 만든 파일은 내가 수정할 수 있지만, 다른 사람은 함부로 수정하지 못하게 하겠다”는 가장 보편적인 보안 기준이다.

마지막으로 천 단위 숫자는 일반적인 읽기·쓰기·실행 권한과는 다른 특수 권한이다. 4000은 setuid, 2000은 setgid, 1000은 sticky bit를 의미한다. 이들은 프로그램 실행 방식이나 디렉터리 내 파일 삭제 규칙처럼 특별한 동작을 정의할 때 사용된다. umask는 보통 백 단위까지만 신경 쓰면 되고, 특수 권한은 별도의 목적이 있을 때만 설정한다.

정리하면, umask는 “새로 만드는 파일과 디렉터리에서 기본적으로 빼버릴 권한을 정하는 값”이다. 이 개념만 이해하면 666, 777, 022 같은 숫자 계산도 자연스럽게 따라온다.