[2과목 1장 01절] chown·chgrp로 소유권을 바꾸는 방법과, 새 파일의 기본 권한을 결정하는 umask 계산을 실행 결과로 검증합니다.
🎯 이 강의 학습 목표
이 강은 2과목 1장 01절 파일 소유권과 권한 설정의 두 번째입니다. 이 강을 마치면 chown·chgrp로 소유권을 바꿀 수 있고, 새로 만든 파일의 권한이 왜 644가 되는지 설명할 수 있으며, umask 값이 주어졌을 때 결과 권한을 계산할 수 있게 됩니다.
umask는 시험에서 계산 문제로 직접 출제됩니다. "umask가 022일 때 새로 만든 파일의 권한은?" 같은 형태입니다. 그런데 많은 교재가 "기본값에서 umask를 뺀다"고만 설명해서, 단순 뺄셈으로는 답이 틀리는 경우에 대응하지 못합니다. 이 강에서는 원리와 함께 실제 실행 결과로 검증합니다.
💡 소유권 — chown과 chgrp
14강에서 권한이 소유자·그룹·기타 세 주체에 대해 정해진다고 했습니다. 그렇다면 누가 소유자이고 어느 그룹인지를 바꾸는 방법이 필요합니다.
| 명령 | 바꾸는 것 | 형식 |
|---|---|---|
chown | 소유자 (그룹도 동시에 가능) | chown 사용자 파일 / chown 사용자:그룹 파일 |
chgrp | 그룹만 | chgrp 그룹 파일 |
chown의 표기법이 몇 가지 있습니다.
chown lms file— 소유자만 lms로 변경chown lms:dev file— 소유자 lms, 그룹 dev로 동시 변경chown :dev file— 그룹만 변경 (chgrp dev file과 동일)chown lms: file— 소유자 lms, 그룹은 lms의 1차 그룹으로
구분자로 콜론(:)이 표준이며 점(.)도 예전 방식으로 인정됩니다. 주요 옵션은 -R(하위 디렉터리까지 재귀)입니다.
권한을 가진 사람이 누구인지가 중요합니다. chown으로 소유자를 바꾸는 것은 root만 할 수 있습니다. 일반 사용자가 자기 파일의 소유자를 남에게 넘길 수 있다면, 디스크 할당량(쿼터)을 회피하거나 책임을 떠넘길 수 있기 때문입니다. 반면 chgrp은 자신이 소유자이면서 동시에 그 그룹에 속해 있을 때 일반 사용자도 실행할 수 있습니다.
💡 기본 권한은 666과 777에서 시작한다
파일을 새로 만들면 권한이 644, 디렉터리를 새로 만들면 755가 되는 것이 보통입니다. 이 숫자는 어디서 올까요?
출발점은 파일 666, 디렉터리 777입니다.
| 대상 | 시작값 | 이유 |
|---|---|---|
| 파일 | 666 (rw-rw-rw-) | 새 파일에 실행 권한을 주지 않는다는 보안 원칙 |
| 디렉터리 | 777 (rwxrwxrwx) | 디렉터리는 x(통과 권한)가 없으면 쓸 수 없다 |
파일이 777이 아니라 666인 이유를 정확히 이해해 두십시오. 만약 새로 만든 파일에 실행 권한이 자동으로 붙는다면, 악의적인 내용이 담긴 파일이 곧바로 실행 가능한 상태가 됩니다. 실행이 필요한 파일은 만든 사람이 chmod +x로 명시적으로 부여하도록 한 것입니다. 반대로 디렉터리는 x가 없으면 14강에서 본 것처럼 들어갈 수조차 없으므로 777에서 출발합니다.
이 시작값에서 일부 권한을 깎아 내는 값이 umask입니다.
💡 umask 계산 — 정확한 원리
umask는 "새로 만드는 파일·디렉터리에서 제외할 권한"을 지정하는 값입니다. 셸마다 하나씩 갖고 있으며, 인자 없이 umask를 실행하면 현재 값을 보여 줍니다.
계산은 뺄셈이 아니라 비트 연산입니다. 정확히는 시작값에서 umask에 켜진 비트를 끄는 것입니다. 대부분의 경우 뺄셈과 결과가 같지만, 시작값에 없는 비트를 umask가 끄려 할 때 달라집니다.
대표적인 예가 umask 023입니다.
| 단계 | 소유자 | 그룹 | 기타 |
|---|---|---|---|
| 파일 시작값 666 | rw- (110) | rw- (110) | rw- (110) |
| umask 023 | 0 (000) | 2 (010) | 3 (011) |
| 제거할 권한 | 없음 | w | w, x |
| 결과 | rw- = 6 | r-- = 4 | r-- = 4 |
결과는 644입니다. 그런데 단순히 666 − 023을 계산하면 643이 나옵니다. 왜 다를까요? 기타 자리의 시작값 rw-에는 애초에 x가 없습니다. umask의 3(=wx)이 x도 끄라고 하지만 이미 꺼져 있으므로 아무 일도 일어나지 않습니다. 없는 것을 또 빼서 음수가 되는 일은 없습니다.
따라서 정확한 계산법은 "각 자리에서 umask에 있는 권한을 지운다"입니다. 잠시 뒤 실습에서 이 결과를 실제로 확인합니다.
자주 쓰이는 umask 값의 결과를 정리합니다.
| umask | 파일 (666 기준) | 디렉터리 (777 기준) | 성격 |
|---|---|---|---|
| 022 | 644 rw-r--r-- | 755 rwxr-xr-x | 가장 일반적인 기본값 |
| 002 | 664 rw-rw-r-- | 775 rwxrwxr-x | 그룹 협업용(그룹 쓰기 허용) |
| 077 | 600 rw------- | 700 rwx------ | 가장 엄격(본인만) |
| 027 | 640 rw-r----- | 750 rwxr-x--- | 서버에서 자주 쓰는 보안 설정 |
| 000 | 666 | 777 | 아무것도 안 깎음(위험) |
022·002·077 세 개는 반드시 외워야 합니다. 시험 계산 문제의 대부분이 이 값들로 출제됩니다.
umask 설정 방법은 두 가지입니다. 확인은 umask(8진수) 또는 umask -S(기호 형식)이고, 변경은 umask 022처럼 값을 붙입니다. 다만 이렇게 바꾸면 현재 셸에서만 유효하므로, 영구 적용하려면 /etc/profile(전역)이나 ~/.bashrc·~/.bash_profile(개인)에 적어 둡니다. 이 설정 파일들의 관계는 22강에서 다룹니다.
💻 실습으로 확인하기
아래는 /tmp/lm15에서 실제 실행한 결과입니다.
$ umask
0022
$ umask -S
u=rwx,g=rx,o=rx
umask는 0022를 출력합니다. 앞의 0은 특수 권한 자리(16강에서 다룹니다)이고 실제로 보는 것은 뒤 세 자리 022입니다. umask -S는 같은 값을 "남는 권한" 기준의 기호로 보여 줍니다. u=rwx,g=rx,o=rx는 디렉터리 기준으로 755가 남는다는 뜻입니다. 같은 값을 8진수는 깎는 쪽, -S는 남는 쪽으로 표현한다는 점이 헷갈리기 쉬우니 주의하십시오.
$ umask 022 && touch f022 && mkdir d022 && ls -ld f022 d022
-rw-r--r-- 1 chung chung 0 Sep 12 21:04 f022
drwxr-xr-x 2 chung chung 4096 Sep 12 21:04 d022
$ umask 077 && touch f077 && mkdir d077 && ls -ld f077 d077
-rw------- 1 chung chung 0 Sep 12 21:04 f077
drwx------ 2 chung chung 4096 Sep 12 21:04 d077
$ umask 002 && touch f002 && mkdir d002 && ls -ld f002 d002
-rw-rw-r-- 1 chung chung 0 Sep 12 21:04 f002
drwxrwxr-x 2 chung chung 4096 Sep 12 21:04 d002
표로 외운 값이 정확히 재현되었습니다. 022 → 파일 644·디렉터리 755, 077 → 파일 600·디렉터리 700, 002 → 파일 664·디렉터리 775입니다. 같은 umask인데도 파일과 디렉터리의 결과가 다른 이유가 시작값(666과 777)의 차이라는 점을 세 쌍을 비교하며 확인하십시오. 특히 077에서 디렉터리가 700이 되는 것은 777에서 그룹·기타를 통째로 지웠기 때문입니다.
이제 앞에서 예고한 단순 뺄셈이 통하지 않는 경우를 검증합니다.
$ umask 023 && touch f023 && mkdir d023 && ls -ld f023 d023
-rw-r--r-- 1 chung chung 0 Sep 12 21:05 f023
drwxr-xr-- 2 chung chung 4096 Sep 12 21:05 d023
파일의 결과가 rw-r--r-- = 644입니다. 666 − 023 = 643이 아닙니다. 기타 자리의 시작값 rw-에 원래 x가 없었기 때문에, umask의 3(=wx) 중 x 부분은 효과가 없었던 것입니다.
반면 디렉터리는 rwxr-xr-- = 754로 777 − 023 = 754와 일치합니다. 디렉터리는 시작값 777에 모든 비트가 켜져 있어 뺄셈과 결과가 같습니다. 뺄셈이 어긋나는 것은 파일 쪽뿐이라는 사실을 이 한 쌍으로 정리할 수 있습니다.
$ touch own.txt && ls -l own.txt
-rw-r--r-- 1 chung chung 0 Sep 12 21:04 own.txt
$ chgrp users own.txt && ls -l own.txt
-rw-r--r-- 1 chung users 0 Sep 12 21:04 own.txt
chgrp의 효과입니다. ls -l의 네 번째 열(그룹)이 chung에서 users로 바뀌었습니다. 세 번째 열의 소유자는 그대로입니다. 이 명령이 일반 사용자 권한으로 성공한 것은, 11강에서 확인했듯 chung이 users 그룹의 구성원이기 때문입니다. 속하지 않은 그룹으로는 바꿀 수 없습니다.
소유자 변경은 root 권한이 필요하므로 실습 환경에서 확인하십시오.
# 가상머신 등 실습 환경에서만 실행할 것
sudo chown lms own.txt # 소유자만 변경
sudo chown lms:devteam own.txt # 소유자와 그룹 동시 변경
sudo chown -R lms:devteam /srv/app # 하위까지 재귀 적용
⚠️ 시험에 나오는 함정
| 함정 | 정확한 사실 |
|---|---|
| 파일의 기본 시작값은 777이다 | 파일 666 · 디렉터리 777 |
| umask는 항상 단순 뺄셈이다 | 비트를 끄는 것. umask 023 → 파일 644(643 아님) |
| umask 022면 파일도 755가 된다 | 파일은 644, 디렉터리가 755 |
umask -S는 깎는 권한을 보여 준다 | 남는 권한을 기호로 보여 줌 |
일반 사용자도 chown으로 소유자를 넘길 수 있다 | root만 가능 |
chgrp은 아무 그룹으로나 바꿀 수 있다 | 일반 사용자는 자신이 속한 그룹으로만 |
umask 022를 실행하면 영구 적용된다 | 현재 셸만. 영구 적용은 /etc/profile·~/.bashrc |
📝 핵심 요약 — 암기표
| 항목 | 핵심 |
|---|---|
chown | 소유자(+그룹) 변경 · 사용자:그룹 · root만 가능 · -R 재귀 |
chgrp | 그룹만 변경 · 자신이 속한 그룹으로만(일반 사용자) |
| 기본 시작값 | 파일 666 · 디렉터리 777 |
| 파일이 666인 이유 | 새 파일에 실행 권한을 주지 않는다는 보안 원칙 |
| umask 계산 | 시작값에서 umask에 있는 권한을 지운다(뺄셈 아님) |
| umask 022 | 파일 644 · 디렉터리 755 |
| umask 002 | 파일 664 · 디렉터리 775 |
| umask 077 | 파일 600 · 디렉터리 700 |
| 확인·설정 | umask(8진수) · umask -S(남는 권한 기호) · umask 022 |
| 영구 적용 | /etc/profile(전역) · ~/.bashrc·~/.bash_profile(개인) |
다음 16강에서는 rwx로는 설명되지 않는 특수 권한 — SetUID·SetGID·스티키 비트를 다룹니다. /usr/bin/passwd가 왜 일반 사용자에게도 동작하는지, /tmp에서 왜 남의 파일을 못 지우는지가 여기서 풀립니다.
📋 실전 문제
1. umask 값이 022일 때 새로 생성되는 파일의 권한은?
① 755 ② 644 ③ 664 ④ 600
2. umask 값이 077일 때 새로 생성되는 디렉터리의 권한은?
① 700 ② 600 ③ 770 ④ 077
3. 새로 생성되는 파일과 디렉터리의 기본 시작 권한으로 올바르게 짝지어진 것은?
① 파일 777, 디렉터리 777 ② 파일 666, 디렉터리 777
③ 파일 644, 디렉터리 755 ④ 파일 777, 디렉터리 666
4. 파일의 기본 시작 권한이 777이 아니라 666인 이유로 가장 적절한 것은?
① 디스크 용량을 절약하기 위해
② 새로 만든 파일에 실행 권한을 자동으로 주지 않기 위해
③ 파일 시스템이 3비트만 지원하기 때문에
④ umask의 최댓값이 666이기 때문에
5. umask가 023일 때 새로 생성되는 파일의 권한으로 옳은 것은?
① 643 ② 644 ③ 654 ④ 753
6. 파일의 그룹 소유권만 변경하는 명령으로 알맞지 않은 것은?
① chgrp dev file ② chown :dev file
③ chown .dev file ④ chmod g=dev file
7. chown 명령으로 파일의 소유자를 다른 사용자로 변경할 수 있는 주체는?
① 모든 사용자 ② 파일 소유자 본인
③ root만 ④ 해당 그룹의 구성원
8. 현재 셸에서 변경한 umask 값을 로그인할 때마다 적용되도록 하려면 어떤 파일에 기록해야 하는가?
① /etc/fstab ② /etc/passwd
③ ~/.bashrc 또는 /etc/profile ④ /etc/shadow
✅ 정답과 해설
1. 정답 ②
파일의 시작값 666에서 umask 022가 그룹과 기타의 w를 지우므로 644(rw-r--r--)가 됩니다. ①의 755는 같은 umask에서 디렉터리의 결과입니다. 파일과 디렉터리의 시작값이 다르다는 점을 노린 가장 흔한 함정입니다.
2. 정답 ①
디렉터리의 시작값 777에서 umask 077이 그룹과 기타의 권한을 모두 지우므로 700(rwx------)이 됩니다. ②의 600은 같은 umask에서 파일의 결과입니다.
3. 정답 ②
파일 666, 디렉터리 777입니다. ③의 644·755는 umask 022가 적용된 결과값이지 시작값이 아닙니다. 이 둘을 혼동하면 모든 계산이 어긋납니다.
4. 정답 ②
새로 만들어진 파일이 곧바로 실행 가능하면 보안상 위험하므로, 실행 권한은 만든 사람이 chmod +x로 명시적으로 부여하도록 설계되었습니다. 반면 디렉터리는 x가 없으면 들어갈 수조차 없어 777에서 출발합니다.
5. 정답 ②
단순 뺄셈으로는 666−023=643이지만 실제 결과는 644입니다. 기타 자리의 시작값 rw-에는 원래 x가 없어서 umask의 3(=wx) 중 x 부분이 아무 효과를 내지 못하기 때문입니다. umask는 뺄셈이 아니라 비트를 끄는 연산임을 보여 주는 대표 사례입니다. 참고로 같은 umask에서 디렉터리는 777−023=754로 뺄셈과 일치합니다.
6. 정답 ④
chmod는 권한을 바꾸는 명령이지 소유권을 바꾸는 명령이 아닙니다. chmod g=dev 같은 문법도 존재하지 않습니다. ①·②·③은 모두 그룹만 변경하며, ③의 점(.) 표기는 콜론(:)의 예전 방식입니다.
7. 정답 ③
root만 소유자를 변경할 수 있습니다. 일반 사용자가 자기 파일을 남에게 넘길 수 있으면 디스크 쿼터를 회피하거나 책임 소재를 흐릴 수 있기 때문입니다. ②의 소유자 본인도 소유자 변경은 불가능하며, 그룹 변경(chgrp)만 자신이 속한 그룹 범위에서 가능합니다.
8. 정답 ③
umask는 셸별 설정이라 명령으로 바꾸면 현재 셸에서만 유효합니다. 로그인할 때마다 적용하려면 개인은 ~/.bashrc·~/.bash_profile, 전역은 /etc/profile에 적습니다. ①은 마운트 정보, ②는 계정 정보, ④는 암호 정보 파일로 umask와 무관합니다.
📚 참고 자료
관련 주제
- chown
- chgrp
- umask
- 기본 권한
- 권한 계산
- 666
- 777
- 소유권
- 자격증
- 자격증 강의
- 리눅스마스터 2급 완전정복
- 무료강의
- 무료 온라인 강의
- NUGUNA
- 누구나
📚 시리즈 전체 공유
리눅스마스터 2급 완전정복
이 강의가 속한 시리즈는 총 16강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.
댓글
불러오는 중...
