Linux에서 umask 값이 다르게 나타나는 이유

안녕하세요! 오랜만에 인사드립니다 ! 😊

그동안 블로그를 업데이트하지 못했는데요, 최근에 Oracle에 대해 배우느라 시간이 쏜살같이 지나갔습니다. 하지만 앞으로 Oracle에 관한 내용도 조금씩 공유할 계획이니 기대해 주세요!

예전에 umask에 대해 이야기한 적이 있었는데요, 오늘은 그와 관련된 추가적인 내용을 전해드리려고 찾아왔습니다
(umask의 기본 개념은 이미 잘 알고 계실 테니, 그 부분은 간단히 넘기고 바로 본론으로 들어가겠습니다. )

사용자 생성과 umask의 관계

사용자를 처음 생성하면 해당 사용자의 홈 디렉토리 권한은 기본적으로 700으로 설정됩니다. 이 설정의 이유는 /etc/login.defs 파일에서 확인할 수 있습니다.

cat /etc/login.defs
# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK           077

위와 같이 umask 값이 077로 설정되어 있으며, 이를 통해 077 – 777을 계산하면 700이라는 권한이 도출됩니다.

umask 할당

사용자를 생성할 때, 해당 사용자가 root인지 일반 사용자인지 판별하여 umask를 할당합니다. 아래는 관련 스크립트 부분입니다:

cat /etc/bashrc
# 현재 사용자의 UID가 199보다 큰지 확인
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    # 현재 사용자의 그룹 이름과 사용자 이름이 동일한 경우
    # 즉, 사용자가 자신의 기본 그룹에 속해 있을 때 umask 값을 002로 설정
    umask 002
else
    # 그렇지 않은 경우 (즉, UID가 199 이하이거나 그룹이 다를 경우)
    # umask 값을 022로 설정
    umask 022
fi

umask 확인

로그인하지 않고도 사용자의 umask를 확인할 수 있는 방법을 발견했습니다. 아래와 같이 확인해보면:

[root@localhost home]# sudo -u user2 umask
0022

일반 사용자라면 0002가 나와야 하지만, 0022로 출력되는 것을 확인할 수 있습니다. 이제 해당 사용자로 로그인하여 확인해보겠습니다.

[user2@ip-10-0-35-222 ~]$ umask
0002

차이점 확인

[user2@ip-10-0-35-222 ~]$ sudo -u user2 umask
0022

위의 확인 결과에서 umask가 0002로 설정되어 있는 것을 알 수 있습니다. 이 차이는 sudo 명령어가 root 사용자의 권한을 잠시 빌려오는 것이기 때문입니다. root는 일반 사용자와 UID가 다르므로 umask가 0022로 나타나는 것입니다.

아래와 같이 내용을 다듬어 보았습니다:

추가로 스크립트 내용을 살펴보면, 사용자의 이름과 그룹의 이름이 달라도 umask 값이 0022로 변경되는 것을 알 수 있습니다.

[root@ip-10-0-35-222 ~]# vi /etc/passwd
user2:x:1002:1003::/home/user2:/bin/bash
[user2@ip-10-0-35-222 ~]$ umask
0022

오늘은 sudoumask의 할당에 대해 좀 더 알아보았습니다. 이미 알고 계신 내용일 수도 있지만, 누군가에게는 도움이 되지 않을까 하여 글을 작성하였습니다. 읽어주셔서 감사합니다!

위로 스크롤